返回
快讯

GuardFall 让开源 AI 编码代理暴露于老旧 shell injection 风险

Adversa AI 发现名为 GuardFall 的 bypass,可利用 bash 处理命令前后的差异,绕过多数 open-source coding agents 的安全检查。该问题影响自动执行场景,可能让恶意仓库中的指令借代理权限执行破坏性命令或窃取敏感资料。

本应阻止 AI coding agent 执行危险命令的安全检查,可以用一个已经公开了几十年的 shell trick 直接绕过去。

来自 Adversa AI 的新研究把这个 bypass 命名为 GuardFall,发现它可用于该公司测试的 11 个 popular open-source coding and computer-use agents 中的 10 个。只有一个,“Continue”,是专门为防御它而构建的。

为什么这很重要?这些 agents 会用你的完整账户权限来运行 shell commands。只要把它指向一个设有陷阱的 repository 或 software package,隐藏指令就可能悄悄运行某个 command,删除文件,或者窃取你的账户能接触到的 secrets,从 SSH keys 和 cloud credentials,到你 home folder 里的一切。

它是怎样绕过 guard 的?

这些 agents 里面,大多数会先把每个 command 跟危险 patterns 的 blocklist 做检查,然后才运行。漏洞在于,它们检查的是 command 的 plain text,而 bash 会在真正执行前重写这些 text。shell 会去掉 quotes 并展开 shortcuts,所以 filter 和 shell 最后看到的是两样不同的东西。

最简单的例子:一个 filter 在看 rm 时会觉得没问题,因为 r''m 对 text matcher 来说是不同的 string。但 Bash 会移除空 quotes,然后照样运行 rm。

同样的思路还能用在其他形式:比如把 command 放进 base64 里,再 pipe 到 shell,或者把 find 和 dd 这类普通 tools 用正确的 flag 变成 destructive。

研究人员把这称为不是 bug,而是“a dangerous convention and a class of problems”,这就是为什么再加更多 blocklist patterns 也解决不了它。这里没有单一的 CVE 可以追踪或 patch。

一次 attack 要真正打中,需要两件事同时成立,而且两者都不算罕见。

第一,AI 必须生成那个恶意 command。直接粗暴地说“run rm -rf”通常会被拒绝,但同一个 command 如果藏在看起来正常的工作里,比如 build file 或某个 tool 的“documentation”回复里,就会作为常规步骤被输出。

第二,agent 必须在独立运行状态下,auto-execute flag 已经打开,或者它的 container sandbox 被关掉,而这两种在 automated pipelines 里都很常见。现场测试使用的是 Claude Sonnet 4.6。

另外十个 tools 都留下了这个缺口:opencode、Goose、Cline、Roo-Code、Aider、Plandex、Open Interpreter、OpenHands、SWE-agent,以及 Hermes project,后者是这个 bug 最早出现并记录在 Hermes 自己 issue tracker 里的地方。

Adversa 调研中的这些 tools 截至 2026 年 5 月合计大约有 548,000 个 GitHub stars。Adversa 已经针对生产环境的 Plandex binary 完成了端到端完整 attack 演示,而同样的形态也能用于另外八个工具。该公司把这项工作描述为 lab research;目前没有公开 exploitation 的报告。

Continue 这个唯一扛住的 agent,是通过先按 bash 真正会做的方式去读 command,再决定要不要执行:它会把 command 拆成和 shell 一样的 pieces,检查实际会运行什么,并且保留一份 hard list,里面的 destructive commands 会被直接阻止。

这层保护对 Continue 默认 editor mode 里的每一个 payload 都有效。不过它的 command-line auto-run mode 就比较弱:有几个 payload 成功溜过去了,虽然最 destructive 的那些仍然撞上 hard block。Adversa 说这个设计是 portable 的,并表示由有经验的 engineer 重新实现,大约两天就能完成。

现在该做什么

下面这些 quick fixes 都不是完整答案,但在正确的 guard 到位之前,它们可以减少暴露面:

把 agent 运行时的 $HOME 指向一个一次性 folder,这样像 ~/.ssh 和 ~/.aws 这样的 secrets 就够不到了。

关闭 auto-execute flags,例如 --auto-exec、--auto-run、--auto-test,以及 dangerously-skip-permissions,除非这个工作真的不能为了 human 停下来。

不要让 agents 跑来自 forks 的 pull requests;这正是 attacker 的 file 通往你 secrets 的最容易路径。

把 repository 里自带的 config files,比如 .aider.conf.yml,当作不可信 code;恶意的 config file 可以在第一次被接受的 edit 时就触发攻击。

GuardFall 只是今年一连串类似发现中的一个。Adversa 自己的 TrustFall 曾命中 Claude Code、Cursor、Gemini CLI 和 Copilot CLI,而另一个 deny-rule bypass 也曾命中 Claude Code。

像 AutoJack 和 Agentjacking 这类 attacks,则把 poisoned content 变成了 agent 会用 owner privileges 运行的 commands。共同点很简单:不受信任的 text 一直在 guard 还没弄清楚 bash 实际会运行什么之前,就已经进入了真正的 shell。