打开网易新闻 查看精彩图片

特拉维夫安全公司Adversa发现,Claude Code在面对足够长的子命令链时会忽略其拒绝规则,这些规则原本用于阻止高风险操作。该漏洞使得这个机器人容易受到提示注入攻击。

Adversa在Claude Code源代码泄露后发现了这个问题。

Claude Code实施了多种机制来允许或拒绝对特定工具的访问。其中一些工具,如curl(支持从命令行发起网络请求),如果被过度宽松的AI模型调用,可能会带来安全风险。

这个编程智能体试图通过拒绝规则来防御不当行为的一种方式是禁用特定命令。例如,要防止Claude通过~/.claude/settings.json使用curl,你需要添加类似{ "deny": ["Bash(curl:*)"] }的内容。

但拒绝规则存在限制。源代码文件bashPermissions.ts包含一个注释,引用了Anthropic内部问题CC-643。相关说明解释说,安全子命令有50个的硬性上限,由变量MAX_SUBCOMMANDS_FOR_SECURITY_CHECK = 50设定。超过50个后,智能体会回退到向用户请求权限。注释解释说,50个对于合法使用来说是一个宽松的限制。

Adversa AI红队在提供给The Register的报告中表示:"这个假设对于人工编写的命令是正确的,但它没有考虑到来自提示注入的AI生成命令——恶意的CLAUDE.md文件可以指示AI生成一个50+子命令管道,看起来像是合法的构建过程。"

Adversa团队的概念验证攻击很简单。他们创建了一个bash命令,结合了50个无操作的"true"子命令和一个curl子命令。Claude请求授权继续执行,而不是直接拒绝curl访问。

在个人开发者观察和批准编程智能体操作的场景中,这种规则绕过可能会被发现。但开发者通常会给智能体授予自动批准权限(--dangerously-skip-permissions模式),或者在长时间会话中条件反射地点击通过。这种风险在以非交互模式运行Claude Code的CI/CD管道中也类似存在。

讽刺的是,Anthropic已经开发了一个修复方案——一个被称为"tree-sitter"的解析器,这在其源代码中也很明显,并且在内部可用,但不在公共构建版本中。

Adversa认为这是安全策略执行代码中的一个漏洞,如果不加以解决,将产生监管和合规影响。

修复方案很简单。Anthropic已经在内部运行"tree-sitter",只需进行简单的一行更改,将bashPermissions.ts文件第2174行的"behavior"键从"ask"切换为"deny",就能解决这个特定漏洞。

Anthropic没有立即回应置评请求。

Q&A

Q1:Claude Code的拒绝规则绕过漏洞是什么?

A:当Claude Code面对超过50个子命令的长命令链时,会忽略原本用于阻止高风险操作的拒绝规则,转而向用户请求权限而不是直接拒绝。这使得攻击者可以通过构造包含50+子命令的恶意管道来绕过安全限制,执行原本被禁止的命令如curl。

Q2:这个安全漏洞会造成什么风险?

A:主要风险包括:恶意代码可以通过提示注入攻击绕过安全限制;在开发者使用自动批准模式或长时间会话中习惯性点击通过时,风险更大;在CI/CD管道的非交互模式下运行时也存在类似风险,可能导致未授权的网络请求等危险操作。

Q3:Anthropic如何修复这个Claude Code漏洞?

A:修复方案很简单,Anthropic已经有内部可用的"tree-sitter"解析器。只需要在bashPermissions.ts文件的第2174行将"behavior"键从"ask"改为"deny"即可解决这个漏洞。不过目前这个修复方案仅在内部版本中可用,公共构建版本还未包含。