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