Claude代码助手安全规则绕过漏洞

0 阅读3分钟

Claude代码助手因命令过多而绕过安全规则

硬编码的限制规则导致自动化执行失效

更新后的Claude代码助手在承受足够长的子命令链时,将忽略用于阻止危险操作的拒绝规则。此漏洞使该机器人容易受到提示注入攻击。

位于某地的安全公司Adversa在Claude代码助手源代码泄露后发现了这一问题。

Claude代码助手实现了多种机制来允许或拒绝对特定工具的访问。其中一些工具(如curl,可从命令行发起网络请求)如果被权限过大的AI模型调用,可能会带来安全风险。

该编码代理防御不良行为的一种方式是通过拒绝规则来禁止特定命令。例如,要通过~/.claude/settings.json阻止Claude使用curl,可以添加类似{ "deny": ["Bash(curl:*)"] }的配置。

但拒绝规则存在限制。源代码文件bashPermissions.ts中的注释引用了某机构内部编号为CC-643的问题。相关说明指出,安全子命令存在硬性上限50,由变量MAX_SUBCOMMANDS_FOR_SECURITY_CHECK = 50设定。超过50后,代理会退回到向用户请求许可的模式。注释解释称,50对于合法使用来说是一个宽裕的额度。

"这个假设对于人类编写的命令是正确的,"Adversa AI红队在一份提前提供给媒体的报告中表示。"但它没有考虑到提示注入产生的AI生成命令——恶意的CLAUDE.md文件会指示AI生成包含50多个子命令的管道,看起来像合法的构建过程。"

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

在开发者监控并批准编码代理操作的场景中,这种规则绕过可能会被发现。但开发者通常会在长时间会话中授予代理自动批准权限(--dangerously-skip-permissions模式)或仅仅机械地点击确认。在非交互模式下运行Claude代码助手的CI/CD管道中也存在类似风险。

具有讽刺意味的是,某机构已经开发了一个修复方案——一个称为"tree-sitter"的解析器,该解析器在其源代码中也有体现,并在内部可用,但未在公共构建版本中提供。

Adversa认为,这是安全策略执行代码中的一个错误,如果不解决将带来监管和合规影响。

修复很简单。某机构已经在内部让"tree-sitter"工作,并且在bashPermissions.ts文件的第2174行将"behavior"键从"ask"改为"deny"这一简单的单行更改就能解决此特定漏洞。

某机构没有立即回应置评请求。

4月2日更新: 本文报道后,Adversa表示该漏洞似乎已在最新发布的Claude代码助手v2.1.90中悄然修复。FINISHED