GuardFall:编码智能体的命令护栏检查的是被 shell 改写前的文本
GuardFall(Adversa AI,2026 年 6 月 30 日)利用一个存在数十年的错配,绕过了 11 个开源编码智能体中 10 个的安全过滤器:护栏检查命令的原始文本,而 bash 在执行前会先展开并改写它。
这是什么?
2026 年 6 月 30 日,Adversa AI 发布了 GuardFall,研究开源 AI 编码智能体如何判断一条 shell 命令是否可以安全执行。该公司测试了十一个流行的开源编码与计算机操作智能体,发现其中十个存在同样的弱点;只有一个——Continue——在设计上能够抵御。The Hacker News、SecurityWeek 和 SC Media 随后跟进报道。
这并非某个产品的孤立漏洞。Adversa 将其称为「一种危险的惯例和一类问题」——因此没有单一的编号可供追踪或修补。这些智能体通过将每条命令与危险模式黑名单进行比对来保护 shell 执行,比对的是原始文本。随后 shell 在执行前会改写同一段文本——去除引号、展开简写。过滤器与 shell 看到的是两串不同的字符串。这与数十年来推动 SQL 注入和经典 shell 注入的检查—执行错配如出一辙,如今在智能体运行时中重现。
它与 Microsoft 智能体 shell 拒绝名单绕过 是近亲:一份对命令的错误表示进行推理的黑名单。
工作原理
一个靠比对原始文本来防护的智能体,检查的是操作系统从不真正执行的那种表示。这种错配在去除引号时最为明显:一个监视破坏性删除命令的过滤器,对在两个字母之间插入空引号的变体看不出任何异常,因为对文本匹配器而言它们是不同的字符串。bash 会丢弃空引号,照样执行原始命令。
护栏检查: r''m -rf <路径> -> 无黑名单匹配(文本中不含 "rm")
bash 执行: rm -rf <路径> -> 引号被去除,真实命令得以运行
此处不复现任何可用的攻击载荷——要点在于结构,而这些 shell 特性早已是数十年的公开知识。同样的思路可以推广:藏在 base64 数据块中再管道送入 shell 的命令,或是通过恰当的参数被变得具有破坏性的普通、白名单内工具(文件查找器、磁盘工具)。往黑名单里加更多条目于事无补,因为护栏推理的是错误的对象。
必须同时满足两个条件,且都不罕见:
- 模型必须产出该命令。 直接要求删除一切通常会被拒绝,但同样的指令若藏在常规工作中——一个构建文件,或智能体在任务中途读取的某工具「文档」回复——就会作为普通步骤被产出。是间接提示注入提供了这份载荷。
- 智能体必须在无人值守下运行,开启了自动执行标志或关闭了容器沙箱——这两者在自动化流水线中都很常见。Adversa 的实测使用了 Claude Sonnet 4.6。
留有此缺口的十个工具是 opencode、Goose、Cline、Roo-Code、Aider、Plandex、Open Interpreter、OpenHands、SWE-agent 以及最初暴露该问题的 Hermes 项目。被调查工具合计约有截至 2026 年 5 月的 548,000 个 GitHub 星标。Adversa 针对生产版 Plandex 二进制文件完成了端到端演示,并发现同样的手法对另外八个也奏效。该公司将此描述为实验室研究;尚无公开利用的报告。
为什么重要
这些智能体以开发者账户的全部权限执行 shell 命令。让它指向一个被做过手脚的仓库或依赖,一条隐藏指令就能悄悄运行一条抹除文件、或触及该账户所能触及的一切的命令——SSH 密钥、云凭证、主目录中的任何东西。前提条件是开发者的日常习惯:克隆一个陌生项目,让智能体在其中工作。这使其成为一条可信的供应链路径,与 AutoJack 和 Agentjacking 属于同一族群:不可信内容变成智能体以其所有者权限执行的命令。共同的主线是:不可信文本在护栏理解 bash 究竟会做什么之前,就抵达了真正的 shell。
防御
持久的修复在于架构,而一个受测工具已经做出了示范。
-
防护被执行的命令,而非文本。 Continue 之所以顶住,是因为它在决定之前先按 bash 的方式读取命令:把字符串切分并展开为 shell 会产出的相同片段,检查真正会运行的内容,并保留一份被直接拦截的破坏性命令硬名单。Adversa 认为该设计可移植,估计重新实现约需两个工程师日。先解析再检查,绝不比对原始文本。
-
优先使用白名单而非黑名单。 一份「危险」模式的拒绝名单在 shell 改写面前是场必输之战。应放行一小组已知安全的命令,其余一律拒绝,并在展开之后评估。
-
压缩影响半径。 将
$HOME指向一个一次性目录,使~/.ssh、~/.aws等机密无法被触及,并保持容器沙箱开启。即便命令逃过护栏,也应落在无用之处。 -
不要在不可信输入上无人值守地运行。 除非任务确实无法为人类暂停,否则关闭自动执行标志(
--auto-exec、--auto-run、--auto-test、dangerously-skip-permissions),并且绝不在来自 fork 的拉取请求上运行智能体——那是从攻击者文件通往你机密的最短路径。 -
将仓库内附带的配置视为不可信代码。 提交在仓库中的配置文件(例如
.aider.conf.yml)可能在第一次被接受的编辑时就左右智能体。在智能体据其行动之前先审阅它。
状态
| 项目 | 来源 | 日期 | 说明 |
|---|---|---|---|
| GuardFall 披露 | Adversa AI | 2026-06-30 | 类级惯例;未分配单一 CVE |
| 测试范围 | Adversa AI | 2026-06 | 11 个开源智能体;10 个存在漏洞,Continue 可抵御 |
| 端到端演示 | Adversa AI | 2026-06 | 生产版 Plandex 二进制;实验室研究,无公开利用 |
| 相关绕过 | LLM Hacking | 2026 | shell 拒绝名单绕过、AutoJack、Agentjacking——同一检查/执行错配 |
诚实的定性不是「某个 AI 工具有个漏洞」,而是:一个检查命令文本的护栏,无法保护一个在执行前先改写该文本的 shell。 在智能体像 shell 那样解析命令之前,防御要靠你自己:检查被执行的命令、优先白名单、隔离运行时,并在任何不可信之处保留人工把关。
Sources
- → https://adversa.ai/blog/opensource-ai-coding-agents-shell-injection-vulnerability/
- → https://thehackernews.com/2026/06/guardfall-exposes-open-source-ai-coding.html
- → https://www.securityweek.com/decades-old-bash-tricks-expose-ai-coding-agents-to-supply-chain-attacks/
- → https://www.scworld.com/brief/shell-injection-flaw-found-in-10-of-11-open-source-ai-agents