W silniku JavaScript LibJS używanym w przeglądarce internetowej Ladybird wykryto lukę w zabezpieczeniach (CVE-2025-47154), która umożliwia wykonywanie niestandardowego kodu w systemie podczas przetwarzania specjalnie sformatowanego kodu JavaScript. Luka w zabezpieczeniach jest spowodowana zwolnieniem pamięci w wektorze m_argument_values_buffer, do którego wskaźnik znajdował się w strukturze arguments_list, co prowadziło do dostępu do już zwolnionego obszaru pamięci. Dostępny jest działający prototyp exploita.
Badacz, który zidentyfikował problem, przeprowadził testy nieprecyzyjne LibJS, które zakończyły się 10 awariami. Analiza jednej z awarii wykazała, że problem może zostać wykorzystany podczas przetwarzania kodu JavaScript. Luka umożliwiała odczyt i zapis w dowolnych obszarach pamięci procesu. Wykonanie kodu w tym exploicie zostało zorganizowane poprzez zastąpienie wskaźnika powrotu z funkcji renderującej. Wykorzystując programowanie zorientowane na zwrot (ROP, exploit jest tworzony z istniejących fragmentów instrukcji maszynowych kończących się instrukcją return), utworzono łańcuch w celu wykonania wywołania systemowego execve w celu uruchomienia zewnętrznej aplikacji.
Przeglądarkę Ladybird rozwija Andreas Kling, który kiedyś pracował w Nokii i zajmował się rozwojem KHTML, a następnie w Apple był jednym z twórców Safari. Na obecnym etapie rozwoju aplikacja Ladybird znajduje się w fazie pre-alfa, co oznacza, że mogą z niej korzystać wyłącznie deweloperzy. Projekt pierwotnie powstał jako aplikacja dla systemu operacyjnego SerenityOS, ale latem ubiegłego roku został wydzielony jako osobny projekt i otrzymał darowiznę w wysokości 1 miliona dolarów. Przeglądarka została napisana w języku C++ (zdecydowano się na przejście na język Swift) i jest rozpowszechniana na licencji BSD. W ramach projektu opracowywany jest własny silnik LibWeb, interpreter JavaScript LibJS i powiązane biblioteki.
Źródło: opennet.ru
