以“安全优先”为核心理念的Anthropic公司,其关键开发工具Claude Code的网络沙箱在过去五个月中,从未真正发挥过其应有的安全防护作用。
独立安全研究员关傲男于5月20日发布最新研究报告,揭示了Claude Code网络沙箱存在的第二个完整绕过漏洞。该漏洞源于SOCKS5协议中的空字节注入攻击,允许沙箱内部的程序访问用户策略明确禁止的任意主机。这意味着自2025年10月沙箱功能推出以来,约5个半月、共计130个发布版本,Claude Code的每一个迭代都带有可被全面绕过的安全缺陷。这已是同一位研究员对同一防御机制的第二次成功突破。
Anthropic公司对此采取了沉默态度,未发布任何安全通告、CVE编号或用户通知。该漏洞已于4月1日的版本中悄然修复,但更新日志中并未提及任何与安全相关的内容。因此,仍在运行旧版本的用户完全无从知晓,他们配置的沙箱从一开始就形同虚设。
Claude Code是Anthropic在2025年初推出的AI编程助手,其定位是“驻留在终端中的AI工程师”。与传统的聊天式代码补全不同,Claude Code能够直接读写用户代码库并执行命令,自主完成代码导航、文件编辑、测试运行等一系列操作。这种深度集成也带来了较高的安全风险——一旦模型遭受提示词注入攻击,攻击者将获得与用户终端同等的权限,包括读取本地环境变量、执行任意系统命令、访问内部网络资源等。
为了平衡安全与效率,Anthropic在2025年10月引入了网络沙箱功能(v2.0.24),允许用户通过配置文件设定域名白名单,以限制AI执行环境的外部网络访问。例如,配置allowedDomains: [“*.google.com”]后,Claude Code只能访问Google及其子域名,所有其他流量均被阻止。官方文档明确承诺:“空数组等同于禁止所有网络访问。”
这一机制通过一个SOCKS5代理实现:底层的沙箱运行时(@anthropic-ai/sandbox-runtime)启动代理服务器,沙箱内的进程不直接发起网络连接,而是通过代理进行转发。代理会根据用户在settings.json中配置的白名单执行域名过滤。操作系统层面的沙箱机制——macOS的sandbox-exec和Linux的bubblewrap——能正确地将Agent限制在本地回环地址,而出站决策则完全委托给此SOCKS5代理。
然而,问题正是出现在代理的实现上。两次独立的安全研究均证实,该代理可以被彻底绕过。
时间线揭示了一个更深层次的问题:2025年11月26日发布的v2.0.55版本修复了第一次绕过,但第二次绕过自沙箱上线伊始便已存在,且该版本仍未修复。两个漏洞在时间上存在交叉,从沙箱功能上线的第一天直到最后一个漏洞被修复,没有任何版本是完全安全的。Anthropic在官方博客中曾宣称沙箱“确保即使发生提示词注入,影响也被完全隔离”,但这两次绕过的存在直接推翻了这一承诺。
关傲男在其研究报告中指出:“一次外部报告是运气。两次则是实施质量问题。”
第二次绕过的技术原理并不复杂,但其攻击链的完整性值得关注。
当用户配置了网络白名单(例如仅允许访问*.google.com)时,Claude Code的SOCKS5代理在接收到连接请求后,会使用JavaScript的endsWith()方法对主机名进行后缀匹配。攻击者只需在主机名中插入一个空字节——构造诸如attacker-host.com\x00.google.com的字符串。JavaScript将空字节视作普通UTF-16字符,因此endsWith(“.google.com”)会返回true,代理便会放行。然而,当同一字符串被传递给底层的C语言函数getaddrinfo()进行DNS解析时,空字节被视作字符串终止符,实际解析的便是attacker-host.com。同样的字节,在两层代码中却被赋予了截然不同的解释。过滤器认为你在访问Google,而DNS解析器则明确知道你在连接攻击者的服务器。
这属于经典的“解析器差异”攻击,与2005年发现的HTTP请求走私漏洞属于同一技术类别(CWE-158 / CWE-436)。其本质在于,当同一数据流经两个具有不同语义解释规则的组件时,攻击者可以利用这种差异,使一个组件做出“安全”判断,同时促使另一个组件执行“危险”操作。此类漏洞在网络安全领域屡次出现,其核心教训始终一致:任何跨越信任边界的字符串传递,都必须经过严格的规范化与验证,而非盲目信任上层已执行的检查。
关傲男通过两个精简的Node.js脚本复现了该漏洞:控制脚本使用普通主机名发起SOCKS5连接,结果被BLOCKED;攻击脚本在主机名中注入空字节,结果返回BYPASSED rep=0x00——后者意味着代理已成功建立连接,出站通道被打开。Claude Code自身也确认了这一结果。
当这一沙箱绕过与关傲男4月披露的“评论与控制”提示词注入攻击相结合时,便构成了完整的攻击链。此前的“评论与控制”研究已证实,三家AI编程工具均存在提示词注入攻击面,但攻击入口各异:Claude Code仅通过PR标题,Gemini CLI通过Issue评论或正文,Copilot Agent则利用HTML注释实现隐蔽注入。以Claude Code为例,其PR标题会直接拼接至提示词模板,未经过滤或转义,模型无法区分正常人类意图与恶意注入。
将两者结合——隐藏指令让Agent在沙箱内运行攻击代码,通过空字节注入突破网络封锁——环境变量中的API密钥、AWS凭证、GitHub令牌、内部API端点数据等,均可被外传至互联网上的任意服务器。数据通过SOCKS5代理本身流出,攻击全程无需外部服务器中转,而该代理正是用户信任为安全边界的组件。攻击者甚至不需要仓库写入权限,只需提交一个公开Issue即可。人类审查者在GitHub渲染视图中看到的是正常协作请求,但AI Agent解析的却是完整的恶意源码。
此次披露的一个关键细节来自Claude Code自身。关傲男直接将漏洞复现代码交给Claude Code运行,并要求其做出技术判断。Claude Code在执行了控制测试(普通主机名被拦截)和攻击测试(空字节主机名绕过拦截)后,给出了明确结论:“这是一个真实的网络沙箱过滤器绕过,并非简单的测试产物。你应该将此报告给Anthropic。”
被测试产品自己确认了漏洞的真实性和严重性,甚至主动给出了上报路径。这一细节被关傲男完整记录在研究报告中,并成为《The Register》报道标题的来源——“就连Claude也承认,其沙箱中的漏洞是真实且危险的”。
漏洞本身令人担忧,但Anthropic的处理方式更值得行业深思。
关傲男于2026年4月初通过HackerOne漏洞赏金计划(报告编号#3646509)向Anthropic提交了第二次沙箱绕过的详细报告。Anthropic的初步回应是:“感谢您的报告。经审核,我们认定该提交与我们已在追踪的既有内部报告重复。”
报告随即被关闭。当关傲男追问CVE编号计划时,Anthropic于4月7日回复:“我们尚未决定是否为该问题发布CVE编号,也无法提供相关决定的时间表。”
此后,漏洞在v2.1.90版本中静默修复。没有安全通告,没有CVE编号,Claude Code安全建议页面没有任何条目,更新日志也未提及任何安全相关描述。一个从沙箱上线第一天就存在、持续5个半月、覆盖约130个版本的完整绕过,对用户而言仿佛从未发生过。
这种处理模式并非首次。第一次绕过(CVE-2025-66479)的应对方式几乎如出一辙:Anthropic仅将CVE分配给了底层库@anthropic-ai/sandbox-runtime(CVSS评分仅1.8,评级“Low”),而非面向用户的产品Claude Code;更新日志中写的是“修复了代理DNS解析”,未提及安全漏洞。关傲男在其研究报告中对此评论道:“当React Server Components出现严重漏洞时,React和Next.js各自获得了独立的CVE,Meta和Vercel都发布了安全通告,两个社区都得到了充分告知。Anthropic选择了不同的做法。”截至目前,搜索“Claude Code Sandbox CVE”依然无法找到任何官方安全通告。
在应对凭证窃取问题时,Anthropic选择了封禁ps命令,但黑名单思路先天不足——封禁一个命令,攻击者有无数替代路径。正确的做法是明确声明Agent只需要哪些工具。而在“评论与控制”研究中,Anthropic虽将漏洞评级提升至CVSS 9.4(Critical级别)并转入私有赏金计划,但发言人却表示“该工具在设计上并未针对提示词注入进行加固”。厂商默认信任模型自身的安全能力,却在系统架构层面缺乏纵深防御;当漏洞暴露出这种缺失时,“设计局限”便成了一个方便的分类——它既承认了问题,又在某种程度上免除了发布安全通告的义务。
更广泛的行业图景显示,同样的问题并非仅限于Anthropic一家。4月披露的“评论与控制”研究中,Google的Gemini CLI和微软GitHub的Copilot Agent都被证实存在同一攻击面。三家公司均确认并修复了漏洞,但没有一家发布安全通告或CVE编号。Anthropic支付100美元赏金,Google支付1337美元,GitHub最初以“已知问题,无法复现”关闭报告,在收到逆向工程证据后以“信息性”标签结案,发放500美元。总计1937美元——而这三款产品覆盖了《财富》百强中绝大多数企业。
虚假的安全感比没有安全措施更具危害。没有沙箱的用户知道自己没有边界;拥有破损沙箱的用户却以为自己有。一个运行Claude Code并配置了域名白名单的团队,在5个半月里对风险毫不知情,升级后看到更新日志只会得出结论:沙箱一直在正常工作。此外,当漏洞被披露后,没有安全通告意味着用户无法判断自己是否曾受到影响,也缺乏回溯审计的依据。
面对这一现状,安全社区开始形成共识:不能将信任单点化地押注在厂商的沙箱实现上。Claude Code的SOCKS5代理构建在一个仅有10个GitHub Star、最后提交停留在2024年6月的第三方npm包之上,安全边界横跨JavaScript和C两种运行时,却在信任交界处缺少最基本的规范化处理。修复补丁中添加的isValidHost()函数——负责拒绝空字节、百分号编码、CRLF等非法字符——本应从沙箱上线的第一天就存在。关傲男提出了一个务实的防御框架——将AI Agent视为需要遵循最小权限原则的超级员工,核心在于多层防御。
安全的声誉建立在每一次披露和每一个补丁的透明度之上,而非品牌叙事。当用户基于信任将凭证交给Agent处理时,厂商有义务确保防线有效,也有义务在失效时及时告知。这两点,Anthropic在Claude Code沙箱上都未能做到。
关傲男表示:“沙箱最坏的结果不是阻止了什么,而是给了人们一种虚假的安全感。发布一个有漏洞的沙箱,比不发布沙箱更糟糕。”
