1 Punkte von GN⁺ 2024-03-17 | 1 Kommentare | Auf WhatsApp teilen

Fuzzing von Ladybird mit Tools von Google Project Zero

  • Domato ist ein von Google Project Zero entwickelter DOM-Fuzzer, der große Mengen an Web-Seiten erzeugt, die überwiegend gültiges, aber ungewöhnliches HTML, CSS und JavaScript enthalten.
  • Die erzeugten Web-Seiten sind etwa 500 KiB groß und voller „interessantem“ JS, CSS und HTML, das Browser-Engines überraschen soll.
  • Domato soll in großen Browsern viele Bugs gefunden haben; hier wurde es auf Ladybird angewendet, um Probleme zu finden und zu beheben.

Issue #1: Wenn sich ein <th>-Tag innerhalb von <mfrac> befindet

  • In der von Domato erzeugten Ausgabe wurde ein Problem gefunden, bei dem ein <th> innerhalb von <mfrac> platziert war.
  • In Ladybird, kompiliert mit UBSAN (Undefined Behavior SANitizer), trat ein Null-Pointer-Dereferenzierungsfehler auf.
  • Die Implementierung von <th>- und <td>-Elementen ging stets davon aus, dass sich im DOM-Baum oberhalb ein <table> befindet. Diese Regel kann jedoch verletzt werden, wenn DOM-Knoten manuell über die JavaScript-API erzeugt werden.
  • Zur Behebung wurde die Annahme entfernt, dass <th>- und <td>-Elemente immer zu einem <table> gehören, und stattdessen first_ancestor_of_type<HTMLTableElement>() verwendet.

Issue #2: Zuweisung eines window-Event-Handlers in einem getrennten DOM

  • Beim Ausführen des Fuzzers stieß man schnell auf ein weiteres Problem.
  • Über DOMParser erzeugte Dokumente besitzen kein window-Objekt, was zu Problemen führte.
  • Document::window() wurde so geändert, dass ein nullable Wert zurückgegeben wird, und an mehreren Stellen wurde Null-Handling ergänzt.
  • Die Zuweisung von document.body.onblur in Dokumenten ohne window wurde so geändert, dass in diesem Fall nichts geschieht.

Issue #3: Unendliche Rekursion bei SVG-<linearGradient>

  • SVG kann Gradients deklarieren, die Farben von anderen Gradients erben, indem sie auf diese verweisen.
  • Der Fall, dass ein Gradient auf sich selbst verweist, wurde nicht berücksichtigt, wodurch eine Endlosschleife entstand.
  • Um Referenzzyklen über mehrere Ebenen hinweg zu behandeln, werden nun alle besuchten Gradients verfolgt; trifft man auf einen bereits besuchten Gradient, wird das Verfolgen der Kette abgebrochen.

Issue #4: Zugriff auf window-Eigenschaften eines entfernten iframe

  • Wenn ein iframe aus dem DOM entfernt wird, wird sein Inhaltsdokument vom Browsing-Kontext getrennt.
  • Dabei wurde ein Fehler in der HTML-Spezifikation entdeckt, die beim Zugriff auf Eigenschaften des window-Objekts vom Vorhandensein eines Browsing-Kontexts ausgeht.
  • Es wurde ein Issue zur HTML-Spezifikation eingereicht, und in Ladybird wurde das Problem durch zusätzliche Null-Prüfungen behoben.

Issue #5: Endlosschleife in Element.before()

  • Die Seite lud nicht, und die CPU-Auslastung blieb bei 100 %.
  • Durch einen Fehler in der before()-Implementierung entstand eine Endlosschleife.
  • Die Kette der Geschwisterknoten wurde korrigiert, sodass statt über node->previous_sibling über previous_sibling->previous_sibling iteriert wird.

