Przeglądarka Ladybird zawiera podatność memory-safety w module ładującym WebAssembly przez ścieżkę ESM, umożliwiającą zdalne wykonanie kodu (RCE) w procesie WebContent. Atakujący może wywołać dowolny zapis do pamięci i doprowadzić do wykonania kodu poprzez spreparowaną stronę WWW.
▸ Pokaż oryginał (EN)
Ladybird contains a dangling-reference memory-safety flaw in its WebAssembly ESM-integration module loader. When a JavaScript function is imported into a WebAssembly module via the ESM path, WebAssemblyModule.cpp passes a stack-local Wasm::FunctionType by reference to create_host_function, whose host callback captures and later reads that reference; once the ESM link-loop iteration ends the FunctionType is destroyed, leaving the callback with a dangling reference (the normal instantiate path uses a long-lived reference and is not affected). Stale result-type data lets the host callback return an empty result vector for a statically non-empty result, so the destination register retains an attacker-influenced value that is then consumed by the WASM-GC array.set handler, which bit-casts the reference low bits to an ArrayInstance pointer after only a null check, yielding an arbitrary write. A web page can chain this into code execution in the WebContent process. Verified reachable from HTML content without any instrumentation or source modification.
Gdy funkcja JavaScript jest importowana do modułu WebAssembly przez ścieżkę ESM, plik WebAssemblyModule.cpp przekazuje lokalny (stack-local) obiekt Wasm::FunctionType przez referencję do funkcji create_host_function. Callback hosta przechwytuje tę referencję i odczytuje ją później — jednak po zakończeniu iteracji pętli linkowania ESM obiekt FunctionType jest niszczony, pozostawiając callback z wiszącą referencją (dangling reference). Wadliwe dane o typie zwracanym powodują, że callback zwraca pusty wektor wyników tam, gdzie statycznie powinien być niepusty, co sprawia, że rejestr docelowy zachowuje wartość kontrolowaną przez atakującego. Wartość ta jest następnie konsumowana przez handler WASM-GC array.set, który rzutuje niskie bity referencji na wskaźnik ArrayInstance po samym sprawdzeniu wartości null — co skutkuje możliwością dowolnego zapisu w pamięci (arbitrary write) prowadzącego do wykonania kodu.
Atakujący może uzyskać możliwość dowolnego zapisu w pamięci procesu WebContent, co prowadzi do zdalnego wykonania kodu (RCE) w kontekście tego procesu. Wystarczy nakłonić ofiarę do odwiedzenia spreparowanej strony HTML.
Należy zastosować patche dostępne u producenta zgodnie z referencjami. Do czasu aktualizacji zaleca się powstrzymanie się od używania przeglądarki Ladybird do przeglądania niezaufanych stron WWW.
Przeglądarka Ladybird — konkretne wersje wskazane w referencjach producenta; podatność dotyczy ścieżki ładowania modułów WebAssembly przez ESM (kod w bibliotece LibWeb/WebAssembly/WebAssemblyModule.cpp). Normalna ścieżka instantiate nie jest podatna.
Podatność została zweryfikowana jako osiągalna z poziomu treści HTML bez potrzeby instrumentacji lub modyfikacji kodu źródłowego. W referencjach opublikowano publicznie dostępny proof-of-concept exploit (bikini/exploitarium na GitHub). CVE dotyczy CWE-787 (out-of-bounds write), CWE-825 (expired pointer dereference) oraz CWE-843 (type confusion).
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X