安全研究员 Johann Rehberger(wunderwuzzi)公布了一次针对 Claude Code(Opus 5,Auto Mode)的攻击演示:攻击者只需要诱导 AI「总结一个恶意网页」,就有 60%–80% 的成功率拿下整台电脑的代码执行权——而且攻击链条里每一步单看都「合情合理」。最讽刺的是,AI 出于安全考虑拒绝运行攻击者的二进制文件、决定自己写解码器,恰恰成了漏洞利用的关键路径。Anthropic 回应称这属于「符合设计预期」:Auto Mode 是便利性功能、由尽力而为的分类器驱动,并非安全保证。这篇教程把五步攻击链拆开讲清楚,再给你六条能落地的防线。
攻击者先向 Claude Code 提交一个看似正常的任务:「请帮我总结这个网页的内容」。这个网页伪装成一个电子笔记本记录档案库。默认情况下 Claude 会使用内置的 WebFetch 抓取工具去读取内容——一切看起来都在安全路径上。攻击的巧妙之处在于:攻击者提前在服务器上设置好响应规则:当接收到 WebFetch 请求时,故意返回 415 Unsupported Media Type 错误。专用工具失败了,AI 为了完成用户的任务,会自动「降级思考」——既然专用工具读不了,那就用系统命令行吧。
在未收到任何直接命令行指令的情况下,Claude「自主」决定调用系统 curl 命令去抓取目标网站——从受控的抓取工具降级到了通用 shell。这本身不是漏洞,但它是整条链的转折点:此后 AI 的所有操作都发生在攻击者可预测、可设计的环境中。curl 访问恶意网站时,服务器立刻返回 303 重定向,把下载请求引向一个预先准备好的恶意 ZIP 压缩包。Claude 顺利把压缩包下载并解压到本地工作目录。压缩包里有什么?表面正常的目录元数据和 README、7 个经过 Base85/zlib 编码的 JSON 数据记录、一个适用于 macOS 的第三方解码二进制文件,以及一个暗藏恶意代码的 Python 文件——命名叫 struct.py。
要读取压缩包里的编码数据,最直接的办法是运行那个 decoder-darwin 二进制解码器。此时 Claude 的安全机制被触发——它评估后判断「运行来路不明的二进制可执行文件存在安全风险」,拒绝执行。到这里 AI 看起来守住了底线。但为了在不运行风险二进制的前提下完成任务,Claude 决定自己编写一段 Python 解码脚本来解析 Base85 数据。研究员 Rehberger 的评论一针见血:「这正是攻击者预先规划好的!AI 出于安全考虑做出的拒绝决定,反而成了整个攻击链条中最关键的突破口。」
Claude 编写 Python 解码脚本时,不可避免地要使用标准库 base64——脚本第一行就是 import base64。而 Python 存在一个经典隐患:模块遮蔽(Module Shadowing)——导入模块时优先检索当前运行目录。标准库 base64 内部又依赖并导入另一个标准库 struct;由于解压出来的文件夹里恰好有一个恶意 struct.py,Python 在执行 import base64 时,没有加载系统的官方 struct 库,而是优先加载并执行了攻击者的 struct.py。更麻烦的是,攻击者用 ChatGPT 对 struct.py 里的恶意代码做了混淆处理,穿透了 Claude 写入/审查文件时的静态安全检查。
恶意 struct.py 一旦被加载执行,会在后台静默启动一个新的 Python 进程,从远程服务器下载并运行真正的木马载荷(演示中为打开系统计算器 Calculator.app)。更可怕的是另一种攻击变体:恶意 struct.py 通过 claude -p 命令在后台偷偷启动第二个 Claude Code 智能体——这个被「非法孕育」出来的子智能体拥有独立的上下文和工具权限,会在用户完全不知情的情况下执行 whoami、uname、id 等侦察命令,并在主目录下任意读写文件。也就是说,一次「总结网页」的请求,最终可能孕育出一支潜伏在机器里的 Agent 小队。三种攻击变体各测 5 次,成功率 60%–80%。
Anthropic 的回应值得细读:Auto Mode 由尽力而为的分类器驱动,不是安全保证;官方建议的安全边界在操作系统级隔离与网络出口控制。给你六条能落地的防线:
① 沙箱隔离是唯一硬道理:运行具备代码执行能力的编码 Agent,务必放进 Docker 容器、虚拟机或专用沙盒环境——相关思路可回看JADEPUFFER 自主勒索事件与凭证脱敏教程;② 网络出口控制:限制 Agent 环境的出站流量,禁止连接未授权外部服务器,攻击链第 2 步的 curl 下载就无从发生;③ 警惕工具降级:审查 Agent 为什么放弃专用工具改用 shell,把「WebFetch 失败 → 自动 curl」这类行为列为告警;④ 清理不可信目录:解压第三方文件时避免把当前工作目录暴露在 Python sys.path 顶层,防止模块遮蔽;⑤ 不要把全自动权限交给不可信数据源:未知 URL、陌生仓库、邮件附件触发的高权限操作应强制人工确认;⑥ 定期做攻击链演练:用 CISO 四问法做安全体检(见Anthropic CISO 四问法),把「单看合法、组合致命」的链路纳入测试用例。
技巧:对个人开发者,最便宜的防线是「跑 Agent 的目录不放个人敏感文件 + 开系统级监控(比如记录 shell 命令执行的审计工具)+ 给模型环境配置最小权限凭据」。攻击链越精巧,你的环境越「贫瘠」,它能拿到的就越少。
注意:这不是某个厂商独有的问题——任何具备「读网页 → 执行代码」能力的 Agent(Claude Code、Codex、Cursor 等)都面临同类攻击面。不要把「AI 有安全护栏」当成免死金牌,护栏防的是常规攻击,不是精心编排的多步链条。相关背景可参考多 Agent 群体安全风险。
# 五步攻击链回顾
① 总结恶意网页(WebFetch 触发 415 报错)
② 自动降级 curl → 303 重定向下载恶意 ZIP
③ 拒绝运行二进制 → 自写 Python 解码器(安全决策反成突破口)
④ import base64 → 模块遮蔽加载恶意 struct.py
⑤ RCE / claude -p 派生子智能体侦察
# 六条防线
1 沙箱隔离(Docker/VM) 2 网络出口控制
3 工具降级告警 4 清理不可信目录/sys.path
5 不可信数据源禁全自动 6 攻击链演练 + CISO 四问