1 poin oleh GN⁺ 2024-03-17 | 1 komentar | Bagikan ke WhatsApp

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

 
GN⁺ 2024-03-17
Komentar Hacker News
  • Nilai spesifikasi terbukti melalui beragam implementasi

    Tulisan ini menunjukkan mengapa beragam implementasi terhadap sebuah spesifikasi itu penting. Satu masalah sudah ditemukan, dan kemungkinan masih ada lagi.

  • Kemungkinan bahwa kelompok kecil juga bisa membuat hal-hal menakjubkan

    Mengungkapkan antusiasme terhadap kelompok kecil yang mengerjakan proyek-proyek luar biasa. Hal seperti ini sulit dilakukan di perusahaan yang memiliki banyak pemangku kepentingan.

  • Takjub dengan cepatnya kemajuan proyek lewat implementasi SVG

    Mengungkapkan kekaguman bahwa proyek ini berkembang lebih cepat dari perkiraan, dan terpesona oleh kabar bahwa implementasi SVG telah selesai.

  • Perlunya pendekatan mendalam terhadap pemecahan masalah dalam pengembangan perangkat lunak

    Berpendapat bahwa pengembang tidak boleh berhenti hanya pada menemukan dan memperbaiki masalah, tetapi juga harus memahami akar penyebabnya dan mencari kesalahan serupa di seluruh codebase. Ditekankan bahwa ketidakstabilan dan bug pada perangkat lunak modern memang dipengaruhi keterbatasan kapitalisme, tetapi pengembangan perangkat lunak yang lebih baik tetap memungkinkan.

  • Rasa penasaran apakah Ladybird akan ikut serta dalam web engine hackfest tahun ini

    Mengungkapkan ketertarikan apakah Ladybird akan berpartisipasi dalam web engine hackfest tahun ini.

  • Pertanyaan tentang tidak adanya video YouTube terkait hacking

    Mengungkapkan rasa sayang karena video YouTube terkait hacking tidak lagi diperbarui.

  • Reaksi lucu terhadap gabungan kata "fuzzing ladybird"

    Menyampaikan pendapat bahwa gabungan kata "fuzzing ladybird" terdengar lucu dan brutal.

  • Diam-diam berharap Ladybird bisa menguasai dunia

    Secara diam-diam berharap bahwa suatu hari Ladybird bisa menguasai dunia, sambil berpesan agar jangan memberi tahu siapa pun.

  • [Komentar dihapus]

    Memberi tahu bahwa komentar tertentu telah dihapus.