
Cadeia de exploits de prova de conceito para o Firefox JIT CVE-2026-2764, encadeando má compilação do JIT e use-after-free em leitura/escrita arbitrária e execução de shellcode WASM.
Status: análise + PoC validado. Weaponização da primitiva em andamento.
Uma cadeia no estilo WasmBlazeFox construída desta vez sobre um bug de 2026: CVE-2026-2764, uma "má compilação JIT + use-after-free" do IonMonkey/baseline no componente JavaScript Engine: JIT, corrigida no Firefox 148 (MFSA 2026-13, CVSS TBD). Mesmo objetivo final do CVE-2024-29943-but-with-wasm: alimentar a primitiva em uma página JIT de WASM cheia de constantes de shellcode.
O bug 2012608 do Bugzilla é restrito, mas a correção foi disponibilizada publicamente:
hg 1b58f51668d3 — "Bug 2012608: Call CreateThis directly from PBL":
PortableBaselineInterpret.cpp parou de rotear a criação de this de construtores com script através de CreateThisFromIC (que relia o estado do IC) e agora chama js::CreateThis diretamente com valores devidamente enraizados.hg 3adad00d0042 — formatação/documentação sobre o contrato de em (argc deve incluir argumentos spread).createThisBaselineCacheIRCompiler.cpphg 57885d520e85 — os testes de regressão (nossos PoCs).Modo de falha: em new Ctor(...arr) / Reflect.construct com um Proxy como newTarget, a trap get do proxy é executada enquanto o mecanismo está entre o espalhamento dos argumentos e a criação de this. Esse callback pode mutar ou liberar exatamente o array que o mecanismo está espalhando, e o mecanismo continua com suposições obsoletas:
arr[0] trocado de int para objeto após o snapshot do spread
(poc-typeconfusion.js)arr.length = 0; gc() libera o armazenamento de elementos durante o spread
(poc-uaf.js)Contra o jsshell nightly do mozilla-central de 2026-02-09 (JavaScript-C149.0a1, linux x86-64, pré-correção), em um contêiner Docker x86_64:
./js poc-typeconfusion.js -> Error: Assertion failed: got "oops", expected 1
./js poc-uaf.js -> Segmentation fault
Ambos os PoCs são os próprios testes de regressão da Mozilla, sem alterações.
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)
O estágio WASM e o código de caminhada de offsets são portados inalterados, exceto pelos offsets a serem rederivados contra a build da era FF149 (veja CVE-2024-29943-but-with-wasm/test.gdb para a receita).
1b58f51668d3, 3adad00d0042, testes 57885d520e85