V8 内联 Array.prototype.sort 中的类型混淆(Maglev + Turbofan)。2026 年 Chrome 第 6 个零日漏洞。
| 字段 | 值 |
|---|---|
| CVSS | 8.8(高危) |
| CWE | CWE-843(类型混淆) |
| 组件 | V8 JavaScript 引擎 -- Maglev/Turbofan 内联排序 |
| 受影响版本 | Chrome < 152.0.7977.82,所有基于 Chromium 的浏览器 |
| 修复版本 | Chrome 152.0.7977.82(2026-09-03) |
| 修复提交 | e0562d87ad9c17042b581582c99237d798572e67 |
| CISA KEV | 2026-09-04 添加,截止日期 2026-09-18 |
| 野外利用 | 是(Google 已确认) |
| 报告者 | Salvatore Gulizia (Serotav) |
内联排序优化接受多态元素种类反馈(PACKED_SMI_ELEMENTS + PACKED_ELEMENTS)。当比较器调用 arr.fill(0) 时,V8 将接收者映射从 PACKED_ELEMENTS 向后迁移到 PACKED_SMI_ELEMENTS。排序后的映射检查通过,因为 PACKED_SMI_ELEMENTS 在原始反馈集中。回写操作将对象指针写入一个映射声称仅包含 SMI 元素的数组。
该修复添加了一个前置条件,要求反馈中的所有接收者映射在内联排序之前共享相同的 elements_kind。
# 使用 V8 调试辅助工具
d8 --allow-natives-syntax poc-minimal.js
# 不使用(通过 String() 进行启发式验证)
d8 poc-minimal.js
在 Chrome < 152.0.7977.82 中打开 poc.html。该漏洞利用会自动运行,并将每个阶段记录到页面和开发者控制台。阶段:
arr.fill(0) 触发类型混淆addrof 原语 -- 将压缩堆指针作为整数泄露fakeobj -- 从受控整数伪造对象引用训练(2000 次迭代)
|
v
类型混淆:PACKED_ELEMENTS 映射 -> PACKED_SMI_ELEMENTS 映射
(后备存储仍持有对象指针)
|
v
addrof:String(confused_array) 将指针作为整数泄露
|
v
fakeobj:double/object 数组重叠写入受控指针
|
v
伪造具有受控元素指针的 JSArray -> 任意读/写(笼内)
|
v
V8 沙箱内的代码执行(完整 RCE 需要沙箱逃逸)
kMaxInlineSortLength)arr.fill() 以实现向后映射迁移PACKED_SMI 和 PACKED_ELEMENTS 数组| 文件 | 描述 |
|---|
patch-analysis.md | 完整补丁差异分析,包括根本原因、触发机制和利用原语评估 |
patch-analysis.json | 结构化数据:提交哈希、CWE、受影响版本、利用原语 |
v8-research.md | V8 元素种类深入分析、先前艺术 PoC(CVE-2020-6418、CVE-2025-2135、CVE-2024-4947 等)、沙箱架构、逃逸技术 |
poc-minimal.js | 用于 d8 的最小类型混淆触发器(d8 --allow-natives-syntax poc-minimal.js) |
poc.html | 完整利用链:类型混淆、addrof 原语、堆喷射、通过后备存储重叠实现 fakeobj、信息泄露 |
exploit-notes.md | 技术文档:逐步利用链、堆布局图、指针压缩、沙箱影响、检测指标、修复措施 |