kiddo-pwn/ffffirefox
GitHub: kiddo-pwn/ffffirefox
针对 Firefox 150 渲染器中 Ion JIT 与 wasm-GC 交互导致的 use-after-free 漏洞(CVE-2026-8390)的完整 RCE 利用 PoC。
Stars: 36 | Forks: 8
# FFFFirefox - 一个一日游的渲染器漏洞利用
## 背景故事
我为 Pwn2Own Berlin 2026 构建了此项目,作为针对 Firefox 150 的一项渲染器 RCE 参赛作品。有趣的是,这个 Bug 顽强地挺过了 Mozilla 在 4 月份的 423(!)个安全补丁,但最终在 150.0.3 版本中作为一个紧急修复被干掉了。
该漏洞被追踪为 CVE-2026-8390,原始报告提交给了 OpenAI Preparedness 的 Bill Demorkapi。发布此内容只是为了炫耀一下,并给这个漏洞利用一个体面的告别。
https://github.com/user-attachments/assets/0dda5879-16b3-4fe5-b13b-b177ad2f86cd
## 漏洞详情
Ion 的 `array.copy` 底层实现与 wasm-GC 数组的 OOL 存储路径之间的交互会导致一个 use-after-free 漏洞。
Ion 在跨运行时调用 `WasmArrayRefsMove` 期间缓存了源 `data_` 指针,同时将源数组对象从栈帧中丢弃。
因此,在该时间窗口内发生的轻微 GC 会释放 OOL 块,随后通过堆喷射(spray)将释放的内存重新占用为 `AnyRef` 值。
有了 `addrof` 和 `fakeobj` 原语,剩余的操作就变得简单直接,并且在网上已有大量相关资料。构建 AAR / AAW,然后将其转换为 JIT shellcode 执行。
## 复现步骤
1. 运行一个 Web 服务器来托管给定的 index.html 文件(例如 `python3 -m http.server 8000`)
2. 使用 `set MOZ_DISABLE_CONTENT_SANDBOX=1` 启动 Firefox
3. 浏览并访问 `http://:8000`
预期结果为执行 shellcode 并启动 `calc.exe`。
## 结语
所有 6 个 Firefox 参赛作品的 RIP!我听说很多团队最终都撞在了同一个补丁上。
这个漏洞在我的环境中一直非常稳定,希望在你那里也是如此。后续可能会发布完整的 Writeup,但无论如何都不会提供技术支持。
向柏林的所有朋友们致敬!
\-- kiddo kiddo.pwn@gmail.com
标签:AAR, AAW, addrof, AI工具, CVE-2026-8390, Exploit, fakeobj, Firefox, GC, Go语言工具, JIT, Pwn2Own, RCE, Shellcode, UAF, WebAssembly, 任意地址读写, 内存安全, 多模态安全, 技术调研, 数据可视化, 数据展示, 渲染引擎, 漏洞复现, 红队, 网络安全, 自定义脚本, 逆向工具, 释放后重用, 隐私保护