FlawOpen

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]
V8 sandbox / WebAssembly
V8 沙箱隔离渲染进程内由引擎管理的内存。CVE-2026-87491 通过破坏 WebAssembly 元数据越过该边界;这不同于渲染进程沙箱。[1], [3]
ALPC / WNF / privilege
ALPC 与 WNF 是涉及 CVE-2026-85880 的 Windows 内核机制。报道中的漏洞链获得了用于调试进程的 SeDebugPrivilege。[1], [4]

框架映射

BlueMoon 利用链阶段与修补决策

阶段 / CVE / 边界来源证实的内容防御措施
V8 JIT 类型混淆 — CVE-2026-85046Proofpoint 描述了比较器通过 fill() 修改 Array.prototype.sort 数组、导致元素类型假设失效的情况。Google 表示已有在野利用。安装 Chrome/Chromium 152.0.7977.82/.83(Windows/Mac)或 .82(Linux)或更高版本,并重启浏览器。Google 9 月 3 日的版本包含修复。
V8 沙箱逃逸 — CVE-2026-87491Proofpoint 报告称 WebAssembly 元数据损坏跨越了 V8 内存沙箱;该边界不同于渲染器进程沙箱。Google 表示已有在野利用。安装 Chrome/Chromium 153.0.8010.36/.37(Windows/Mac)或 .36(Linux)或更高版本,并重启浏览器。Google 9 月 8 日的版本包含修复。
Windows 内核本地提权 — CVE-2026-85880Proofpoint 描述了启用 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]

2026-09-08

Chrome Stable 在 Windows 和 Mac 的 153.0.8010.36/.37 以及 Linux 的 .36 中修复 CVE-2026-87491;微软在九月更新中修复 CVE-2026-85880。 Microsoft 确认 CVE-2026-85880 在 9 月 8 日 Windows 安全更新发布前已遭利用。[3], [4], [5]

攻击执行流程分解

步骤 1

观察到的投递方式

Proofpoint 观察到有针对性的鱼叉式网络钓鱼活动,其中包含指向漏洞利用工具包的链接。浏览器阶段要求收件人在存在漏洞的 Chromium 浏览器中打开该链接。[1]

步骤 2

V8 类型混淆 — CVE-2026-85046

Proofpoint 描述了一条优化后的 Array.prototype.sort 路径:比较器使用 fill() 修改数组时,可能使元素类型假设失效。由此产生的类型混淆是渲染器阶段的首个漏洞;Google 表示已有在野利用。[1], [2]

步骤 3

V8 沙箱逃逸 — CVE-2026-87491

Proofpoint 报告称,WebAssembly 模块元数据遭到破坏,从而跨越 V8 内存沙箱。这与 Chrome 渲染器进程沙箱是不同边界;Google 也表示已有在野利用。[1], [3]

步骤 4

Windows 内核本地提权 — CVE-2026-85880

Proofpoint 报告称,攻击通过 ALPC/WNF 内核路径在特定较旧 Windows 版本的渲染器中启用 SeDebugPrivilege。Microsoft 另行确认该漏洞在 2026 年 9 月 8 日安全更新发布前已遭利用。[1], [4]

步骤 5

逃出渲染器进程

结合浏览器阶段和受影响的 Windows 目标,报告中的链可通过 Windows 本地提权从渲染器进入浏览器父进程。下方 Python 示例只说明过期假设问题,并非该利用链。[1], [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)

工程与系统安全加固清单

参考来源