В 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