Fazit

  • An einem Tag wurden fünf echte Bugs gefunden und alle behoben.
  • Tools wie Fuzzer sind eine erstaunliche Ressource für alle, die Software robuster machen wollen.
  • Sobald Ladybird stabil genug ist, um kontinuierliche Fuzzing-Eingaben zu verarbeiten, könnte das automatisch in der Cloud ausgeführt werden, um noch mehr Probleme zu finden.

Meinung von GN⁺

  • Dieser Artikel beschreibt den Prozess, mit dem im Browser-Engine Ladybird mithilfe des Domato-Fuzzers von Google Project Zero gefundene Bugs behoben wurden.
  • Fuzzing ist eine sehr effektive Technik, um Sicherheitslücken in Software zu finden, und Entwickler können sie nutzen, um ihren Code robuster zu machen.
  • Der Artikel erinnert Entwickler an die Bedeutung von Fuzzing und bietet Einblicke, wie es in der Praxis angewendet wird.
  • Kritisch betrachtet testet Fuzzing die Reaktion von Software auf unerwartete Eingaben und bildet daher reale Nutzungsmuster tatsächlicher Anwender nicht vollständig ab.
  • Andere Fuzzing-Tools mit ähnlichen Funktionen sind etwa AFL (American Fuzzy Lop) oder LibFuzzer; Entwickler können solche Werkzeuge verwenden, um ihre eigenen Projekte zu testen.
  • Durch die Einführung dieser Technik können die Ladybird-Entwickler entdeckte Bugs beheben und die Stabilität des Browsers verbessern, was zur Verbesserung der Benutzererfahrung und zur Stärkung der Sicherheit beitragen dürfte.

1 Kommentare

 
GN⁺ 2024-03-17
Hacker-News-Kommentare
  • Der Wert einer Spezifikation wird durch verschiedene Implementierungen belegt

    Dieser Artikel zeigt, warum verschiedene Implementierungen einer Spezifikation wichtig sind. Es wurde bereits ein Problem gefunden, und es werden wohl noch weitere auftauchen.

  • Die Möglichkeit, dass auch kleine Gruppen Erstaunliches schaffen können

    Hier wird die Begeisterung darüber ausgedrückt, dass kleine Gruppen erstaunliche Projekte vorantreiben können. In Unternehmen mit Stakeholdern ist so etwas schwer umzusetzen.

  • Überraschung über den schnellen Fortschritt des Projekts durch die SVG-Implementierung

    Es wird ausgedrückt, dass das Projekt schneller voranschreitet als erwartet, und dass die Nachricht über die abgeschlossene SVG-Implementierung fasziniert.

  • Die Notwendigkeit eines tiefgehenden Ansatzes zur Problemlösung in der Softwareentwicklung

    Es wird argumentiert, dass Entwickler nicht nur Probleme finden und beheben sollten, sondern auch die eigentliche Ursache verstehen und im gesamten Codebestand nach ähnlichen Fehlern suchen müssen. Die Instabilität und Bug-Probleme moderner Software seien zwar den Zwängen des Kapitalismus geschuldet, dennoch wird betont, dass bessere Softwareentwicklung möglich ist.

  • Neugier, ob Ladybird am diesjährigen Web Engine Hackfest teilnehmen wird

    Es wird Interesse daran ausgedrückt, ob Ladybird dieses Jahr am Web Engine Hackfest teilnehmen wird.

  • Frage nach dem Fehlen von YouTube-Videos zum Thema Hacking

    Es wird Bedauern darüber ausgedrückt, dass Hacking-bezogene YouTube-Videos nicht mehr aktualisiert werden.

  • Eine amüsierte Reaktion auf die Wortkombination "fuzzing ladybird"

    Es wird die Meinung geäußert, dass die Wortkombination "fuzzing ladybird" lustig und wild klingt.

  • Die heimliche Hoffnung, dass Ladybird die Welt erobern könnte

    Es wird heimlich gehofft, dass Ladybird eines Tages die Welt erobern könnte, verbunden mit der Bitte, es niemandem zu verraten.

  • [Gelöschter Kommentar]

    Hinweis darauf, dass ein bestimmter Kommentar gelöscht wurde.