Fuzzing Ladybird dengan alat dari Google Project Zero
- Domato adalah DOM fuzzer yang dikembangkan oleh Google Project Zero, yang menghasilkan halaman web dalam jumlah besar berisi HTML, CSS, dan JavaScript yang umumnya valid tetapi aneh.
- Halaman web yang dihasilkan berukuran sekitar 500 KiB, penuh dengan JS, CSS, dan HTML yang "menarik" untuk mengejutkan mesin browser.
- Domato dikatakan telah menemukan banyak bug di browser utama, dan alat ini diterapkan ke Ladybird untuk menemukan serta memperbaiki masalah.
Issue #1: ketika tag <th> berada di dalam <mfrac>
- Dari output yang dihasilkan Domato, ditemukan kasus memasukkan
<th> ke dalam <mfrac>.
- Pada Ladybird yang dikompilasi dengan UBSAN (Undefined Behavior SANitizer), terjadi error dereferensi pointer null.
- Elemen
<th> dan <td> diimplementasikan dengan asumsi bahwa selalu ada <table> di atasnya dalam pohon DOM, tetapi aturan ini bisa dilanggar saat node DOM dibuat secara manual menggunakan JavaScript API.
- Untuk mengatasi masalah ini, asumsi bahwa elemen
<th> dan <td> selalu memiliki <table> di dalam hierarki tidak lagi digunakan, dan diperbaiki dengan first_ancestor_of_type<HTMLTableElement>().
Issue #2: penetapan event handler window pada DOM yang terlepas
- Saat menjalankan fuzzer, masalah lain dengan cepat ditemukan.
- Dokumen yang dibuat melalui
DOMParser tidak memiliki objek window, dan ini menyebabkan masalah.
Document::window() diubah agar mengembalikan nilai nullable, dan penanganan null ditambahkan di berbagai tempat.
- Pada dokumen tanpa window, penetapan
document.body.onblur diubah agar tidak melakukan apa pun.
Issue #3: rekursi tak terbatas pada SVG <linearGradient>
- SVG dapat mendeklarasikan gradien yang mewarisi warna dengan merujuk ke gradien lain.
- Karena kasus gradien yang merujuk ke dirinya sendiri tidak dipertimbangkan, terjadilah loop tak terbatas.
- Untuk menangani siklus referensi yang terjadi dalam beberapa tahap, semua gradien yang telah dikunjungi dilacak, dan ketika gradien yang sudah pernah dikunjungi ditemukan, penelusuran rantainya dihentikan.
Issue #4: akses properti window dari iframe yang telah dihapus
- Ketika iframe dihapus dari DOM, dokumen kontennya terlepas dari browsing context.
- Ditemukan bug pada spesifikasi HTML yang mengasumsikan keberadaan browsing context saat mengakses properti objek window.
- Sebuah issue diajukan untuk spesifikasi HTML, dan di Ladybird masalah ini diperbaiki dengan menambahkan pemeriksaan null.
Issue #5: loop tak terbatas di Element.before()
- Halaman tidak dimuat dan penggunaan CPU tetap di 100%.
- Loop tak terbatas terjadi karena kesalahan pada implementasi
before().
- Perbaikannya adalah menelusuri rantai sibling melalui
previous_sibling->previous_sibling, bukan node->previous_sibling.
Kesimpulan
- Dalam satu hari, ditemukan 5 bug nyata dan semuanya telah diperbaiki.
- Alat seperti fuzzer adalah sumber daya yang luar biasa bagi siapa pun yang ingin membuat perangkat lunak lebih tangguh.
- Jika Ladybird sudah cukup stabil untuk menangani input fuzzing secara berkelanjutan, alat ini nantinya dapat dijalankan otomatis di cloud untuk menemukan lebih banyak masalah.
Pendapat GN⁺
- Artikel ini menjelaskan proses mesin browser Ladybird memperbaiki bug-bug yang ditemukan menggunakan fuzzer Domato dari Google Project Zero.
- Fuzzing adalah teknik yang sangat efektif untuk menemukan kerentanan keamanan pada perangkat lunak, dan dapat digunakan pengembang untuk membuat kode mereka lebih tangguh.
- Artikel ini mengingatkan para pengembang akan pentingnya fuzzing dan memberikan wawasan tentang bagaimana teknik ini diterapkan dalam praktik.
- Jika dilihat secara kritis, karena fuzzing menguji respons perangkat lunak terhadap input yang tak terduga, teknik ini mungkin tidak sepenuhnya mencerminkan pola penggunaan pengguna nyata.
- Alat fuzzing lain dengan fungsi serupa antara lain AFL (American Fuzzy Lop) dan LibFuzzer, dan pengembang dapat menggunakan alat-alat tersebut untuk menguji proyek mereka.
- Dengan mengadopsi teknik ini, para pengembang Ladybird dapat memperbaiki bug yang ditemukan sehingga meningkatkan stabilitas browser, yang pada akhirnya membantu meningkatkan pengalaman pengguna dan memperkuat keamanan.
1 komentar
Komentar Hacker News
Nilai spesifikasi terbukti melalui beragam implementasi
Kemungkinan bahwa kelompok kecil juga bisa membuat hal-hal menakjubkan
Takjub dengan cepatnya kemajuan proyek lewat implementasi SVG
Perlunya pendekatan mendalam terhadap pemecahan masalah dalam pengembangan perangkat lunak
Rasa penasaran apakah Ladybird akan ikut serta dalam web engine hackfest tahun ini
Pertanyaan tentang tidak adanya video YouTube terkait hacking
Reaksi lucu terhadap gabungan kata "fuzzing ladybird"
Diam-diam berharap Ladybird bisa menguasai dunia
[Komentar dihapus]