Unicode sangat kompleks. Hanya sedikit orang yang tahu
semua trik : dari karakter yang tidak terlihat dan karakter kontrol hingga pasangan pengganti dan emoji gabungan (saat menambahkan dua karakter menghasilkan yang ketiga). Standar ini mencakup 2
16 posisi kode di 17
pesawat . Bahkan, belajar Unicode dapat dibandingkan dengan belajar bahasa pemrograman terpisah.
Tidak mengherankan, pengembang web mengabaikan beberapa nuansa. Di sisi lain, penyerang dapat menggunakan fitur Unicode untuk tujuan mereka sendiri, yang mereka lakukan.
Spesialis Keamanan John Gracie
menunjukkan contoh bug verifikasi email
GitHub untuk memulihkan kata sandi yang terlupakan. Bug serupa dapat ditemukan di situs lain.
John Gracie menjelaskan apa "tanda tabrakan terjemahan" ketika dua karakter yang berbeda setelah konversi diterjemahkan ke dalam karakter yang sama.
Dalam hal ini, ia menggunakan karakter Turki 'ı' ('i' tanpa titik), yang diterjemahkan ke dalam bahasa Latin 'i', sehingga alamat email
John@Gıthub.com
setelah diproses berubah menjadi
John@Github.com
:
'ß'.toLowerCase()
Tabrakan tersebut dapat ditemukan di semua pesawat Unicode: di sini adalah
daftar lengkap .
Kami terutama tertarik pada karakter-karakter yang diterjemahkan ke dalam karakter Latin. Hanya ada sebelas opsi. Di tempat ketiga dalam tabel hanyalah tanda Turki 'i' tanpa titik.
GitHub mengizinkan penyerang untuk mendapatkan kata sandi dari akun orang lain, karena prosedur untuk memulihkan kata sandi yang dilupakan tidak berfungsi dengan benar.
Sebagai bagian dari prosedur ini, alamat email yang dimasukkan dibandingkan dengan alamat yang disimpan dalam database. Algoritma Verifikasi:
- Alamat yang dimasukkan adalah huruf kecil menggunakan metode toLowerCase.
- Alamat yang dimasukkan dibandingkan dengan alamat dalam basis data pengguna terdaftar.
- Jika kecocokan ditemukan, kata sandi dari basis data dikirim ke alamat yang dimasukkan .
Jelas, para pengembang tidak menyadari tabrakan terjemahan alamat ketika menggunakan metode
toLowerCase
.
Dalam hal ini, memperbaiki kesalahan itu sederhana. Cukup dengan mengirim kata sandi bukan ke alamat yang dimasukkan, tetapi ke alamat dari basis data.
Tentu saja, ini bukan perbaikan bug lengkap, tetapi hanya perbaikan cepat. Solusi yang lebih lengkap adalah menyiarkan ke Punycode untuk verifikasi:
John@Gıthub.com
→
xn—john@gthub-2ub.com
. Punycode dirancang untuk secara unik mengonversi nama domain menjadi urutan karakter ASCII. Alamat email dapat diverifikasi dengan cara yang sama, tetapi sebagian besar aplikasi web tidak.
John Gracie menerima hadiah uang tunai dan
2.500 poin untuk kerentanan, meskipun ia masih jauh dari peretas utama Github,
Alexander Dobkin termasuk untuk mengeksekusi kode arbitrer pada server GitHub yang menghasilkan Halaman GitHub.
Messenger lumpuh saat menerima emoji titik hitam (Messenger di iOS, WhatsApp untuk Android)Bug yang terkait dengan Unicode memiliki properti sehingga dapat ditemukan di aplikasi apa pun yang memproses teks yang dimasukkan oleh pengguna. Kerentanan ada dalam aplikasi web dan program asli untuk Android dan iOS. Salah satu yang paling terkenal adalah
bug iOS dari 2015 , ketika beberapa karakter Unicode dalam pesan teks menyebabkan sistem operasi crash. Tahun lalu, bug Unicode yang serupa ditemukan di iOS 11.3, dikenal sebagai
"titik hitam" . Kecelakaan serupa terjadi di aplikasi WhatsApp untuk Android ketika Anda menyentuh emoji.

