Уразливість LibJS у браузері Ladybird: критична проблема безпеки
Уразливість у JavaScript-движку LibJS
В JavaScript-движку LibJS, який використовується в веб-браузері Ladybird, виявлена уразливість (CVE-2025-47154). Вона дозволяє виконати свій код в системі під час обробки спеціально оформленого JavaScript-коду. Уразливість викликана зверненням до вже звільненої області пам’яті через звільнення пам’яті на векторі m_argument_values_buffer, на який залишався вказівник у структурі arguments_list. Доступний робочий прототип експлоїта.
Дослідження уразливості у LibJS
Дослідник, що виявив проблему, провів fuzzing-тестування LibJS, в коді якого зафіксовано 10 аварійних завершень. Розбір одного з збоїв показав, що уразливість може бути експлуатована при обробці JavaScript-коду. Вона дозволяла читати та записувати в довільні області пам’яті процесу.
Виконання коду було організоване в експлоїті через заміну вказівника на повернення з функції відображення. Використовуючи повернено-орієнтоване програмування (ROP – Return-Oriented Programming), був сформований ланцюг для виконання системного виклику execve для запуску зовнішнього додатку.
Специфікації браузера Ladybird
Браузер Ladybird розробляє Андреас Клинг, який раніше працював у компанії Nokia та займався розробкою KHTML, а потім в Apple був одним із розробників Safari. На даному етапі розвитку Ladybird перебуває на стадії пре-альфа версії, яка підходить тільки для використання розробниками. Спочатку проект був створений як додаток для операційної системи SerenityOS, але влітку минулого року він був виділений в окремий проект і отримав пожертвування в 1 млн. доларів.
Браузер написаний на мові C++ (планується перейти на Swift) і розповсюджується під ліцензією BSD. Проектом розвивається власний движок LibWeb, JavaScript-інтерпретатор LibJS та супутні бібліотеки. Для отримання додаткових деталей можна відвідати сайт Ladybird та прочитати офіційну новину.