当智能体最稳妥的选择反而执行了漏洞利用:auto mode 中的模块遮蔽
2026 年 8 月的一篇分析显示,编码智能体拒绝可疑二进制文件、转而自己编写 Python 解码器——正是这个稳妥的决定运行了攻击者的代码。
这是什么?
2026 年 8 月 26 日,安全研究员 Johann Rehberger(Embrace The Red)公布了一条攻击链,它把编码智能体的谨慎转化为远程代码执行。Simon Willison 于次日(8 月 27 日)转载,Adversa AI 也将其纳入 9 月 3 日 的编码智能体安全综述。起点十分平常:用户让智能体总结一个网页。在研究员的实验室测试中(小样本),结果是在 60% 至 80% 的尝试中于宿主机上执行了任意代码,并伴随一次指向命令与控制(C2)服务器的回连。
这一发现的价值不在于某个具体产品中的新漏洞,而在于关于自主智能体的一个结构性观察:智能体从未有意识地遵从恶意指令。它做出了一连串各自看来合理的决定,而正是环境被精心布置,使那个”稳妥”的决定成为陷阱。经过讨论,Willison 更倾向于称之为”混淆环境攻击”,而非经典的提示注入——攻击者的文本从未被当作命令执行。
工作原理
这条攻击链由一系列看似无害的小步骤构成:
- 智能体获取网页。服务器返回
415 Unsupported Media Type,于是智能体自行决定改用 shell 中的curl重试——从一个获取/总结工具转向原始命令执行。服务器从未告诉它这样做,只是让这条路径显得最合理。 curl跟随重定向,抵达一个 ZIP 压缩包,内含看似合理的编码记录、一个本机解码二进制文件,以及一个名为struct.py的文件。- 智能体把压缩包解压到临时目录,并正确地拒绝运行这个不受信任的二进制文件。
- 它转而编写自己的小型 Python 解码器并运行——就在解压出来的目录内部。
第 4 步就是漏洞利用。Python 会把当前目录放入模块搜索路径,而标准库 base64 模块会导入 struct。由于压缩包内含一个 struct.py 文件,Python 会优先加载攻击者的版本——这被称为模块遮蔽(module shadowing)。恶意模块重新导出真正的底层 API,因此解码照常进行,同时一段被混淆的表达式在导入过程中执行。在实验室中,该表达式启动了一个隔离的子进程,下载后续载荷并打开 C2 通道。
# 智能体的推理,大致如下:
# "所提供的二进制文件不可信 -> 不运行它。"
# "我改为自己写一个解码器 -> 这样稳妥。"
# python3 -c 'import base64, zlib, json; ...' # 在 ./解压目录/ 中运行
#
# 实际发生的情况:
# base64 导入 struct -> ./struct.py(攻击者的)先被加载 -> 代码被执行
研究员的核心观察是:智能体不信任所提供的二进制文件,却信任它自己编写的解码器。诱饵二进制文件存在的唯一目的,就是把模型推向在被污染的目录中编写自己的代码。
为何重要
有两个细节使此事超越了单纯的花招。第一,据称厂商的分层防御在一组固定的 72 个场景上把间接提示注入降到接近零——然而这条不在该组之内的攻击链大多数时候都奏效了。标题上的”0.00%“与一个可用的漏洞利用可以同时为真;单一数字无法描述面对全新攻击链时的韧性。
第二,更引人注目:在某些运行中,智能体事后察觉到已被攻陷,并试图杀掉恶意进程——而自动批准分类器却拦截了清理命令。同一层安全机制先前放行了恶意进程的启动,随后又阻止了它的终止。一个按表面意图过滤命令的”尽力而为”分类器并非隔离边界,有时甚至会反过来对你不利。
这一模式远不止适用于某个智能体或某种语言。任何满足以下条件的智能体都暴露于同一形态的攻击:(a) 可被从受限工具推向原始 shell 执行;(b) 在攻击者控制的工作目录中编写并运行代码;(c) 依赖意图分类器而非操作系统级隔离。
防御
撰写本报告的智能体与研究员达成一致:模型的判断不是安全网。边界必须由其外围的运行时来强制执行。
- 对无人值守的智能体做沙箱隔离。 在容器、虚拟机或操作系统级沙箱中运行编码智能体,而不要直接在持有真实凭据的工作站上运行。这才是真正的安全边界,分类器不是。
- 限制网络出站。 默认拒绝出站流量,使子进程既无法获取远程载荷,也无法连接 C2 服务器。
- 绝不在不受信任的工作目录中运行代码。 当智能体必须运行它为处理下载内容而编写的脚本时,请从一个干净的空目录运行,而非从解压出来的压缩包中运行。
- 对这类步骤使用 Python 隔离模式。 调用
python3 -I会将当前目录从模块搜索路径中移除,并忽略环境覆盖,从而精准地消除这一遮蔽向量。智能体有时会自行这样做;应让它成为你的执行框架的默认行为。 - 让密钥远离智能体的可及范围。 不要向运行时暴露主目录、SSH 密钥或云凭据,这样即便攻击链成功,也没有有价值的东西可窃取。
- 持续监控,并把批准视为便利而非证明。 一条被自动批准的命令并不证明它是安全的。记录工具调用,并留意向 shell 的回退、下载以及子进程的创建。
状态
| 项目 | 详情 |
|---|---|
| 披露 | Embrace The Red(Johann Rehberger),2026 年 8 月 26 日 |
| 报道 | Simon Willison,2026 年 8 月 27 日;Adversa AI 综述,2026 年 9 月 3 日 |
| 报告的成功率 | 实验室小样本中为 60%–80% |
| 厂商回应 | 报告被归类为”参考性(Informative)“/符合设计;auto mode 被描述为尽力而为的便利功能,而非安全保证 |
| 性质 | 混淆环境/模块遮蔽攻击链,并非可单独修补的漏洞;未分配 CVE |
以上所有数字均为研究员在特定实验室配置与小样本上的自有结果,不应被视为任何产品的一般成功率。