
Cadena de exploits de prueba de concepto para Firefox JIT CVE-2026-2764, que encadena una compilación incorrecta de JIT y un use-after-free para lograr lectura/escritura arbitraria y ejecución de shellcode WASM.
Estado: análisis + PoC validado. Weaponización de la primitiva en curso.
Una cadena estilo WasmBlazeFox construida sobre un bug de 2026 esta vez: CVE-2026-2764, una «miscompilación JIT + use-after-free» de IonMonkey/baseline en el componente JavaScript Engine: JIT, corregido en Firefox 148 (MFSA 2026-13, CVSS TBD). El mismo objetivo final que CVE-2024-29943-but-with-wasm: introducir la primitiva en una página JIT de WASM llena de constantes de shellcode.
El bug 2012608 de Bugzilla está restringido, pero el fix aterrizó en público:
hg 1b58f51668d3 — «Bug 2012608: Call CreateThis directly from PBL»: PortableBaselineInterpret.cpp dejó de enrutar la creación de this de constructores con script a través de CreateThisFromIC (que releía el estado de IC) y ahora llama a js::CreateThis directamente con valores correctamente anclados.hg 3adad00d0042 — formato/documentación sobre el contrato de createThis en BaselineCacheIRCompiler.cpp (argc debe incluir los argumentos spread).hg 57885d520e85 — las pruebas de regresión (nuestros PoCs).Modo de fallo: en new Ctor(...arr) / Reflect.construct con un Proxy como newTarget, la trampa get del proxy se ejecuta mientras el motor está entre el spread de los argumentos y la creación de this. Ese callback puede mutar o liberar el propio array que el motor está expandiendo, y el motor continúa con suposiciones obsoletas:
arr[0] cambia de int -> object después de la instantánea del spread (poc-typeconfusion.js)arr.length = 0; gc() libera el almacén de elementos a mitad del spread (poc-uaf.js)Contra el jsshell nightly de mozilla-central del 2026-02-09 (JavaScript-C149.0a1, linux x86-64, previo al fix), en un contenedor Docker x86_64:
./js poc-typeconfusion.js -> Error: Assertion failed: got "oops", expected 1
./js poc-uaf.js -> Segmentation fault
Ambos PoCs son las propias pruebas de regresión de Mozilla, sin cambios.
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)
La etapa WASM y el código de recorrido de offsets se portan sin cambios excepto por los offsets a re-derivar contra la build de la era FF149 (ver CVE-2024-29943-but-with-wasm/test.gdb para la receta).
1b58f51668d3, 3adad00d0042, tests 57885d520e85