J4ck3LSyN-Gen2/CVE-2026-6307-Longinus
GitHub: J4ck3LSyN-Gen2/CVE-2026-6307-Longinus
CVE-2026-6307(Longinus)的 PoC 仓库,演示 V8 TurboFan 中 JS-to-Wasm 内联导致的类型混淆漏洞及其 addrof/fakeobj 利用原语。
Stars: 8 | Forks: 2
# CVE-2026-6307-Longinus
### V8 TurboFan 中的类型混淆(JS-to-Wasm 调用内联 + FrameState 合并)
**常被称为“Longinus”:** 一个漏洞突破双重边界
**代码仓库:** [https://github.com/Jack3LSyN-Gen2/CVE-2026-6307-Longinus](https://github.com/J4ck3LSyN-Gen2/CVE-2026-6307-Longinus)
**详细报告:** [OS-IS-CVE-2026-6307-07-2026.md](https://github.com/J4ck3LSyN-Gen2/Reports/blob/main/OS-IS-CVE-2026-6307-07-2026.md)
**技术分析:** [Nebula Security - Longinus:一个漏洞突破双重边界](https://nebusec.ai/research/v8-cve-2026-6307-writeup/)
## 概述
本仓库包含 **CVE-2026-6307**(“**Longinus**”)的**概念验证(PoC)**,这是 Google V8 的 TurboFan 编译器中一个严重等级较高的类型混淆漏洞。该漏洞源于 JS-to-WebAssembly 调用内联期间 `FrameStateFunctionInfo` 中不完整的相等比较,具体而言是遗漏了 `JSToWasmFrameStateFunctionInfo` 的 `signature_` 字段。
此缺陷导致具有不同返回类型(`externref` 与 `i64`)的 `FrameState` 节点发生**错误合并**。在**惰性去优化**期间,去优化器错误解读了返回寄存器,从而产生了强大的**任意读/写原语**:
- **`addrof(target)`** - 将 JavaScript 对象的地址作为 `BigInt` 泄露。
- **`fakeobj(addr)`** - 在任意地址实例化伪造的 JavaScript 对象。
结合适当的后续技术,这些原语可以在单个漏洞中同时突破 **V8 堆沙箱**和**渲染器沙箱边界**。
**影响:** 通过恶意的 JavaScript(例如,精心构造的网页)在沙箱化的渲染器进程内实现远程代码执行(RCE)。
## 漏洞根源(技术摘要)
1. TurboFan 中的 **JS-to-Wasm 内联**创建了内嵌 `JSToWasmFrameStateFunctionInfo` 的 `FrameState` 节点。
2. `FrameStateFunctionInfo` 的相等运算符(`==`)**未**比较 WebAssembly 函数签名(`signature_`)。
3. 公共子表达式消除(CSE)合并了返回类型不匹配的 `FrameState`。
4. 去优化时:
- `externref` 被错误解读为 `i64` → 指针位作为 `BigInt` 泄露(**addrof**)。
- `i64` 被错误解读为 `externref` → 整数位作为标记引用被实例化(**fakeobj**)。
请参阅完整的 Nebula Security 分析文章及随附的分析报告,以获取图表、TurboFan IR 片段和去优化器行为。
## 仓库内容
| 文件 | 描述 |
|------|-------------|
| `poc.js` | 核心 PoC,演示 `addrof` 和 `fakeobj` 原语 + 基础读写演示。 |
| `gen.py` | 用于生成 PoC 变体或 payload 脚手架的辅助脚本。 |
| `val.py` | 用于原语的验证和测试实用工具。 |
| `cve-2026-6307_d8_execution.yml` | 用于在 V8 `d8` shell 中运行 PoC 的配置 / 工作流。 |
| `cve-2026-6307_longinus_poc.yar` | 用于检测 PoC 签名或相关模式的 YARA 规则。 |
## 设置与使用
### 前置条件
- 存在漏洞的 V8 构建(修复前,例如 Chrome < 147.0.7727.101 或 2026 年 3 月至 6 月左右匹配的 `d8` 二进制文件)。
- V8 标志:`--allow-natives-syntax --expose-wasm`
- 推荐:带有 `--turbo-dynamic-map-checks` 或类似标志的调试版 `d8` 用于调试。
### 运行 PoC
```
# 使用 d8 shell
./d8 --allow-natives-syntax --expose-wasm poc.js
```
**预期行为(在存在漏洞的构建上):**
- 成功 `addrof` 泄露虚拟对象的地址。
- 成功实例化 `fakeobj`(身份检查通过)。
- 通过 ArrayBuffer 后端存储进行基础任意读取演示。
**注意:** 完整的 RCE 需要额外的工程技术(偏移量计算、WASM/GC 交互、沙箱逃逸)。此 PoC 专注于核心原语。
### YARA 检测
包含的 `.yar` 规则可在安全工具中用于识别脚本或内存中的 PoC 模式。
## 缓解措施
- **立即更新**至 Chrome/V8 版本 **≥ 147.0.7727.101**(或包含修复程序的补丁版本)。
- 启用**控制流完整性(CFI)**。
- 利用**站点隔离**(现代 Chrome 中的默认功能)。
- 使用强大的沙箱、CSP,并保持系统全面修补。
## 参考与鸣谢
- **主要分析文章:** [Nebula Security - Longinus](https://nebusec.ai/research/v8-cve-2026-6307-writeup/)
- **详细分析报告:** [OS-IS-CVE-2026-6307-07-2026.md](https://github.com/J4ck3LSyN-Gen2/Reports/blob/main/OS-IS-CVE-2026-6307-07-2026.md)
- 原始研究归功于 Vega(Nebula Security)及贡献者。
- 感谢 V8 团队的快速响应和修复。
- 感谢 [YogSoth0](https://x.com/YogSoth0) 提供的相关信息。
**免责声明:** 本仓库仅用于**教育、防御和研究目的**。请勿在未经授权的系统上使用。作者对任何滥用行为不承担责任。
如有问题、贡献或变体开发,请提交 issue 或 PR。
*最后更新:2026 年 7 月*
标签:Go语言工具, PoC, V8引擎, WebAssembly, Web报告查看器, 数据可视化, 暴力破解, 类型混淆, 逆向工具