flawopen.com/Incidents/bluemoon-chrome-v8-windows-alpc-september-2026
●
BlueMoon · CVE-2026-85046 · September 2026 · 高危
安全研究 · FlawOpen
BlueMoon:三处漏洞跨越 Chrome 与 Windows 的隔离边界
Proofpoint 报告了有针对性的 BlueMoon 攻击活动,串联了 CVE-2026-85046(V8 类型混淆)、CVE-2026-87491(V8 沙箱逃逸)和 CVE-2026-85880(Windows 内核本地提权)。Google 和 Microsoft 均确认漏洞在修复发布前遭到利用;Chromium 浏览器和 Windows 必须分别更新。[1], [2], [3], [4]
💡 通俗易懂的原理解析 (ELI5)
想象分拣员先确认每个箱子里都是书,却允许访客在按旧标签分类前调换内容。第一次失误打开了上锁的分拣区;第二处失误打开栅栏,第三处篡改大楼门禁卡。每道锁都得单独修。[1]
核心概念与专有名词
V8 / type confusion- V8 执行 JavaScript。
CVE-2026-85046涉及 Array.prototype.sort 的优化假设;fill()改变元素类型后,原假设失效。[1], [2]
框架映射
- 本指南所述弱点的 CWE 参考: CWE-122 CWE-787 CWE-843
- CISA KEV — 收录日期 2026-09-04 — CVE-2026-85046
BlueMoon 利用链阶段与修补决策
| 阶段 / CVE / 边界 | 来源证实的内容 | 防御措施 |
|---|---|---|
V8 JIT 类型混淆 — CVE-2026-85046 | Proofpoint 描述了比较器通过 fill() 修改 Array.prototype.sort 数组、导致元素类型假设失效的情况。Google 表示已有在野利用。 | 安装 Chrome/Chromium 152.0.7977.82/.83(Windows/Mac)或 .82(Linux)或更高版本,并重启浏览器。Google 9 月 3 日的版本包含修复。 |
V8 沙箱逃逸 — CVE-2026-87491 | Proofpoint 报告称 WebAssembly 元数据损坏跨越了 V8 内存沙箱;该边界不同于渲染器进程沙箱。Google 表示已有在野利用。 | 安装 Chrome/Chromium 153.0.8010.36/.37(Windows/Mac)或 .36(Linux)或更高版本,并重启浏览器。Google 9 月 8 日的版本包含修复。 |
Windows 内核本地提权 — CVE-2026-85880 | Proofpoint 描述了启用 SeDebugPrivilege 的 ALPC/WNF 路径,并列出工具包瞄准的较旧 Windows 版本。Microsoft 确认该漏洞在 9 月 8 日更新前遭利用。该目标列表并非完整的受影响版本清单。 | 安装当前受支持的 Windows 安全更新,包括 2026 年 9 月 8 日更新或更新版本;通过 MSRC 查找操作系统对应的软件包并完成所需重启。Windows 与 Chrome 分别修补。 |
事件演进时间线
2026-08-28
Proofpoint 首次观察到 BlueMoon 活动。[1]
2026-09-03
Chrome Stable 在 Windows 和 Mac 的 152.0.7977.82/.83 以及 Linux 的 .82 中修复 CVE-2026-85046。[2]
攻击执行流程分解
步骤 1
观察到的投递方式
Proofpoint 观察到有针对性的鱼叉式网络钓鱼活动,其中包含指向漏洞利用工具包的链接。浏览器阶段要求收件人在存在漏洞的 Chromium 浏览器中打开该链接。[1]
步骤 2
步骤 3
步骤 4
源代码对比:漏洞与安全实现
安全的 Python 教学示例,用来说明失效假设,并非 V8 源码、利用程序或厂商补丁。无害的回调可在首次检查后把整数改成文本。改进版在回调后验证有界快照,使用期间不再调用回调。脆弱示例中的 Python 只会抛出异常,并不模拟本机内存破坏。此同步示例仅使用可信、受界限约束的回调。
存在漏洞的实现
def numeric_total(values, callback):
if type(values) is not list or len(values) > 1024:
raise ValueError("Invalid batch")
if any(type(x) is not int for x in values):
raise ValueError("Expected integers")
callback(values)
# 回调可能已使类型假设失效。
return sum(values)
加固后的安全修复
def numeric_total(values, callback):
if type(values) is not list or len(values) > 1024:
raise ValueError("Invalid batch")
callback(values)
if len(values) > 1024:
raise ValueError("Invalid batch")
snapshot = tuple(values)
if any(type(x) is not int or abs(x) > 1_000_000
for x in snapshot):
raise ValueError("Expected bounded integers")
# 使用已验证的快照,不再调用回调。
return sum(snapshot)
工程与系统安全加固清单
- ✓分别盘点浏览器和 Windows 版本;安装适用的厂商更新,并核实浏览器重启及系统重启。[2], [3], [4], [5]
- ✓加入回调变更测试:元素类型变化或批次过大必须在优化处理前被拒绝;正常整数仍须得到正确总和。[1]
- ✓审查验证和使用之间会调用可控代码的优化路径。重新验证条件,或使用已验证的不可变快照。[1]
- ✓分别跟踪每个 CVE。Chrome 将
CVE-2026-85046评为高危、CVE-2026-87491评为中危;微软将CVE-2026-85880评为高危(CVSS 7.8,CWE-122)。平台缓解措施不能替代修复。[2], [3], [4], [5]