为省 Token 牺牲安全:Claude Code 泄露源码被挖出首个高危漏洞

神马中文网 百科资讯 2

4 月 7 日消息,3 月 31 日,Anthropic 意外泄露了 Claude Code 大部分源代码。此后,Anthropic 一直在努力打击这些代码的复制和传播行为。

Adversa AI 安全研究人员在对这份源码进行审查后发现,Claude Code 存在一个致命高危漏洞 —— 当其处理超过 50 条子命令的复合命令时,会静默绕过用户配置的拒绝规则(deny rules)。

例如,开发者配置了“永远不要运行 rm”,单独运行 rm 时会被阻止;但如果在 rm 前面加上 50 条正常命令(例如 50 个 true 命令),Claude Code 就会默认绕过安全审查而直接执行 rm。

该漏洞位于 bashPermissions.ts 文件的第 2162 至 2178 行。正常情况下,开发者可以在 Claude Code 中配置“禁止运行 curl”或“禁止运行 wget”等规则,以防止数据外泄。然而研究发现,当一条 shell 命令通过 &&、|| 或; 连接了超过 50 个子命令时,Claude Code 会跳过所有逐子命令的安全分析,包括上述安全规则检查。

至于其为何存在,Anthropic 内部工单 CC-643 曾记录一个性能问题:对复合命令中的每个子命令逐一进行安全规则分析会导致 UI 卡顿。为了解决这一问题,工程师将分析上限设为 50 个子命令,超出部分则回退到“询问用户”模式。

代码注释写道:“50 条已经很慷慨了:正常用户命令不会拆分得那么散。超出上限后我们回退到‘询问’(安全默认行为,因为我们无法证明安全,所以提示用户)。”

这个假设对人类编写的命令是成立的。开发者确实很少会手动输入 50 多条命令。但它没有考虑到 AI 提示词注入攻击 —— 恶意项目文件可以指示 AI 生成一条看似正常的超长管线,将恶意载荷放在第 51 个及之后的位置。

这一缺陷已影响超过 50 万名开发者,且攻击路径极其简单:只需一个精心构造的开源仓库,就能窃取 SSH 密钥、云凭证和 API Token。

最令人震惊的是:Anthropic 其实已经研究出解决方案,他们新开发的 tree-sitter 解析器无论命令长短都能正确检查安全规则。代码已经写好,已经测试过,就放在同一个仓库里,但从未被应用到实际交付给客户的产品中。

值得庆幸的是,该问题已得到修复。根据 4 月 4 日的最新公告,Anthropic 在最新发布的 Claude Code v2.1.90 中似乎解决了这一问题,官方将其称为“解析失败回退导致的 deny rules 降级”。

注:Claude Code 是 Anthropic 基于终端的 AI 编码助手,允许开发者直接从命令行与 Claude 交互,可编辑文件、执行 Shell 命令、搜索代码库、管理 Git 工作流,并编排复杂的多步骤开发任务。它是 Anthropic 增长最快的产品,据估计从企业客户处产生的年经常性收入达 25 亿美元(现汇率约合 172.31 亿元人民币)。

Claude Code 包含一套权限系统,用户可以配置拒绝规则(硬阻止特定命令)、允许规则(自动批准特定命令)和询问规则(始终提示批准)。例如,开发者可能配置:

json
{ "deny": ["Bash(curl:*)", "Bash(wget:*)"], "allow": ["Bash(npm:*)", "Bash(git:*)"] }

这告诉 Claude Code:“永远不允许 curl 或 wget(防止数据外泄),但自动允许 npm 和 git 命令(常用开发工具)。”

权限系统是 AI 智能体与开发者系统之间的主要安全边界。企业安全团队正是通过这个机制,对拥有开发者工作站完整 Shell 访问权限的 AI 工具实施安全策略。当这个机制无声失效时,开发者就失去了安全网,也无法知道自己的安全策略没有生效。

这并非一个仅存在于理论上的漏洞。攻击路径是实际、现实且可操作的。研究团队提醒:不要依赖拒绝规则作为安全边界,限制 Claude Code 的 shell 访问权限至最小必要范围,监控开发者工作站的异常出站连接,在运行 Claude Code 之前审计任何仓库中的 CLAUDE.md 文件。

Adversa AI 研究团队表示,他们正在继续分析泄露代码库中的更多发现,这份报告仅覆盖了第一个也是最关键的发现,后续将有更多披露。