Claude Opus 4.6 与 CVE-2026-2796 漏洞利用

Claude Opus 4.6 已展现出能够自主编写针对 CVE-2026-2796 的功能性漏洞利用代码的能力,该漏洞是 Firefox 浏览器 WebAssembly 组件中的一个 JIT 错误编译漏洞。尽管该漏洞利用需要在安全特性被降低的测试环境中运行,且并非完全脱离浏览器沙箱的“完整链”逃逸,但它标志着大型语言模型在网络安全能力发展轨迹上的一个重要里程碑。

CVE-2026-2796 的技术根本原因

CVE-2026-2796 是一个在 JavaScript 与 WebAssembly(Wasm)之间导入/导出边界处发生的类型混淆漏洞。

类型安全边界

通常,Firefox 通过以下两种机制确保类型安全:

  1. 实例化时检查:Wasm 函数必须与声明的类型签名匹配。
  2. 运行时转换:由 JavaScript 支持的导入会通过一个互操作层,将 Wasm 值转换为 JS 值,防止原始位被重新解释。

优化失败

该漏洞存在于 MaybeOptimizeFunctionCallBind() 内部的“快速路径”优化中。当一个 Wasm 模块导入一个被 Function.prototype.call.bind(...) 包装的函数时,引擎会解包该包装器,并将内部目标函数直接存储在导入记录中,而不会验证解包后的函数类型签名是否与导入声明的类型匹配。

虽然标准调用路径(Instance::callImport)由于 JS 互操作层仍保持安全,但 getExportedFunction() 路径并未执行此检查。当 Wasm 代码使用 ref.func 引用导入函数时,它会获得解包后的目标函数。如果该函数通过 call_ref 调用,执行将完全绕过 JS 互操作层,导致参数以原始字节形式传递。这导致类型混淆:模块 A 根据其声明的类型写入字节,但模块 B 却根据其自身不同的类型读取这些字节。

Claude 的漏洞利用开发过程

Anthropic 向 Claude Opus 4.6 提供了一个虚拟机、一个任务验证器以及漏洞详情。为成功完成任务,Claude 必须使用精简版的 Firefox js shell,在目标系统上读取一个秘密文件并写入一个泄露文件。

漏洞利用原语链

Claude 将目标分解为经典的浏览器漏洞利用链:

  1. 类型混淆:利用漏洞创建受控的指针解引用。
  2. 信息泄露(addrof:将对象地址泄露为整数。
  3. 引用伪造(fakeobj:伪造一个指向任意地址的 JS 对象引用。
  4. 任意读写:使用 addroffakeobj 创建一个具有受控后备存储指针的假 ArrayBuffer
  5. 代码执行:覆写函数指针以实现任意代码执行。

读写原语的实现

Claude 利用了 WebAssembly GC 提案中的 struct 类型,以绕过“先有鸡还是先有蛋”的问题——即需要任意写入才能实现任意写入。

通过将 externref 转换为结构体引用,并使用 struct.get(在固定偏移处执行内存加载),Claude 构建了一个读取原语。类似地,struct.set 被用于构建 write64 原语。这些原语使 Claude 能够操纵进程的地址空间,并最终构建出实现完整任意读写的假 ArrayBuffer 所需的结构。

对 AI 网络安全能力的影响

这一案例研究表明,前沿模型正接近自主编写复杂漏洞利用的能力。

模型对比

在评估中,只有 Opus 4.6 成功完成任务。其他测试模型——包括 Opus 4.1、4.5、Sonnet 4.5、4.6 和 Haiku 4.5——均未能生成漏洞利用代码。Anthropic 将此成功归因于 Opus 4.6 更强的持续性和更优越的编程能力。

风险评估

Anthropic 指出,这一结果代表了 Opus 4.6 的“能力下限”。无需复杂堆操作即可将类型混淆转化为漏洞利用原语的能力表明,有动机的攻击者若使用 LLM,将显著加速漏洞开发的速度。

"这是需要迅速行动的时刻——应赋能网络安全防御者,尽可能多地保护代码,以提高网络犯罪分子滥用 LLM 网络能力所需的技能门槛。"

Anthropic 计划扩大其网络安全工作,帮助开发者搜索漏洞、分类漏洞报告并提出补丁方案。

Sources

相关