1 points par GN⁺ 2024-03-17 | 1 commentaires | Partager sur WhatsApp

Fuzzing de Ladybird avec les outils de Google Project Zero

  • Domato est un fuzzer DOM développé par Google Project Zero, qui génère en grande quantité des pages web contenant du HTML, du CSS et du JavaScript principalement valides, mais étranges.
  • Les pages web générées font environ 500 KiB et sont remplies de JS, CSS et HTML « intéressants » susceptibles de surprendre le moteur du navigateur.
  • Domato aurait découvert de nombreux bugs dans les principaux navigateurs ; il a été appliqué à Ladybird pour identifier et corriger des problèmes.

Issue #1 : quand une balise <th> se trouve à l’intérieur de <mfrac>

  • Dans la sortie générée par Domato, un problème a été repéré où <th> se retrouvait à l’intérieur de <mfrac>.
  • Une erreur de déréférencement de pointeur nul s’est produite dans Ladybird compilé avec UBSAN (Undefined Behavior SANitizer).
  • Les éléments <th> et <td> avaient été implémentés en supposant toujours qu’un <table> se trouvait plus haut dans l’arbre DOM, mais cette règle peut être violée lorsque des nœuds DOM sont créés manuellement via les API JavaScript.
  • Pour corriger le problème, l’implémentation a été modifiée afin de ne plus supposer que <th> et <td> appartiennent toujours à un <table>, en utilisant first_ancestor_of_type<HTMLTableElement>().

Issue #2 : affectation d’un gestionnaire d’événement window dans un DOM détaché

  • En exécutant le fuzzer, un autre problème est rapidement apparu.
  • Les documents créés via DOMParser n’ont pas d’objet window, ce qui provoquait un dysfonctionnement.
  • Document::window() a été modifié pour renvoyer une valeur nullable, et plusieurs endroits ont été adaptés pour gérer le cas null.
  • L’affectation de document.body.onblur dans un document sans window a été modifiée pour ne rien faire.

Issue #3 : récursion infinie dans SVG <linearGradient>

  • SVG permet de déclarer des dégradés qui héritent leurs couleurs d’autres dégradés.
  • Le cas où un dégradé se référence lui-même n’avait pas été pris en compte, ce qui entraînait une boucle infinie.
  • Pour gérer les cycles de référence sur plusieurs niveaux, tous les dégradés déjà visités sont désormais suivis, et la chaîne cesse d’être parcourue lorsqu’un dégradé déjà vu est rencontré.

Issue #4 : accès aux propriétés de window d’un iframe supprimé

  • Lorsqu’un iframe est retiré du DOM, son document de contenu est détaché du contexte de navigation.
  • Un bug dans la spécification HTML a été identifié : elle suppose l’existence d’un contexte de navigation lors de l’accès aux propriétés de l’objet window.
  • Un ticket a été ouvert sur la spécification HTML et, côté Ladybird, le problème a été corrigé en ajoutant une vérification de null.

Issue #5 : boucle infinie dans Element.before()

  • La page ne se chargeait pas et l’utilisation CPU restait à 100 %.
  • Une erreur dans l’implémentation de before() provoquait une boucle infinie.
  • La correction a consisté à suivre la chaîne des siblings via previous_sibling->previous_sibling au lieu de node->previous_sibling.

Conclusion

  • Cinq vrais bugs ont été trouvés et tous corrigés en une journée.
  • Les outils comme les fuzzers sont des ressources remarquables pour celles et ceux qui veulent rendre leurs logiciels plus robustes.
  • Une fois Ladybird suffisamment stabilisé pour supporter des entrées de fuzzing en continu, il sera possible de l’exécuter automatiquement dans le cloud afin de découvrir davantage de problèmes.

Avis de GN⁺

  • Cet article explique comment le moteur de navigateur Ladybird a corrigé des bugs découverts à l’aide du fuzzer Domato de Google Project Zero.
  • Le fuzzing est une technique très efficace pour découvrir des vulnérabilités de sécurité dans les logiciels, et les développeurs peuvent l’utiliser pour rendre leur code plus robuste.
  • L’article rappelle aux développeurs l’importance du fuzzing et fournit un aperçu de sa mise en pratique.
  • D’un point de vue critique, le fuzzing teste la réaction d’un logiciel à des entrées inattendues ; il ne reflète donc pas toujours complètement les usages réels des utilisateurs.
  • Parmi les autres outils de fuzzing offrant des fonctionnalités similaires, on peut citer AFL (American Fuzzy Lop) et LibFuzzer, que les développeurs peuvent utiliser pour tester leurs projets.
  • En adoptant cette technique, les développeurs de Ladybird peuvent corriger les bugs découverts et améliorer la stabilité du navigateur, ce qui contribuera à une meilleure expérience utilisateur et à un renforcement de la sécurité.

1 commentaires

 
GN⁺ 2024-03-17
Avis Hacker News
  • La valeur d’une spécification est démontrée par la diversité des implémentations

    Cet article montre pourquoi il est important d’avoir plusieurs implémentations d’une spécification. Un problème a déjà été découvert, et il est probable qu’il y en ait d’autres.

  • Même un petit groupe peut créer des choses étonnantes

    Exprime son enthousiasme à l’idée qu’un petit groupe puisse mener un projet remarquable. C’est difficile à réaliser dans une entreprise avec des parties prenantes.

  • Étonnement face à la rapidité d’avancement du projet avec l’implémentation de SVG

    Exprime sa fascination devant le fait que le projet avance plus vite que prévu et que l’implémentation de SVG soit déjà terminée.

  • Nécessité d’une approche approfondie de la résolution de problèmes en développement logiciel

    Soutient que les développeurs ne doivent pas se contenter de trouver et corriger un problème, mais doivent aussi en comprendre la cause profonde et rechercher des erreurs similaires dans l’ensemble de la base de code. Il souligne que l’instabilité et les bugs des logiciels modernes sont dus aux contraintes du capitalisme, mais qu’un meilleur développement logiciel reste possible.

  • Curiosité quant à la participation du moteur web de Ladybird au Web Engine Hackfest

    Exprime son intérêt pour savoir si Ladybird participera cette année au Web Engine Hackfest.

  • Interrogation sur l’absence de nouvelles vidéos YouTube liées au hacking

    Exprime sa déception face au fait que les vidéos YouTube liées au hacking ne soient plus mises à jour.

  • Réaction amusée à l’expression « fuzzing ladybird »

    Donne son avis selon lequel l’expression « fuzzing ladybird » sonne de manière drôle et sauvage.

  • Espère secrètement que Ladybird pourra conquérir le monde

    Espère en secret que Ladybird pourra un jour conquérir le monde, et demande de n’en parler à personne.

  • [Commentaire supprimé]

    Indique qu’un commentaire précis a été supprimé.