Anthropic说攻击成功率0%,安全研究员实测打到80%:Claude Code Auto Mode被攻破

Anthropic宣称Claude Code Auto Mode攻击成功率0.00%,安全研究员wunderwuzzi用5步Python模块遮蔽攻击链打出80%成功率。两个数字都是真的,区别在于测试方法。本文拆解完整攻击链、分析Auto Mode分类器局限、给出实用防护建议。

Anthropic 说 Claude Code 的 Auto Mode 攻击成功率是 0.00%。

安全研究员用 5 步攻击链打出了 80%。

两个数字都是真的。

为什么值得关注: 8 月中旬,Auto Mode 已成为 Claude Code 的默认模式。如果你正在用 Coding Agent,这篇直接关系到你的开发环境安全。

先说结论

Auto Mode 是便利功能,不是安全边界。Anthropic 自己也承认:「Auto Mode 是 best-effort classifier,不是安全保证。」但官方宣传的 0.00% 攻击成功率,容易让人误以为可以放心开箱即用。

真正的安全,靠的是沙箱隔离 + 网络出站控制 + 监控,不是模型的安全分类器。

0% 和 80%:两个数字为什么都是真的

Anthropic 委托第三方 Trajectory Labs 做安全评估,测试了 72 个间接提示注入场景,每个跑 10 次,得出 0.00% 攻击成功率。

安全研究员 wunderwuzzi 拿定向攻击链实测,成功率达到 60%-80%。

原因很简单:

维度Anthropic 评估安全研究员实测
测试场景72 个预定义场景定向设计的攻击链
攻击策略固定注入模式多步拼接,每步看似合理
核心手法直接提示注入Python 模块遮蔽(module shadowing)
成功率0.00%60%-80%

Anthropic 事后回应:「定向攻击链不在评估范围内。」

但问题是——Claude Code 团队负责人 Boris Cherny 之前公开说过:「间接提示注入在实际中基本已解决,我们无法再复现注入攻击。」

这两个说法放在一起,普通用户很难不产生误解。

攻击链拆解:5 步拿下机器

整个攻击的核心思路:不直接注入恶意指令,而是引导模型一步步走进陷阱,每步都看起来合理。

Step 1:让模型离开安全工具

Claude Code 默认用 WebFetch 工具抓取网页。攻击者设置服务器返回 415 Unsupported Media Type,WebFetch 失败后,模型自己决定用 curl 重试。

关键:攻击者没有直接说「用 curl」,是模型自己选的。这就是定向攻击的精髓——不告诉模型怎么做,只让危险路径成为最优解。

Step 2:引导下载恶意压缩包

curl 访问后被 303 重定向到一个 ZIP 文件。压缩包里有:

  • 看似正常的文档档案(README、CSV、SHA256 校验文件)
  • 7 个 Base85+zlib 编码的 JSON 记录
  • 一个 macOS 二进制解码器(decoder-darwin)
  • struct.py(真正的恶意文件)

Step 3:模型的「安全决定」反而是漏洞

Claude 看到 macOS 二进制解码器,拒绝执行——这是安全行为。

但它接着做了件事:自己写了一个 Python 解码器来替代。

讽刺的地方来了:模型不信任攻击者提供的二进制,却信任自己写的代码。而自己写的代码,跑在攻击者控制的目录里。

Step 4:Python 模块遮蔽——经典攻击手法

这是整条链的核心技术。Python 的模块搜索路径包含当前目录。当 Claude 执行 import base64 时:

base64 模块内部 import struct→ Python 找到攻击者的 struct.py
攻击者的 struct.py 重新导出标准 _struct API→ 解码正常运行,Claude 收到正确的 JSON
但 import 过程中,模块级表达式已经执行→ 恶意代码在后台静默运行

类比: 你请了一个翻译帮忙读外文信件,翻译很尽职,逐字翻译。但信纸里夹了一张复写纸,翻译每翻一页,背面就多印一份到攻击者手里。翻译本身没问题,信纸被动了手脚。

