1 puntos por GN⁺ 2024-03-17 | 1 comentarios | Compartir por WhatsApp

Fuzzing de Ladybird con herramientas de Google Project Zero

  • Domato es un fuzzer de DOM desarrollado por Google Project Zero que genera grandes cantidades de páginas web con HTML, CSS y JavaScript mayormente válidos, pero extraños.
  • Las páginas web generadas tienen un tamaño de alrededor de 500 KiB y están llenas de JS, CSS y HTML "interesantes" que pueden sorprender al motor del navegador.
  • Se dice que Domato ha encontrado muchos errores en los principales navegadores, y aquí se aplicó a Ladybird para encontrar y corregir problemas.

Problema #1: cuando una etiqueta <th> está dentro de <mfrac>

  • En una salida generada por Domato se encontró el caso de poner un <th> dentro de <mfrac>.
  • En Ladybird compilado con UBSAN (Undefined Behavior SANitizer) se produjo un error de desreferencia de puntero nulo.
  • Los elementos <th> y <td> se implementaron asumiendo siempre que había un <table> más arriba en el árbol DOM, pero estas reglas pueden romperse cuando los nodos DOM se crean manualmente mediante la API de JavaScript.
  • Para resolver el problema, se dejó de asumir que los elementos <th> y <td> siempre contienen un <table> y se corrigió usando first_ancestor_of_type<HTMLTableElement>().

Problema #2: asignación de manejadores de eventos de window en un DOM separado

  • Al ejecutar el fuzzer, rápidamente apareció otro problema.
  • Los documentos creados mediante DOMParser no tienen un objeto window, y eso causaba el problema.
  • Se modificó Document::window() para que devolviera un valor nullable, y se agregó manejo de null en varios lugares.
  • También se corrigió para que no haga nada al asignar document.body.onblur en documentos sin window.

Problema #3: recursión infinita en SVG <linearGradient>

  • SVG puede declarar gradientes que heredan colores haciendo referencia a otros gradientes.
  • Como no se consideró el caso en que un gradiente se referencie a sí mismo, se producía un bucle infinito.
  • Para manejar ciclos de referencia que abarcan varios pasos, se rastrean todos los gradientes visitados y se deja de seguir la cadena al encontrar uno ya visitado.

Problema #4: acceso a propiedades de window de un iframe eliminado

  • Cuando un iframe se elimina del DOM, su documento de contenido se desacopla del contexto de navegación.
  • Se encontró un error en la especificación HTML, que asume la existencia del contexto de navegación al acceder a propiedades del objeto window.
  • Se abrió un issue sobre la especificación HTML y, en Ladybird, el problema se resolvió agregando una verificación de null.

Problema #5: bucle infinito en Element.before()

  • La página no cargaba y el uso de CPU se mantenía al 100%.
  • Un error en la implementación de before() provocaba un bucle infinito.
  • Se corrigió para recorrer la cadena de hermanos mediante previous_sibling->previous_sibling en lugar de node->previous_sibling.

Conclusión

  • En un solo día se encontraron 5 errores reales y todos fueron corregidos.
  • Herramientas como los fuzzers son un recurso increíble para quienes quieren hacer que el software sea más robusto.
  • Cuando Ladybird se estabilice lo suficiente como para soportar entradas continuas de fuzzing, podrá ejecutarse automáticamente en la nube para encontrar aún más problemas.

Opinión de GN⁺

  • Este artículo explica el proceso mediante el cual el motor de navegador Ladybird corrigió errores descubiertos usando el fuzzer Domato de Google Project Zero.
  • El fuzzing es una técnica muy efectiva para encontrar vulnerabilidades de seguridad en el software, y los desarrolladores pueden usarla para hacer su código más robusto.
  • El artículo recuerda a los desarrolladores la importancia del fuzzing y ofrece una visión de cómo se aplica en la práctica.
  • Viéndolo de forma crítica, el fuzzing prueba cómo reacciona el software ante entradas inesperadas, por lo que puede no reflejar por completo los patrones de uso de los usuarios reales.
  • Otras herramientas de fuzzing con funciones similares incluyen AFL (American Fuzzy Lop) y LibFuzzer, que los desarrolladores pueden usar para probar sus propios proyectos.
  • Al adoptar esta técnica, los desarrolladores de Ladybird pueden corregir los errores encontrados y mejorar la estabilidad del navegador, lo que ayudará a mejorar la experiencia del usuario y reforzar la seguridad.

1 comentarios

 
GN⁺ 2024-03-17
Opiniones en Hacker News
  • El valor de una especificación se demuestra con implementaciones diversas

    Este artículo deja claro por qué son importantes las distintas implementaciones de una especificación. Ya se encontró un problema y se espera que haya más.

  • La posibilidad de que un grupo pequeño también pueda crear cosas sorprendentes

    Expresa entusiasmo por que grupos pequeños lleven adelante proyectos increíbles. Esto es difícil en empresas con partes interesadas.

  • Sorpresa por el rápido avance del proyecto con la implementación de SVG

    Expresa fascinación porque el proyecto avanza más rápido de lo esperado y porque la implementación de SVG ya fue completada.

  • Necesidad de un enfoque profundo para resolver problemas en el desarrollo de software

    Sostiene que los desarrolladores no deberían limitarse a encontrar y corregir problemas, sino entender su causa raíz y buscar errores similares en toda la base de código. Enfatiza que la inestabilidad y los bugs del software moderno se deben a las limitaciones del capitalismo, pero que es posible desarrollar mejor software.

  • Curiosidad sobre si el motor web de Ladybird participará en el hackfest de motores web

    Expresa interés en si Ladybird participará este año en el hackfest de motores web.

  • Duda por la ausencia de videos de YouTube sobre hacking

    Expresa pena porque ya no se actualizan los videos de YouTube relacionados con hacking.

  • Reacción divertida a la combinación de palabras "fuzzing ladybird"

    Opina que la combinación de palabras "fuzzing ladybird" suena divertida y salvaje.

  • Esperanza secreta de que Ladybird pueda conquistar el mundo

    En secreto espera que Ladybird algún día pueda conquistar el mundo, y pide que no se lo digan a nadie.

  • [comentario eliminado]

    Informa que un comentario específico fue eliminado.