- Ditemukan kerentanan phishing di WhatsApp yang menampilkan tautan dan pratinjau seolah-olah menuju situs normal, padahal klik sebenarnya diarahkan ke situs penyerang
- Penyebabnya adalah tautan di isi pesan dan data pratinjau dikirim secara terpisah, serta dengan menghapus
matchedTextdapat dibuat ketidaksesuaian pratinjau - Karakter
U+202ERight-To-Left Override dapat membalik arah tampilan URL sehingga domain sebenarnya terlihat seperti domain normal - Penyerang dapat menyiapkan domain mirror dari target penyamaran, lalu mempertahankan pratinjau situs asli dan hanya mengubah nilai
textuntuk menipu korban - Meta mengatakan logika normalisasi URL dapat disesuaikan secara dinamis, dan pengguna sebaiknya menyalin tautan terlebih dahulu untuk memeriksa alamat sebenarnya sebelum mengeklik
Titik pemisahan antara pratinjau tautan dan tautan sebenarnya di WhatsApp
- Peneliti mengirim tautan
webhook.sitekepada temannya untuk memeriksa apakah saat penerima WhatsApp merender pratinjau tautan, permintaan HTTP juga terjadi - Permintaan HTTP hanya terjadi satu kali di sisi pengirim, sehingga dipastikan bahwa penerima tidak merender tautan secara terpisah
- Karena perilaku ini, peneliti menilai bahwa tautan dan informasi pratinjau dikirim bersama di dalam pesan WhatsApp, lalu menguji apakah keduanya bisa dibuat berbeda
Issue #1: Ketidaksesuaian pratinjau tautan
- Peneliti sempat mencoba memodifikasi langsung pesan WhatsApp Web melalui proksi, tetapi karena E2EE WhatsApp, manipulasi sederhana dengan alat seperti Burp Suite tidak mudah dilakukan
- Sebagai gantinya, ia memasang breakpoint pada JavaScript tepat sebelum pesan dienkripsi dan dikirim melalui WebSocket untuk memeriksa objek pesan
- Di dalam objek pesan, isi tautan dan informasi pratinjau ada sebagai properti terpisah
text: isi pesancanonicalURL: domain yang ditampilkan di bagian bawah pratinjaumatchedText: tampaknya nilai yang dibandingkan dengancanonicalURL, dan diuji apakah nilai tersebut juga muncul di dalamtext
- Jika pada objek pesan untuk
instagram.comnilaitextdiubah menjadigoogle.com, pratinjau akan hilang dan hanya tautan Google yang tersisa - Jika properti
matchedTextdihapus, dapat dibuat pesan tidak cocok antara tautan sebenarnya dan pratinjau
Issue #2: Kamuflase tampilan tautan dengan U+202E
- Agar isi tautan sebenarnya tidak terlihat jelas, peneliti melakukan fuzzing untuk melihat apakah karakter Unicode dapat mengubah tampilan teks
U+202Eadalah karakter Right-To-Left Override yang membuat teks ditampilkan terbalik kepada pengguna- Jika hanya menggunakan
U+202E, bentuk tautannya terlihat janggal dan kemungkinan diklik menjadi rendah, sehingga perlu menyusun string terbalik yang tampak seperti URL normal
Cara menyusun URL mirror
- Tujuannya adalah membuat URL yang saat dibalik akan terlihat seperti
https://instagram.com - String yang dibalik secara sederhana menjadi
moc.margatsni//:sttph, tetapi TLD seperti.margatsnitidak bisa didaftarkan - Solusinya adalah menggunakan TLD yang benar-benar dapat didaftarkan agar terlihat seperti subdomain
- Sebagai contoh, dengan memakai TLD Belanda
.nl, dapat dibuat string yang terlihat sepertiln.instagram.com
- Sebagai contoh, dengan memakai TLD Belanda
- Karena URL harus tampak diawali
https://, peneliti menambahkan//:sptthdi belakang sebagai path yang valid - Hasilnya,
https://moc.margatsni.nl//:sptthbila digabungkan denganU+202Edapat terlihat sepertihttps://ln.instagram.com//:sptth - Peneliti menamai metode ini 2K2E
Alur serangan
- Penyerang membeli domain mirror dari situs yang ingin ditiru
- Contoh: agar terlihat seperti
ln.instagram.com, penyerang membelimoc.margatsni.nl
- Contoh: agar terlihat seperti
- Mula-mula dibuat pesan yang berisi tautan domain asli untuk memperoleh pratinjau situs tersebut
- Pada contoh objek,
text,matchedText, dancanonicalUrlsemuanya berisihttps://instagram.com/ - Nilai terkait pratinjau seperti
description,title,jpegThumbnail,thumbnailDirectPathjuga ikut ada
- Pada contoh objek,
- Setelah itu
matchedTextdihapus dan nilaitextdiubah menjadi bentuk\u202ehttps://moc.margatsni.nl//:sptth - Pesan akhirnya menampilkan pratinjau Instagram, tetapi saat diklik dapat membawa korban ke domain yang disiapkan penyerang
Respons Meta dan perbandingan dengan platform lain
- Meta menjawab bahwa karena harus mendukung banyak platform dan lingkungan, cara normalisasi URL per platform bisa berbeda dari logika sisi server
- Meta juga menyebut memiliki sistem yang dapat menyesuaikan logika normalisasi URL secara dinamis bila benar-benar terjadi spam dan penyalahgunaan
- Peneliti menilai Meta tampak tidak berupaya aktif menyelesaikan isu keamanan ini, dan hanya akan merespons ketika sistem mendeteksinya sebagai spam
- X, TikTok, dan Pinterest melakukan sanitasi terhadap karakter
U+202E, sehingga berbeda dari WhatsApp
Mitigasi yang bisa dilakukan pengguna
- Tautan WhatsApp sulit dipercaya hanya berdasarkan tampilan yang terlihat
- Untuk menghindari phishing 2K2E, pengguna perlu menyalin tautan sebelum mengekliknya lalu memeriksa alamat sebenarnya di pratinjau clipboard
- Pratinjau clipboard dapat menampilkan alamat tautan dalam keadaan karakter
U+202Esudah disanitasi - Peneliti kemudian juga menemukan layanan lain yang rentan terhadap 2K2E karena tidak memiliki sanitasi yang memadai
1 komentar
Komentar di Hacker News
Ini kombinasi penyalahgunaan fitur yang cukup cerdik, tetapi menurut saya dampak keamanannya secara keseluruhan rendah
Dalam skenario terbaik sekalipun, ini hanya membuat penerima membuka tautan di browser, jadi kecuali penyerangnya polisi atau badan intelijen, biasanya masih perlu serangan lanjutan seperti mengeksploitasi perangkat lunak yang belum ditambal di perangkat
Secara teknis, ini kurang tepat disebut clickjacking. Clickjacking biasanya merujuk pada teknik yang sangat spesifik: menumpuk frame HTML tak terlihat di atas konten lain
https://owasp.org/www-community/attacks/Clickjacking
https://portswigger.net/web-security/clickjacking
Semua orang hanya fokus pada karakter kanan-ke-kiri UTF, tetapi Meta setidaknya seharusnya mengakui masalah bahwa URL pratinjau bisa berbeda dari URL pesan
Saya paham ini perilaku untuk memperluas URL pendek, tetapi pasti ada solusi cerdas yang bisa diterapkan Meta dan WhatsApp
Clickjacking adalah ketika Anda mengira mengklik suatu elemen, tetapi sebenarnya elemen lain—biasanya transparan dan ditumpuk di atasnya—mencegat event klik
Dengan memberi fokus pada layer bawah yang terlihat lalu mendeteksi event
onblur, penyerang bisa mengetahui klik meski pengguna tidak menerima event tersebutTemuan OP memang keren, tetapi ini bukan clickjacking. Dulu saya juga pernah menggunakan karakter RTL untuk membuat file screensaver, yaitu executable biasa di Windows yang hanya berbeda ekstensi, tampak seperti dokumen Word. Sepertinya untuk mengerjai teman atau guru, tetapi saya tidak ingat persis alasannya
OP melangkah lebih jauh dengan menemukan cara agar tampilannya berubah di sistem lain. Ini bukan membuat pengguna keliru tentang elemen apa yang diklik, melainkan keliru tentang ke mana tautan akan menuju, jadi bukan clickjacking; halaman Wikipedia yang ditautkan di awal tulisan juga mengonfirmasi demikian
Saya belum pernah benar-benar melihat clickjacking dieksploitasi, tetapi metode yang ditemukan OP ini terasa bisa disalahgunakan
Sejujurnya, saya sudah lama menyerah pada harapan bahwa pengguna bisa membedakan domain akhir saat mengklik tautan. Mayoritas tidak memahami konsepnya sama sekali, dan sisanya pun sulit membedakannya
Bahkan orang yang merasa bisa membedakannya akan frustrasi jika semua tautan mengarah ke tempat seperti
sendgrid.tld/j3ovi3bfogobbledypoop93jnri2o. Setiap hari kita melatih orang untuk mengklik tautan mencurigakan yang diobfuskasi untuk pelacakan, dan tidak ada yang peduliPeretasan yang keren. Masalah sebenarnya bukan WhatsApp atau karakter Unicode arah terbalik, melainkan URL itu sulit
Contoh sederhana seperti
visa.securesite.comsaja sudah menipu banyak orang. Saya tidak melihat solusi bagus dalam waktu dekatKebingungan umum seputar hostname dan domain adalah masalah yang lebih sulit, tetapi browser telah mencoba menguranginya sampai batas tertentu dengan menyorot bagian nama domain. Seperti kebanyakan teknik phishing, pada akhirnya passkey sepertinya akan mengakhirinya
RTL telah menjadi sumber kerentanan keamanan besar selama keberadaannya. Saya tidak mengerti mengapa sistem operasi tidak punya pengaturan untuk menonaktifkan semua RTL, supaya orang yang tidak mengenal bahasa-bahasa itu tidak terpapar risiko tanpa manfaat apa pun
TextViewSecara default, semua bypass teks dua arah harus dinonaktifkan kecuali developer secara eksplisit meninjau dan mengizinkan rentang teks tertentu
Tidak masuk akal membuat seluruh stack rendering teks rentan secara default atas nama mengakomodasi kurang dari 1% populasi dunia
Mengecewakan bahwa Meta tidak memperbaiki masalah ini dan juga memutuskan tidak membayar bug bounty kepada peneliti ini
Saya tidak akan menjelaskan detailnya di sini, tetapi karena cara Google Search kadang menulis ulang URL, penyerang bisa memalsukan URL sebenarnya
Sebaiknya jangan pernah memercayai URL yang ditampilkan di situs web dan aplikasi
Bagian “tepat seperti yang diduga, tautan dan pratinjau dikirim terpisah!” adalah masalah desain UI yang lebih besar. Mengapa pengguna biasa harus membandingkan tautan dan pratinjau demi keamanan?
Secara keseluruhan, menurut saya nomor 1 adalah yang terbaik. Pengirim toh bisa “memalsukan” semua pesannya sendiri, dan memasukkan pratinjau sebagai bagian dari pesan tidak jauh berbeda
Masalahnya di sini adalah tidak jelas bahwa konten ini berasal dari pengirim. Karena ditampilkan seperti gelembung pesan terpisah, 99% pengguna kemungkinan tidak akan tahu bahwa konten itu disediakan oleh pengirim
Lagi pula URL adalah inti masalahnya. Jika pengguna mengklik URL yang dikendalikan penyerang, penyerang bisa menampilkan apa pun yang diinginkan di pratinjau. Jadi manfaat memaksa pratinjau menjadi “asli” sangat kecil
Opsi 3 juga bisa cukup baik. Terutama jika diimplementasikan dengan semacam double-blind: menghubungi satu pihak, lalu pihak itu meneruskan ke pihak kedua. Dengan begitu pihak pertama melihat IP dan pihak kedua melihat tujuan, tetapi selama tidak berkolusi, tidak ada yang melihat keduanya sekaligus
Namun manfaatnya relatif kecil untuk membangun dan memelihara infrastruktur sebesar itu
Saya suka bahwa di bagian paling bawah tulisan ini diklasifikasikan sebagai reverse engineering
Ini bukan clickjacking. Clickjacking adalah ketika penyerang mencegat klik sehingga pengguna benar-benar mengklik target lain yang tidak mereka maksudkan atau sadari
Codepoint RTL yang membuat teks mengalir dari kanan ke kiri adalah fitur internasionalisasi, dan menggunakannya untuk membingungkan orang bukanlah kerentanan baru