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, 任意地址读写, 内存安全, 多模态安全, 技术调研, 数据可视化, 数据展示, 渲染引擎, 漏洞复现, 红队, 网络安全, 自定义脚本, 逆向工具, 释放后重用, 隐私保护