能随意窃取数据!这款热门 AI 编程工具曝重大隐患

2026-05-24 1 阅读 硅谷Tech news
以“安全优先”定位的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.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自身确认了这一结果。 Claude Code v2.1.86中四个红色标注步骤的完整漏洞复现——策略确认、普通拦截、空字节绕过、Claude自身确认 而这一沙箱绕过与关傲男4月披露的“评论与控制”提示词注入攻击串联后,构成了完整的攻击链(参见: 三层防御仍然不够,一条PR标题就能偷走你的API密钥:AI Agent安全裂痕再现 )。“评论与控制”研究已证明,三家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.”(“这是对网络沙箱过滤器的真实绕过,不是测试假象。你应该向Anthr