Se ha descubierto una vulnerabilidad en el motor JavaScript LibJS, utilizado en el navegador web Ladybird (CVE-2025-47154), que permite la ejecución de código en el sistema al procesar código JavaScript especialmente diseñado. La vulnerabilidad fue causada por la liberación de memoria en el vector m_argument_values_buffer, al que todavía apuntaba un puntero en la estructura arguments_list, lo que provocaba el acceso a un área de memoria ya liberada. Hay un prototipo funcional del exploit disponible.
El investigador que identificó el problema realizó pruebas de fuzzing en LibJS, durante las cuales se registraron 10 cierres inesperados. El análisis de uno de los fallos mostró que podría ser explotado al procesar código JavaScript. La vulnerabilidad permitía leer y escribir en áreas de memoria arbitrarias del proceso. La ejecución de código se organizó en el exploit mediante la sustitución del puntero de retorno desde la función de renderizado. Se formó una cadena para ejecutar la llamada al sistema execve para iniciar una aplicación externa mediante la programación orientada al retorno (ROP - Return-Oriented Programming, el exploit se forma a partir de fragmentos de instrucciones de máquina existentes que terminan con la instrucción de retorno).
El navegador Ladybird es desarrollado por Andreas Kling, quien anteriormente trabajó en Nokia y estuvo involucrado en el desarrollo de KHTML, y luego en Apple fue uno de los desarrolladores de Safari. Actualmente, Ladybird se encuentra en la etapa de pre-alfa, siendo adecuado solo para uso de desarrolladores. Inicialmente, el proyecto se creó como una aplicación para el sistema operativo SerenityOS, pero el verano pasado se convirtió en un proyecto independiente y recibió una donación de 1 millón de dólares. El navegador está escrito en C++ (se ha decidido pasar al lenguaje Swift) y se distribuye bajo la licencia BSD. El proyecto también desarrolla su propio motor LibWeb, el intérprete de JavaScript LibJS y bibliotecas relacionadas.
Fuente: opennet.ru
