8 月中旬起,Anthropic 将 Claude Code 的 Auto Mode 设置为默认启动模式:这个模式用"安全分类器"取代了传统的人工审批弹窗,让代理可以在无人值守的情况下自主执行命令。Anthropic 还曾委托第三方评估并宣称,针对未见过的间接提示注入攻击,成功率已降至 0.00%。然而 8 月 31 日,安全研究员在 Hacker News 上公开了一项研究:通过一个看似人畜无害的"总结网站"请求,就能在 Auto Mode 下攻破 Claude Code Opus 5,实现任意代码执行(RCE),小样本攻击成功率高达 60%-80%。这一结果在社区引发激烈讨论,也让"提示注入已基本解决"的说法再次受到严峻挑战。
Auto Mode:分类器取代审批的便利化实验
Auto Mode 的设计初衷很直白:编码代理最烦人的地方就是频繁弹窗请求人工批准。Anthropic 用前置的安全分类器对每条拟执行的命令做风险评估,低风险命令直接放行,从而把"人机协作"变成"先放行、后追责"。这本质上是把安全责任从"审批环节"前移到"分类环节"——分类器一旦出现误判,就没有人工兜底。
Anthropic 的官方口径非常谨慎:Auto Mode 是一个由"尽力而为"的分类器支撑的便利功能,不是安全保证。官方文档明确写道,Auto Mode 不能替代在隔离环境中运行代理并监控其行为。但问题在于,默认开启后,普通用户很容易把"分类器放行了"误读成"这条命令是安全的"——这正是本次攻击能够成立的心理基础。
攻击链:七步从网页摘要到任意代码执行
研究者的攻击起点出乎意料地简单:让运行在 Auto Mode 下的 Claude Code 去"总结一个网站"。攻击者事先部署了一个恶意站点,并精心设计了一系列诱导步骤,使代理在完成"总结"这个合法目标的过程中,一步步走进陷阱。
完整攻击链共七步。第一步,恶意服务器对 WebFetch 请求返回 415 Unsupported Media Type 错误,诱导 Claude 放弃 WebFetch 改用 curl 抓取;第二步,curl 跟随 303 重定向,下载一个伪装成"笔记本记录目录"的恶意 ZIP 归档;第三步,归档内包含一个名为 decoder-darwin 的诱饵二进制,Claude 出于安全本能拒绝执行它;第四步是关键转折——Claude 决定自己写一个 Python 解码器来替代二进制,这看起来是完全安全的选择,却恰好打开了漏洞缺口;第五步,解码器在解压出的攻击者控制目录中运行,Python 会把该目录放进模块搜索路径;第六步,解码器导入 base64,而 base64 内部会导入 struct,于是加载了归档中精心放置的恶意 struct.py;第七步,恶意模块在导入时执行混淆代码,下载远程负载、建立 C2 回调并弹出计算器,RCE 达成。
技术核心:Python 模块遮蔽(Module Shadowing)
这次攻击能成功,一半功劳要记在 Python 语言本身的特性上。Python 的模块解析规则是:执行脚本所在目录优先于标准库路径。也就是说,只要攻击者能让代理在一个受控目录下运行脚本,再放一个与标准库同名的 .py 文件,就能让 import 语句加载恶意代码,而代理和用户对此毫无感知。
# 恶意目录结构示意
WIC-notebook-catalogue/
struct.py # 与标准库同名的恶意模块
decoder-darwin # 诱饵二进制(预期被拒)
README.txt # 诱导性说明
MANIFEST.sha256 # 伪装的校验清单
更危险的是,这种攻击对人工审查也不友好:恶意代码不会出现在任何工具调用或输出中,它只是静静地躺在磁盘上,等 Python 的导入机制把它激活。研究者还演示了代理嵌套变体:恶意 struct.py 可以启动第二个无头 Claude Code 实例(claude -p),子代理拥有独立的工具访问与上下文,可进一步执行侦察命令,让攻击像蠕虫一样扩散。评论区的开发者指出,Kimi、GLM、GPT、DeepSeek 等模型同样会可靠地运行 Python,这类攻击并非 Claude 独有——Python 生态的"遮蔽"设计缺陷放大了全体编码代理的暴露面。
基准盲区:0.00% 从何而来
在 HN 讨论中,最受质疑的是 Anthropic 的"0.00% 成功率"说法。事实上,该数字来自包含 72 个固定场景的基准测试,每个场景运行 10 次,而本研究的攻击链恰恰不在测试集中。评论者一针见血地指出:这是覆盖率数据,不是安全性数据——不在集合中的攻击永远测不到,就像保质期测试不会覆盖你没测过的细菌。
Anthropic 的回应同样耐人寻味:研究者两次提交漏洞报告后,最终被关闭为 "Informative"(仅供参考),判定行为"按设计工作"(working as designed)。Anthropic 认为,分类器无法阻止由良性步骤组合而成的定向攻击链,真正的安全边界是操作系统隔离与网络出口控制。但讽刺的是,研究者还发现 Auto Mode 存在一个设计缺陷:在部分运行中,Claude 发现被入侵并试图终止恶意进程,分类器却拒绝了这条清理命令——安全机制本身成了失败的一部分,这让"按设计工作"的说辞显得更加苍白。
Agent 时代的防御清单
这场攻防演示的核心教训只有一条:不要信任模型输出,也不要信任给模型放行的分类器。研究者给出的建议非常务实:第一,在容器、虚拟机或操作系统沙箱中运行无人值守的编码代理;第二,严格限制网络出口,让恶意负载无处回连;第三,持续监控代理行为,而不是让它在后台静默运行;第四,不要向代理暴露主目录、SSH 密钥与云凭证;第五,把代理当作"不可信实习生"分级授权——在专用机器上放开,在个人工作站上保持谨慎。
对普通用户而言,最值得记住的是:Auto Mode 的放行不等于命令安全。升级 Claude Code、阅读更新日志之外,更重要的是改变工作习惯——代理修改过的代码要 diff 审查,代理新建的可执行文件要警惕,代理下载的压缩包不要轻易解压运行。正如评论者建议的:永远不要把你自己的修改和 Agent 的修改混在一起,Agent 永远从干净的仓库开始工作。
结语:提示注入的终结只是幻觉
"Ignore previous instructions"式的经典提示注入时代确实接近尾声,但"已解决"的说法具有误导性——解决提示注入,本质上等同于解决大部分对齐问题,而这远未完成。本次研究揭示的攻击路径,本质上是"间接提示注入 + 工具滥用 + 语言生态缺陷"的复合体,它提醒我们:随着编码代理从辅助工具变成自主执行者,攻击面也从"聊天窗口"转移到了"工具链与运行时环境"。在分类器、沙箱与人工审查形成真正的纵深防御之前,任何"0.00%"的数字都值得怀疑。