状态:已验证的崩溃 PoC,并演示了控制流劫持
(崩溃 pc = 调试 shell 下已释放单元的毒化值 0xcdcdcdcdcdcdcdcd
——引擎跳转到一个从已释放的 ICScript 中读出的指针)。
剩余工作:控制被回收的字节。参见
research/README.md。
一个 WasmBlazeFox 家族的利用链,针对 2026 年的一个漏洞:CVE-2026-2766,“JavaScript 引擎:JIT 组件中的 JIT 错误编译 / 释放后使用”, 已在 Firefox 148 中修复(MFSA 2026-13)。最终目标与 CVE-2024-29943-but-with-wasm 相同: 将该原语转化为对代码指针的控制,并将其指向一个充满 shellcode 常量的 WASM JIT 页面。
根据 Mozilla 自己的回归测试注释(bug 2013583,测试提交于
hg 457b68097f81)以及 js/src/jit/JitScript.h 中的 ICScript Lifetimes SMDOC:
removeInlinedChild → 子级的 ICScript 会从
inlinedChildren_ 中移除,但仍被 InliningRoot 的
inlinedScripts_ 向量引用——而且致命的是,仍被调用方 IC 链中残留的
过时 CallInlinedFunction 桩引用。gczeal(14, 1),即每次分配都执行 ZealCompactValue)会
移动/疏散这个孤立的 ICScript,而过时的桩链仍保留旧地址。0xe5,从而产生非常易读的崩溃。存在漏洞的构建:mozilla-central 修订版 b3663be61a1a(2026-01-15 nightly;
修复落在 2026-01-15 与 2026-02-09 之间——Feb-09 nightly
可存活)。Shell:该修订版对应的 Taskcluster linux64-fuzzing-asan-opt jsshell
(需要它来使用 gczeal;release-opt shell 缺少该功能)。
./js --ion-warmup-threshold=100000 poc.js
== ERROR: AddressSanitizer: SEGV on unknown address 0xe5e5e5e5e5e5e5e5
The signal is caused by a READ memory access.
#0-#3 <unknown module> <- baseline JIT code
#4 EnterJit / MaybeEnterJit <- js/src/jit/Jit.cpp
#10 js::jit::DoCallFallback <- BaselineIC.cpp (the stale IC chain)
rdi = 0xe5e5e5e5e5e5e5e5 <- the freed ICScript
解引用发生在遍历过时桩链的 baseline JIT 代码中: 控制被回收的单元 = 控制 baseline 所信任的 ICEntry/桩字段, 包括它跳转到的桩代码指针。
orphaned ICScript (this PoC)
-> compacting GC moves it; stale chain keeps old address
-> reclaim the old cell with controlled bytes (size-class spray)
-> baseline reads fake ICEntry -> fake ICStub -> fake code_ pointer
-> jump into the WASM JIT page shellcode (f64.const immediates,
FuncExport entry-offset overwrite — see the 2024-29943 repo)
完整武器化日志参见 research/README.md。
当前进展摘要:
TrailingArray)ICScript 的移动后使用——
原则上可通过按大小分类的缓冲区进行喷射回收。new Ctor(flag) 调用内部,相隔仅微秒,
两者之间没有 JS 回调点;朴素的喷射要么错过窗口(reclaim1/2),要么
用 zeal GC 风暴把 IC 状态搅乱掉(reclaim3)。过时链确实能在单次
普通 gc() 后存活(purge_check)。WASM 阶段本身已经构建并在 CVE-2024-29943-but-with-wasm 中演示过; 只需为这个 FF149 时代的构建重新推导对象模型偏移。
poc.js — Mozilla 的回归测试(bug 2013583),已验证可如上所示使
2026-01-15 ASAN jsshell 崩溃。457b68097f81