漏洞档案

字段 内容
CVE 编号 CVE-2026-85046
漏洞类型 Type Confusion(类型混淆)
影响组件 Google Chrome V8 JavaScript/WebAssembly 引擎
影响版本 Chrome 152.0.7977.82 之前版本
CVSS 评分 8.8(高危)
披露时间 2026 年 9 月 3 日
发现方 Salvatore Gulizia(Serotav)
在野利用 已确认,Google 明确表示 exploit 存在于野外
攻击前提 用户访问恶意网页
危害 渲染进程沙箱内任意代码执行,配合沙箱逃逸可完全控制系统

V8 与类型混淆

V8 是 Google 开发的 JavaScript 引擎,用于 Chrome、Node.js 等项目。为了让 JavaScript 这种动态类型语言跑得足够快,V8 采用了多层编译架构:解释器(Ignition)→ 基线编译器(Sparkplug)→ 优化编译器(Maglev / TurboFan)。

优化编译器的核心思路是”投机优化”:根据代码运行时收集的类型反馈(type feedback),假设变量在未来仍然保持相同类型,然后生成高度优化的机器码。如果假设成立,代码跑得飞快;如果假设不成立(发生了去优化,deoptimization),则回退到解释器执行。

类型混淆(Type Confusion)是 V8 漏洞中最常见的类型之一。当优化编译器在某些边界条件下错误地处理了对象的类型信息,导致一段内存被当作错误的类型来解释时,就会发生类型混淆。攻击者可以利用这种混淆来构造任意读写原语,最终实现代码执行。

CVE-2026-85046 就是这样一个漏洞。

根因分析

根据发现者 Salvatore Gulizia 的技术分析,漏洞出在 V8 优化编译器对数组元素类型(elements kind)的处理逻辑中。

V8 中的数组有多种 elements kind,用于描述数组中存储的元素类型:

  • PACKED_SMI_ELEMENTS:数组中存储的都是小整数(SMI,Small Integer)
  • PACKED_ELEMENTS:数组中存储的是普通对象引用
  • HOLEY_*:数组中存在空洞(未赋值的索引)

不同 elements kind 的数组在内存布局上完全不同。PACKED_SMI_ELEMENTS 数组直接存储整数值,而 PACKED_ELEMENTS 数组存储的是指向对象的指针。如果引擎错误地将一个 PACKED_ELEMENTS 数组当作 PACKED_SMI_ELEMENTS 来读取,就会把对象指针当作整数来解释——这就是类型混淆。

CVE-2026-85046 的具体触发条件是:V8 优化编译器在处理特定的数组操作序列时,错误地允许一个初始化为 PACKED_ELEMENTS 的数组接收 PACKED_SMI_ELEMENTS 的 Map(V8 中描述对象布局的元数据结构)。这个 Map 不匹配打破了内存安全:

读原语(信息泄露):当引擎从数组中读取元素时,它会参考当前 Map 来决定如何解释内存。如果一个 PACKED_ELEMENTS 数组被错误地标记为 PACKED_SMI_ELEMENTS,读取操作会把对象指针直接当作 SMI 整数返回。由于 V8 的 SMI 表示会去掉低位标签位,攻击者可以通过这个原语泄露堆上对象的地址,从而绕过 ASLR。

写原语(任意写入):反过来,写入操作会把攻击者提供的整数直接写入数组槽位,而不会进行对象指针的类型检查。攻击者可以利用这个原语向任意内存地址写入受控内容——通常是覆盖某个对象的虚函数表指针或代码指针,最终劫持控制流。

整个利用链的典型流程是:

  1. 构造触发类型混淆的 JavaScript 代码,让优化编译器生成错误的机器码
  2. 利用读原语泄露堆地址,确定关键对象在内存中的位置
  3. 利用写原语覆盖对象的元数据或函数指针
  4. 劫持控制流,在渲染进程中执行 shellcode
  5. (可选)配合沙箱逃逸漏洞突破渲染进程沙箱,获取系统级权限

在野利用情况

Google 在 2026 年 9 月 3 日发布 Chrome 稳定版安全更新时明确表示:”Google is aware that an exploit for CVE-2026-85046 exists in the wild.”(Google 已知晓 CVE-2026-85046 的 exploit 存在于野外。)

这是 2026 年 Chrome 修复的第 6 个零日漏洞。浏览器零日漏洞在野利用通常与水坑攻击(watering hole)或定向钓鱼攻击相关——攻击者在特定网站上植入恶意 JavaScript,当目标用户使用未修复的 Chrome 访问时,自动触发漏洞并执行恶意代码。

对于普通用户来说,这类漏洞的风险在于:不需要下载任何文件、不需要启用任何插件、甚至不需要点击任何按钮,只需要打开一个恶意网页就可能被入侵。

修复与缓解

Chrome 152.0.7977.82 及以上版本已修复此漏洞。修复的核心是在优化编译器中增加对数组 elements kind 转换的校验,确保 PACKED_ELEMENTS 数组不会错误地接收 PACKED_SMI_ELEMENTS 的 Map。

用户侧缓解措施:

  • 立即更新 Chrome 到最新版本(设置 → 关于 Chrome,自动检查更新)
  • 启用 Chrome 的站点隔离(Site Isolation,默认已启用)
  • 不要访问不可信的网站,尤其是通过即时通讯软件收到的不明链接
  • 保持操作系统更新,减少沙箱逃逸漏洞的可用攻击面

企业侧建议:

  • 通过组策略或 MDM 强制 Chrome 自动更新
  • 监控 Chrome 版本分布,确保没有终端长期停留在旧版本
  • 部署网络层威胁检测,关注已知的浏览器漏洞利用工具包(exploit kit)流量特征

参考链接