Google Project Zero araçlarıyla Ladybird fuzzing’i
- Domato, Google Project Zero tarafından geliştirilen bir DOM fuzzer’ı ve büyük miktarda, çoğunlukla geçerli ama tuhaf HTML, CSS ve JavaScript içeren web sayfaları üretiyor.
- Üretilen web sayfaları yaklaşık 500 KiB boyutunda ve tarayıcı motorunu şaşırtacak kadar “ilginç” JS, CSS ve HTML ile dolu.
- Domato’nun büyük tarayıcılarda birçok hata bulduğu belirtiliyor; bu araç Ladybird’e uygulanarak sorunlar bulunup düzeltildi.
Sorun #1: <th> etiketi <mfrac> içindeyken
- Domato’nun ürettiği çıktıda
<mfrac> içine <th> yerleştiren bir durum bulundu.
- UBSAN (Undefined Behavior SANitizer) ile derlenen Ladybird’de null pointer dereference hatası oluştu.
<th> ve <td> öğeleri, DOM ağacında üst tarafta her zaman bir <table> bulunduğu varsayımıyla uygulanmıştı; ancak DOM düğümleri JavaScript API’siyle elle oluşturulduğunda bu kurallar ihlal edilebiliyor.
- Sorunu çözmek için,
<th> ve <td> öğelerinin her zaman bir <table> içerdiği varsayılmadı ve first_ancestor_of_type<HTMLTableElement>() kullanılarak düzeltme yapıldı.
Sorun #2: Ayrılmış DOM’da window olay işleyicisi ataması
- Fuzzer çalıştırılırken kısa sürede başka bir sorunla da karşılaşıldı.
DOMParser üzerinden oluşturulan belgelerde window nesnesi bulunmuyor ve bu da soruna yol açıyordu.
Document::window() nullable bir değer döndürecek şekilde değiştirildi ve birçok yerde null kontrolü eklendi.
- Window’suz belgelerde
document.body.onblur atandığında hiçbir şey yapmaması sağlandı.
Sorun #3: SVG <linearGradient> içinde sonsuz özyineleme
- SVG, başka gradyanları referans alarak renkleri miras alan gradyanlar tanımlayabiliyor.
- Bir gradyanın kendisini referans aldığı durum hesaba katılmadığı için sonsuz döngü oluşuyordu.
- Referans döngülerinin birden fazla adım üzerinden oluştuğu durumları ele almak için ziyaret edilen tüm gradyanlar izlenmeye başlandı; daha önce ziyaret edilmiş bir gradyan görüldüğünde zinciri takip etme durduruldu.
Sorun #4: Kaldırılmış iframe’in window özelliklerine erişim
- iframe DOM’dan kaldırıldığında ilgili içerik belgesi browsing context’ten ayrılıyor.
- Window nesnesinin özelliklerine erişirken browsing context’in varlığını varsayan HTML spesifikasyonundaki bir hata keşfedildi.
- HTML spesifikasyonu için bir issue açıldı ve Ladybird tarafında null kontrolü eklenerek sorun çözüldü.
Sorun #5: Element.before() içinde sonsuz döngü
- Sayfa yüklenmiyor ve CPU kullanımı %100’de kalıyordu.
before() uygulamasındaki bir hata nedeniyle sonsuz döngü oluşuyordu.
- Kardeş zinciri,
node->previous_sibling yerine previous_sibling->previous_sibling üzerinden takip edilecek şekilde düzeltildi.
Sonuç
- Bir gün içinde 5 gerçek hata bulundu ve hepsi düzeltildi.
- Fuzzer gibi araçlar, yazılımlarını daha sağlam hale getirmek isteyenler için olağanüstü bir kaynak.
- Ladybird, sürekli fuzzing girdilerini işleyebilecek kadar kararlı hale geldiğinde, bulutta otomatik çalıştırılarak daha fazla sorun bulunabilecek.
GN⁺ görüşü
- Bu yazı, Ladybird tarayıcı motorunda Google Project Zero’nun Domato fuzzer’ı kullanılarak bulunan hataların nasıl düzeltildiğini anlatıyor.
- Fuzzing, yazılımdaki güvenlik açıklarını bulmada çok etkili bir teknik ve geliştiriciler bunu kendi kodlarını daha sağlam hale getirmek için kullanabiliyor.
- Yazı, geliştiricilere fuzzing’in önemini hatırlatıyor ve bunun pratikte nasıl uygulandığına dair içgörü sunuyor.
- Eleştirel açıdan bakıldığında fuzzing, yazılımın beklenmedik girdilere verdiği tepkiyi test ettiği için gerçek kullanıcı kullanım kalıplarını tamamen yansıtmayabilir.
- Benzer işlev sunan diğer fuzzing araçları arasında AFL (American Fuzzy Lop) ve LibFuzzer bulunuyor; geliştiriciler bu araçlarla kendi projelerini test edebilir.
- Ladybird geliştiricileri bu tekniği benimseyerek bulunan hataları düzeltebilir, böylece tarayıcının kararlılığını artırabilir; bu da kullanıcı deneyimini iyileştirmeye ve güvenliği güçlendirmeye yardımcı olur.
1 yorum
Hacker News görüşleri
Farklı uygulamalar sayesinde spesifikasyonun değeri kanıtlanıyor
Küçük bir grubun da şaşırtıcı şeyler yapabilme ihtimali
SVG uygulamasıyla projenin hızlı ilerleyişine duyulan şaşkınlık
Yazılım geliştirmede sorun çözümüne derinlemesine yaklaşma gerekliliği
Ladybird'ün web motoru hackerfest'ine katılıp katılmayacağına dair merak
Hackingle ilgili YouTube videolarının yokluğuna dair soru işareti
"fuzzing ladybird" kelime kombinasyonuna verilen eğlenceli tepki
Ladybird'ün dünyayı ele geçirmesini gizlice ummak
[silinmiş yorum]