状态:分析 + 已验证的 PoC。原语武器化进行中。
这次是基于 2026 年漏洞构建的 WasmBlazeFox 风格利用链:CVE-2026-2764,即 JavaScript 引擎:JIT 组件中的 IonMonkey/baseline“JIT 错误编译 + 释放后使用”, 已在 Firefox 148 中修复(MFSA 2026-13,CVSS 待定)。与 CVE-2024-29943-but-with-wasm 的最终目标相同:将原语送入充满 shellcode 常量的 WASM JIT 页面。
Bugzilla bug 2012608 受限,但修复已公开落地:
hg 1b58f51668d3 — “Bug 2012608: Call CreateThis directly from PBL”:
PortableBaselineInterpret.cpp 不再通过 CreateThisFromIC(该函数会重新读取 IC 状态)
来路由脚本化构造函数的 this 创建,而是直接调用
js::CreateThis,并使用正确根化的值。hg 3adad00d0042 — 在 BaselineCacheIRCompiler.cpp 的
createThis 契约(argc 必须包含展开参数)上补充格式/文档。hg 57885d520e85 — 回归测试(即我们的 PoC)。故障模式:在 new Ctor(...arr) / Reflect.construct 中,当 Proxy 作为
newTarget 时,代理的 get 陷阱会在引擎处于“展开参数”与“创建 this”之间时运行。
该回调可以修改或释放引擎正在展开的数组,而引擎会继续基于过时的假设运行:
arr[0] 在展开快照之后从 int 被替换为 object(poc-typeconfusion.js)arr.length = 0; gc() 在展开过程中释放元素存储(poc-uaf.js)针对 2026-02-09 mozilla-central 夜间版 jsshell(JavaScript-C149.0a1,
linux x86-64,修复前),在 x86_64 Docker 容器中:
./js poc-typeconfusion.js -> Error: Assertion failed: got "oops", expected 1
./js poc-uaf.js -> Segmentation fault
两个 PoC 都是 Mozilla 自己的回归测试,逐字未改。
poc-typeconfusion.js (可控的参数值混淆,不崩溃)
-> Ion 优化一个构造函数,使其对展开参数做出 baked 类型假设;
在已被证明是 int32 的位置换入一个对象
-> addrof / fakeobj
-> 破坏 TypedArray 长度 -> 任意读/写
-> WASM JIT shellcode 阶段(与 CVE-2024-29943-but-with-wasm 相同:
f64.const 立即数,FuncExport 入口偏移覆盖)
WASM 阶段和偏移遍历代码原样移植,只需针对 FF149 时代构建重新推导偏移
(配方见 CVE-2024-29943-but-with-wasm/test.gdb)。
1b58f51668d3、3adad00d0042、测试 57885d520e85