- Teknik clickjacking baru yang memanfaatkan filter SVG diperkenalkan, memperluas serangan pemancing klik sederhana yang sudah ada menjadi serangan interaktif yang kompleks
- Dipastikan bahwa elemen filter SVG seperti
feColorMatrixdanfeDisplacementMapdapat diterapkan bahkan pada iframe lintas origin, sehingga memungkinkan manipulasi visual dan ekstraksi data - Dengan kombinasi filter, pembacaan piksel, operasi logika, dan manipulasi UI berbasis kondisi menjadi mungkin, sehingga serangan clickjacking multistep atau serangan yang mengarahkan input dapat diimplementasikan
- Sebagai contoh nyata, serangan yang memanfaatkan kerentanan Google Docs berhasil dilakukan, dan peneliti menerima imbalan $3133.70 dari Google VRP
- Teknik ini mengungkap permukaan serangan baru dalam model keamanan browser dan menunjukkan bahwa pemanfaatan logis filter SVG dapat berkembang menjadi ancaman keamanan
Gambaran umum clickjacking SVG
- Clickjacking tradisional memiliki struktur serangan sederhana yang menutupi iframe untuk mendorong pengguna mengklik sesuatu tanpa sengaja
- Clickjacking SVG yang baru diperkenalkan memungkinkan interaksi kompleks dan kebocoran data dengan menggunakan filter SVG
- Filter seperti
feColorMatrixdanfeDisplacementMapdapat diterapkan pada dokumen lintas origin, sehingga konten eksternal dapat dimanipulasi secara visual
Komponen filter SVG
- Elemen filter utama mencakup <feImage>, <feFlood>, <feOffset>, <feDisplacementMap>, <feGaussianBlur>, <feTile>, <feMorphology>, <feBlend>, <feComposite>, dan <feColorMatrix>
- Elemen-elemen ini menggabungkan dan mengubah gambar masukan untuk menghasilkan gambar baru, serta dapat dihubungkan dalam bentuk rantai
- Melalui kombinasi ini, penyerang dapat dengan leluasa menerapkan efek visual, masking, dan manipulasi warna
Contoh serangan
- Captcha palsu (fake captcha): menggunakan
feDisplacementMapuntuk mendistorsi teks sehingga pengguna terdorong memasukkan kode sensitif - Menyembunyikan teks abu-abu (grey text hiding): menggunakan
feCompositedanfeMorphologyuntuk menghapus petunjuk atau pesan kesalahan di kolom input sehingga pengguna terdorong memasukkan kata sandi yang ditentukan penyerang - Pembacaan piksel (pixel reading): mendeteksi warna piksel tertentu untuk mengendalikan perilaku filter, sehingga memungkinkan serangan dinamis yang responsif seperti mendeteksi klik tombol, hover, dan status input
Operasi logika dan serangan gabungan
- Dengan menggabungkan
feBlenddanfeComposite, dimungkinkan untuk mengimplementasikan gerbang logika seperti AND, OR, XOR, dan NOT - Dengan demikian, rangkaian logika lengkap di dalam filter SVG dapat dibangun, sehingga skenario clickjacking multistep dapat diotomatisasi
- Sebagai contoh, dalam serangan terhadap aplikasi “Securify”, struktur yang menipu pengguna diimplementasikan dengan mengendalikan secara logis beberapa tahap seperti membuka dialog, mengklik checkbox, dan mengklik tombol
Kasus nyata: kerentanan Google Docs
- Popup dan kolom input yang muncul setelah mengklik tombol “Generate Document” di Google Docs dideteksi dan dimanipulasi dengan logika berbasis filter SVG
- Status fokus kolom input, teks abu-abu, dan layar pemuatan dideteksi secara real-time untuk mengendalikan alur serangan
- Serangan ini dilaporkan ke Google dan menghasilkan bug bounty sebesar $3133.70
Aplikasi QR code
- Di dalam filter SVG, logika pembuatan QR code dapat diimplementasikan sehingga data piksel dapat dienkode menjadi URL lalu ditampilkan dalam bentuk QR
- Saat pengguna memindai QR tersebut, data dikirim ke server yang dikendalikan penyerang
feDisplacementMapdan koreksi kesalahan Reed–Solomon digunakan untuk menghasilkan QR code yang dapat dipindai
Kemungkinan pemanfaatan tambahan
- Berbagai penerapan serangan lain juga dimungkinkan, seperti pembacaan teks, kebocoran data berbasis klik, dan penyisipan kursor mouse palsu
- Karena serangan dapat diimplementasikan hanya dengan CSS/SVG tanpa JavaScript, ada kemungkinan untuk melewati CSP
Signifikansi penelitian
- Clickjacking berbasis operasi logika yang menggunakan filter SVG merupakan teknik serangan baru yang belum dibahas dalam penelitian sebelumnya
- Penelitian terdahulu hanya menyebut SVG sebagai sarana penutupan visual sederhana, sedangkan penelitian ini membuktikan eksekusi logika dan kontrol interaksi
- Peneliti mengajukannya sebagai kelas kerentanan baru dan menekankan perlunya meninjau ulang sistem keamanan browser
Penutup
- Penelitian ini dinilai sebagai kasus pertama serangan keamanan yang memanfaatkan filter SVG layaknya bahasa pemrograman
- Penulis berencana mempresentasikan topik terkait pada 39c3 dan Disobey 2026 pada akhir 2025
- Artikel ini ditulis hanya dengan 42kB HTML/CSS/SVG tanpa gambar maupun JS, memperlihatkan kreativitas riset keamanan eksperimental
1 komentar
Komentar Hacker News
Jika developer mengatur header X-Frame-Options dengan benar, masalah seperti ini akan teratasi
Tetapi secara realistis, sepertinya mereka akan menanggapinya dengan cara seperti menghapus setengah dari spesifikasi SVG di browser sambil memburu masalah keamanan
Selain itu, serangan seperti ini juga dimungkinkan di situs yang memungkinkan injeksi HTML, bukan hanya frame
Saya sendiri sudah menonaktifkan SVG karena alasan keamanan
Tapi belakangan saya mulai berpikir mungkin CSS juga perlu dinonaktifkan
Andai CSS tetap hanya dipakai untuk menghias teks, tetapi sekarang sudah berubah seperti bahasa pemrograman sehingga mudah disalahgunakan oleh peretas atau pengiklan
Sekarang nyaris tidak mungkin
Saat melihat “contoh yang mendeteksi apakah piksel berwarna hitam murni lalu menyalakan atau mematikan filter”, saya benar-benar bingung
Saya tidak mengerti kenapa HTML/CSS bisa menjadi serumit ini
Ada
<checkbox>dan<label>tersembunyi, lalu saat diklik checkbox ditoggle, dan hanya dengan CSS gayanya berubah sesuai statusSVG sebenarnya tidak menggambar apa pun dan hanya mendefinisikan filter
Aneh juga bahwa ada sampai dua
<feTile>yang dipakai sehingga area tile dan area output didefinisikan terpisahLalu elemen seperti
<fake-frame>atau<art-frame>itu apa?Saat
<label>diklik, checkbox ditoggle; itu adalah perilaku bawaan HTMLStatusnya dideteksi dengan selector CSS
:has()<feTile>adalah satu elemen filter yang digunakan untuk men-tile atau memotong gambar input<fake-frame>dan<art-frame>adalah custom element yang didefinisikan sendiriSaya merangkum hal terkait di posting blog
Perpindahan fokus saat
<label>diklik mengikuti tradisi UI desktopFitur mengubah gaya berdasarkan status checkbox juga sudah ada sejak era Firefox 1
Menyematkan filter SVG langsung ke HTML juga merupakan fitur lama
Jadi ini bukan masalah HTML baru, melainkan kombinasi fitur lama
Demo ini mengingatkan saya pada peretasan Flash Player di masa lalu
Mirip dengan cara dulu pengguna ditipu agar mengizinkan system storage
Grafis vektor benar-benar terasa seperti sesuatu yang tidak bisa mengendalikan dirinya sendiri
SVG adder terasa seperti karya seni. Sangat keren
Saya merujuk ke posting Stack Overflow terkait hal ini
Di Chrome Android saya (lebih tepatnya browser Kiwi), tampilannya rusak atau terlihat aneh, mungkin karena dark mode
Saya penasaran apakah orang lain juga mengalami hal yang sama
Tulisan ini mengingatkan saya pada demo perhitungan CSS yang pernah saya lihat dulu
Ini benar-benar karya yang mengesankan. Saya tidak tahu bagaimana cara memperbaikinya, tetapi perlu ditangani secepatnya
Post yang sangat keren. Saya menikmati membacanya dari awal sampai akhir