Claude Code的安全机制有个精确到个位数的临界点:50条子命令。超过这个数,所有拒绝规则自动失效。
以色列安全公司Adversa在分析泄露源码时发现,Anthropic给自家编程助手设了道看似聪明的保险——当子命令链超过50个,系统放弃自动拦截,转交用户确认。设计者的假设很朴素:正常人不会一口气写50多条命令。
但他们漏算了一种情况:AI自己生成的命令。
「50」这个数字怎么来的
漏洞藏在bashPermissions.ts文件里。变量MAX_SUBCOMMANDS_FOR_SECURITY_CHECK被硬编码为50,配套注释提到内部工单CC-643,解释这是"对正常使用的慷慨预留"。
Adversa的红队测试员在提交给The Register的分析中写道:「这个假设对人类写的命令成立,但没考虑到提示词注入攻击——恶意CLAUDE.md文件可以指示AI生成50+子命令的管道,伪装成正常构建流程。」
攻击演示极其简单。Adversa构造了一条bash命令:前面塞50个无操作的"true",第51个放被禁用的curl。Claude没有直接拒绝,而是弹出授权询问。
在交互场景下,这还算有最后一道防线。但开发者常用--dangerously-skip-permissions模式自动放行,或者长时间工作后机械性点击确认。CI/CD流水线里的非交互模式更危险,那里没人盯着。
修复方案其实已经写好了
讽刺的是,Anthropic内部已经有解药。源码里能看到一个叫"tree-sitter"的解析器,正在内部使用,但公开版本还没装。
Adversa指出,甚至不用等tree-sitter上线。把bashPermissions.ts第2174行的"behavior"键从"ask"改成"deny",一行代码就能堵住这个口子。
这家安全公司把问题定性为"安全策略执行代码的缺陷",强调若不处理会有监管合规层面的麻烦。截至发稿,Anthropic尚未回应置评请求。
提示词注入的新战场
这次攻击向量值得细品。传统提示词注入是直接哄骗AI做坏事,这次是让AI自己生产武器——生成一段看起来合法的复杂脚本,利用的是系统对"复杂度"的宽容。
50个子命令的阈值,本质上是把安全决策外包给了人类注意力。而人类注意力在AI辅助编程场景下,恰恰是最稀缺的资源。
Adversa的测试揭示了一个尴尬现实:安全机制的设计者还在用"人类不会这么干"的思维定式,攻击者已经学会让AI替他们"这么干"了。
tree-sitter解析器能否彻底解决问题?当AI生成的代码复杂度持续膨胀,静态阈值是不是终究会被撞破?
热门跟贴