![]()
以“安全優先”定位的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.”(“這是對網絡沙箱過濾器的真實繞過,不是測試假象。你應該向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)
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.