
以 " 安全优先 " 定位的 Anthropic,其核心开发工具 Claude Code 的网络沙箱在过去五个月里从未真正安全过。
独立安全研究员关傲男(Aonan Guan)5 月 20 日发布最新研究,披露 Claude Code 网络沙箱存在第二个完整绕过漏洞——一个 SOCKS5 协议中的空字节注入攻击,可以让沙箱内的进程访问用户策略明确禁止的任意主机。这意味着从 2025 年 10 月沙箱功能上线至今,约 5.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 代理。

Anthropic 官方博客展示的 Claude Code 沙箱架构图——用户命令经由 SOCKS/HTTP 代理过滤后到达沙箱,沙箱内的文件操作与网络访问受严格权限管控
问题就出在这个代理的实现上。两次独立的安全研究均证明,它可以被完整绕过。

时间线暴露出更深层的问题:2025 年 11 月 26 日发布的 v2.0.55 修复了第一次绕过,但第二次绕过从沙箱上线的第一天起就已存在,该版本仍然携带。两个漏洞在时间线上存在交叉,从沙箱功能上线的第一天到最后一个漏洞被修复,没有任何版本是安全的。Anthropic 在官方博客中宣称沙箱 " 确保即使发生提示词注入,影响也被完全隔离 ",但这两次绕过的存在直接推翻了这一承诺。
" 一次外部报告是运气。两次是实施质量问题。"——关傲男研究报告表示。
一个空字节的完整绕过
第二次绕过的技术原理并不复杂,但攻击链条的完整性值得关注。
用户配置了网络白名单,例如只允许访问 *.google.com。Claude Code 的 SOCKS5 代理在收到连接请求时,用 JavaScript 的 endsWith ( ) 方法对主机名做后缀匹配。攻击者只需在主机名中插入一个空字节——构造形如 attacker-host.comx00.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 自身确认了这一结果。

Claude Code v2.1.86 中四个红色标注步骤的完整漏洞复现——策略确认、普通拦截、空字节绕过、Claude 自身确认
而这一沙箱绕过与关傲男 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 都承认:漏洞是真实的
此次披露中的一个关键细节来自 Claude Code 自身。关傲男直接将漏洞复现代码交给 Claude Code 运行,要求其做出技术判断。Claude Code 在执行了控制测试(普通主机名被拦截)和攻击测试(空字节主机名绕过拦截)后,给出了明确结论:
"This is a real bypass of the network sandbox filter, not just a test artifact. You should report this to Anthropic at https://github.com/anthropics/claude-code/issues."(" 这是对网络沙箱过滤器的真实绕过,不是测试假象。你应该向 Anthropic 报告这个问题。")
被测试的产品自己确认了漏洞的真实性和严重性,甚至主动给出了上报路径。这个细节被关傲男完整记录在研究报告中,并成为 The Register 报道标题的来源—— "Even Claude agrees hole in its sandbox was real and dangerous"(连 Claude 都认同,其沙箱中的漏洞是真实且危险的)。

关傲男研究封面—— Claude Code 被展示自身漏洞后承认 " 这是对网络沙箱过滤器的真实绕过 ",红色框标注关键确认语句
Anthropic 的回应与五个月的沉默
漏洞本身令人担忧,但 Anthropic 的处理方式更值得行业审视。
关傲男于 2026 年 4 月初通过 HackerOne 漏洞赏金计划(报告编号 #3646509)向 Anthropic 提交了第二次沙箱绕过的详细报告。Anthropic 的初步回应是:
"Thank you for your report. After reviewing this submission, we've determined it's a duplicate of an existing internal report we're already tracking."(" 感谢您的报告。经审核,我们认定该提交与我们已在追踪的既有内部报告重复。")
报告随即被关闭。当关傲男追问 CVE 编号计划时,Anthropic 于 4 月 7 日回复:
"We have not yet decided whether a CVE will be published for this issue and can't share a timeline on that decision."(" 我们尚未决定是否为该问题发布 CVE 编号,也无法提供相关决定的时间表。")
此后漏洞在 v2.1.90 版本中静默修复。没有安全通告,没有CVE编号,Claude Code安全建议页面无任何条目,更新日志未提及任何安全相关描述。一个从沙箱上线第一天就存在、持续 5.5 个月、覆盖约 130 个版本的完整绕过,对用户而言仿佛从未发生过。
这一处理模式并非首次出现。第一次绕过(CVE-2025-66479)的应对方式几乎如出一辙:Anthropic 将 CVE 仅分配给底层库 @anthropic-ai/sandbox-runtime(CVSS 评分仅 1.8,"Low"),而非面向用户的产品 Claude Code;更新日志中写的是 "Fixed proxy DNS resolution"(修复了代理 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.5 个月里对风险毫不知情,升级后看到更新日志只会得出结论:沙箱一直在正常工作。此外,当漏洞被披露后,没有安全通告意味着用户无法判断自己是否曾受到影响,也缺乏回溯审计的依据。
面对这一现状,安全社区开始形成共识:不能将信任单点化地押注在厂商的沙箱实现上。Claude Code 的 SOCKS5 代理构建在一个仅 10 个 GitHub Star、最后提交停留在 2024 年 6 月的第三方 npm 包之上,安全边界横跨 JavaScript 和 C 两种运行时,却在信任交界处缺少最基本的规范化处理。修复补丁中添加的isValidHost ( ) 函数——负责拒绝空字节、百分号编码、CRLF 等非法字符——本应从沙箱上线第一天就存在。关傲男提出了一个务实的防御框架——将 AI Agent 视为需要遵循最小权限原则的超级员工,核心在于多层防御:

安全的声誉建立在每一次披露和每一个补丁的透明度之上,而非品牌叙事。当用户基于信任将凭证交给 Agent 处理时,厂商有义务确保防线有效,也有义务在失效时及时告知。这两点,Anthropic 在 Claude Code 沙箱上都未能做到。
" 沙箱最坏的结果不是阻止了什么,而是给了人们一种虚假的安全感。发布一个有漏洞的沙箱,比不发布沙箱更糟糕。" ——关傲男表示。
(本文首发钛媒体 APP,作者 | 硅谷 Tech_news,编辑 | 焦燕)
1. oddguan.com — Second Time, Same Sandbox: Another Anthropic Claude Code Network Sandbox Bypass Enables Data Exfiltration(Aonan Guan, 2026.05.20)
2. The Register — Even Claude agrees hole in its sandbox was real and dangerous(2026.05.20)


登录后才可以发布评论哦
打开小程序可以发布评论哦