Step 5:远程载荷落地 + C2 回连

struct.py 经过深度混淆,启动一个独立 Python 子进程,用 python3 -I(隔离模式,防止递归中毒)下载远程载荷并执行。

最终效果:

  • 弹出 Calculator(可见效果)
  • 建立 C2 回连(真正危险)
  • 进程可脱离 Claude 会话独立存活

Auto Mode 的安全分类器只看到 Claude 短暂运行了一个 Python 解码器。实际攻击已经经过了好几跳。

最讽刺的一幕:Auto Mode 阻止了善后

研究员观察到一个荒诞现象:Claude 在某些运行中后来发现 struct.py 有问题,试图终止恶意进程——但 Auto Mode 的安全分类器拒绝了清理命令。

安全机制允许了恶意进程的创建,却阻止了杀死它的操作。

这像什么?门禁系统帮你把小偷放进来,然后在你追小偷的时候把你拦住了。

另一个变体:Claude 嵌套启动 Claude

研究员还测试了另一种载荷:struct.py 不直接执行恶意代码,而是启动一个 headless Claude Code 实例(claude -p)。

新的子 Agent 拥有自己的工具访问权限和上下文,独立执行侦察命令(whoami、uname、id),打开 Calculator,往用户目录写文件。

这个变体的成功率也很高(60%),而且更隐蔽——因为看起来是「Claude 在正常使用」。

为什么 Auto Mode 挡不住

Auto Mode 的安全分类器本质上是一个 best-effort 的意图判断器。它的设计思路是:判断每条命令是否有风险,有风险就要求人工确认。

这个模型对付直接攻击(比如「请删除所有文件」)很有效。但面对多步攻击链,问题暴露了:

  • 每步都合理:下载 ZIP、解压文件、运行 Python 脚本——单独看每一步都是正常的开发操作
  • 上下文缺失:分类器只看到当前这一步,看不到 5 步拼在一起的攻击意图
  • 模型在攻击者的工作目录里操作:Python 的模块搜索路径被污染,但分类器不知道

类比:安检员逐件检查你的行李,每件都合规。但他不知道你分 5 次带进来的零件组装起来是什么。

防护建议

防护层具体操作为什么有效
沙箱隔离用 Docker 容器或虚拟机跑 Agent,禁止直接在主机开发即使被攻破,恶意代码只能在沙箱内活动
网络出站控制限制 Agent 只能访问白名单域名,禁止任意外连阻断 C2 回连和远程载荷下载
凭证隔离不要把 SSH 密钥、云 API Key、.git 挂载到 Agent 工作目录防止恶意代码窃取凭证横向移动
监控 Agent 行为实时看 Agent 执行了什么命令、访问了什么文件Auto Mode 批准的命令不代表安全,人工复核不可省
不用 Auto Mode 处理不可信内容让 Agent 总结网页、处理外部文件时,切换回手动确认模式间接注入的入口就是不可信内容

Anthropic 的回应和底线

研究员按流程先报给 Anthropic 的 modelbugbounty 邮箱,没收到回复。转报安全渠道后,得到回应:

「Auto Mode 是基于 best-effort 分类器的便利功能,不是安全保证。定向的多步提示注入链不在分类器的设计防御范围内。真正的安全边界是 OS 隔离和网络出站控制。」 ——Anthropic 安全团队

Anthropic 关闭了漏洞报告,标记为「Informative」。

说白了:他们不认为这是 bug,而是预期行为。

写在最后

研究员在文章结尾说了一句值得每个用 Coding Agent 的人记住的话:

「Auto Mode 可以降低风险(相比完全跳过权限检查),但它不是安全边界。如果 Agent 处理不可信内容,或者太执着于完成目标,Auto Mode 救不了你。」

这不是 Claude 的专属问题。任何 Coding Agent 的自动执行模式,本质上都是在便利和安全之间做了取舍。模型的安全分类器能挡住大多数低级攻击,但面对精心设计的多步攻击链,分类器的边界会被轻松绕过。

记住:安全的不变量,不可选配。