
Proof-of-Concept-Exploit-Kette für den Firefox-JIT-CVE-2026-2764, die JIT-Fehlkompilierung und Use-after-Free zu beliebigen Lese-/Schreibzugriffen und WASM-Shellcode-Ausführung verknüpft.
Status: Analyse + validierter PoC. Waffenisierung der Primitive in Arbeit.
Eine Chain im WasmBlazeFox-Stil, diesmal auf Basis eines 2026er-Bugs: CVE-2026-2764, eine „JIT-Miskompilierung + use-after-free“ in der Komponente JavaScript Engine: JIT, behoben in Firefox 148 (MFSA 2026-13, CVSS TBD). Gleiches Endspiel wie CVE-2024-29943-but-with-wasm: die Primitive in eine WASM-JIT-Seite voller Shellcode-Konstanten einspeisen.
Der Bugzilla-Bug 2012608 ist eingeschränkt, aber der Fix wurde öffentlich eingespielt:
hg 1b58f51668d3 — "Bug 2012608: Call CreateThis directly from PBL":
PortableBaselineInterpret.cpp leitete die this-Erzeugung für scripted-Konstruktoren nicht mehr über CreateThisFromIC (das den IC-Zustand erneut las), sondern ruft jetzt js::CreateThis direkt mit ordnungsgemäß verwurzelten Werten auf.hg 3adad00d0042createThisBaselineCacheIRCompiler.cpphg 57885d520e85 — die Regressionstests (unsere PoCs).Fehlerbild: Bei new Ctor(...arr) / Reflect.construct mit einem Proxy als newTarget läuft die get-Trap des Proxys, während sich die Engine zwischen dem Spreizen der Argumente und dem Erzeugen von this befindet. Dieser Callback kann genau das Array verändern oder freigeben, das die Engine gerade spreizt, und die Engine arbeitet mit veralteten Annahmen weiter:
arr[0] nach der Spread-Momentaufnahme von int -> object geändert (poc-typeconfusion.js)arr.length = 0; gc() gibt den Elements-Speicher mitten im Spread frei (poc-uaf.js)Gegen den jsshell der mozilla-central-Nightly vom 2026-02-09 (JavaScript-C149.0a1, Linux x86-64, Pre-Fix), in einem x86_64-Docker-Container:
./js poc-typeconfusion.js -> Error: Assertion failed: got "oops", expected 1
./js poc-uaf.js -> Segmentation fault
Beide PoCs sind exakt Mozillas eigene Regressionstests.
poc-typeconfusion.js (controllable argument-value confusion, no crash)
-> Ion-optimize a constructor that makes baked type assumptions on its
spread arguments; swap in an object where an int32 was proven
-> addrof / fakeobj
-> corrupt TypedArray length -> arbitrary R/W
-> WASM JIT shellcode stage (same as CVE-2024-29943-but-with-wasm:
f64.const immediates, FuncExport entry-offset overwrite)
Die WASM-Stufe und der Offset-Walk-Code werden unverändert übernommen, außer den Offsets, die gegen den FF149-Ära-Build neu abgeleitet werden müssen (siehe CVE-2024-29943-but-with-wasm/test.gdb für das Rezept).
1b58f51668d3, 3adad00d0042, Tests 57885d520e85