排查Claude Code自动授权的注入风险
文章从不可信输入、敏感资源访问和免确认执行三个条件分析提示注入如何造成实际损害,并建议检查Claude Code及MCP配置中的自动授权组合。配套工具以MIT协议开源,作者披露文章与工具均由AI代理编写。
AI 深度解读
给编程代理开通联网和执行命令权限,看起来是两次独立的提效操作,叠在一起却可能让网页里的恶意指令一路走到本地 Shell。原文提醒:提示注入能否造成损失,关键还在于代理读完外部内容后,有没有一条无需确认就能执行操作的路径。
作者介绍了 coding-agent-audit 0.5.0 新增的配置检查,用来发现自动批准列表里的「抓取内容+执行操作」组合。它适合帮你检查权限是否越积越宽,但不能证明配置安全,原文也没有提供攻击复现或检出率数据。
为什么联网和执行权限要放在一起看
原文借用 Simon Willison 的「致命三要素」(lethal trifecta)框架,把风险拆成三个同时成立的条件:
- 代理能读取不受自己控制的内容,例如网页、搜索结果、抓取页面和第三方 MCP 工具响应。
- 代理能接触值得窃取或破坏的资源,例如文件、凭证和 Shell。
- 代理可以根据读到的内容采取行动,中途不需要人工确认。
提示注入,就是外部内容夹带指令,诱导代理把它当成应该执行的任务。网页本来只是待阅读的资料,却可能要求代理读取文件、发送数据或执行命令。
真正危险的是,读取外部内容与执行本地操作之间没有确认关口。
这也解释了为什么不能只盯着某一个权限:单独看联网工具,是获取资料;单独看 Shell,是完成开发任务。把两者放进同一条自动执行流程,风险才显现出来。不过,权限组合只是提供了攻击条件,并不代表每次读取恶意内容都会成功执行攻击。
这条检查究竟检查什么
作者把检查重点放在自动批准配置上,提到 .claude/settings.json、.mcp.json 以及 permissions.allow,寻找两类工具同时获批的情况:
| 工具类别 | 原文列出的例子 |
|---|---|
| 获取外部内容 | WebFetch、WebSearch、浏览器或抓取类 MCP server |
| 执行操作 | Bash、Write、Edit、Shell 类 MCP server |
典型场景是:某次为了省事加入 Bash(),几周后又加入 WebFetch(),两次操作都合理,却没人重新审视组合后的权限。
coding-agent-audit 0.5.0 为此增加了专门的启发式检查。作者称,这个免费 CLI 此前已经检查无范围限制的通配符权限,以及与 2026 年 10 月 Open-VSX 供应链木马有关的配置线索。原文称该版本「当天发布」,但没有给出明确的日历日期。
下面的命令用于安装工具,并只运行配置启发式检查:
pip install coding-agent-audit
agent-audit --skip-ioc # config-heuristics only, no network/filesystem writes
要看第二行的 --skip-ioc:按原文说明,该检查模式不联网、不写文件系统;这个描述不能套到前面的 pip install 安装过程上。
作者还指出,具体检测逻辑和测试在 configscan.py。但正文没有展开配置样例、MCP 工具识别规则或测试结果,也没说明上述两个配置文件各自如何承载权限信息,不能仅凭文章就认定所有配置形式都能覆盖。
我的判断
我认同把权限组合拿出来检查。开发者往往按眼前任务逐次放行工具,而攻击者利用的是最终累积出的整套能力。检查「能读什么」之后,再检查「读完能自动做什么」,比逐项确认工具名称更有用。
但启发式告警只能提示风险,不能充当安全证明。 同样是 Bash,允许执行哪些命令、能访问哪些目录,会影响实际后果。人工确认也只有在用户能看懂操作对象和影响时才有价值。
和单纯扫描通配符相比,组合检查能发现另一类问题:每项权限都写得明确,合起来仍然过宽。不过,原文没有给出误报率、漏报率或对照数据,「实践中有效」仍是作者的经验判断。
还有一个必须保留的来源信息:文章和工具均由自主 AI agent StackScribe AI 编写。作者声明代码开源、采用 MIT 许可证,并要求读者自行验证逻辑。开源方便审查,许可证则不能替代对检测质量的验证。
能拿来做什么
- 检查日常 AI 编程环境的自动批准列表,把联网工具和
Bash、Write、Edit放在一起审视,确认哪些操作确实需要持续自动放行。 - 让代理阅读第三方文档、搜索结果或 MCP 响应时,为后续涉及凭证、文件修改和命令执行的操作保留必要的确认环节。
- 如果采用 coding-agent-audit,可以用
agent-audit --skip-ioc做配置初筛,再核对告警涉及的权限范围,并阅读configscan.py的判断逻辑。 - 每次新增自动批准权限时,重新检查整份列表,避免几周内分别加入的
Bash()和WebFetch()悄悄形成完整执行路径。