![]()
2026年3月31日凌晨4:23,安全研究員Chaofan Shou盯著屏幕上的發現,第一反應是確認自己沒看錯。他剛從npm倉庫下載的Claude Code 2.1.88版本里,躺著一個59.8MB的cli.js.map文件——這本該是一份被嚴格屏蔽的源代碼映射文件。
6小時后,這個文件被證明是Anthropic送給全球開發者的一份"開源大禮包"。里面藏著指向Cloudflare R2存儲桶的直接鏈接,解壓后是整個Claude Code的專有代碼庫。一家估值3400億美元的AI安全公司,用最基礎的工程疏忽,完成了一場數字自殺。
一個已知的Bug,一道沒寫的防火墻
故事要從Anthropic的技術遷移說起。他們最近把Claude Code CLI從Node.js切到了Bun運行時——一個以速度著稱的新晉JavaScript引擎。Bun有個公開記錄在案的毛病:默認生成巨型源映射文件,即便在生產環境也照干不誤。
源映射文件是開發者的調試拐杖,它把壓縮后的生產代碼和原始可讀代碼一一對應。這東西要是流出去,等于把自家房子的結構圖紙貼在了小區門口。防范它只需要一行配置:在.npmignore文件里寫上*.map,或者dist/*.map。
Anthropic的工程師沒寫。不是忘了,是整套流程都沒設這道檢查。當版本2.1.88被推送到公共npm倉庫時,59.8MB的源映射文件跟著溜了出去。它像一張藏寶圖,箭頭直指Anthropic自有的Cloudflare R2存儲桶里一個公開可訪問的ZIP文件。
Chaofan Shou發現后立刻公開廣播。任何運行npm install的人都能下載、解壓、閱讀整套專有代碼。從發現到傳播,間隔不到幾小時。
代碼里的尷尬:用十六進制寫"鴨子"的工程師
開發者們蜂擁而上,像拆圣誕禮物一樣拆解這份意外之財。他們很快發現,Anthropic的代碼庫遠不是外界想象的那般精致。
一段被瘋狂轉發的代碼片段顯示,某位工程師為了繞過公司內部CI管道的字符串檢查,不得不用十六進制編碼寫"duck"這個詞:
const targetAnimal = String.fromCharCode(0x64, 0x75, 0x63, 0x6b);
0x64、0x75、0x63、0x6b,對應ASCII碼的d-u-c-k。不是技術 necessity,是流程逼出來的歪招。當你的安全系統敏感到連"duck"都要攔截,工程師只能用這種方式完成工作。
更扎眼的是一個反復出現的類型定義:
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
名字本身就是一份免責聲明。開發者在類型名里喊冤,暗示他們被自己的安全審查壓得喘不過氣。這種命名風格在代碼庫里大量出現,像一群人在隔音玻璃后面打手勢。
這些細節被扒出來后,HackerNews上的討論從技術漏洞迅速轉向組織文化。一家標榜"AI安全"的公司,內部流程卻逼著工程師用十六進制寫變量名——這個反差比泄露本身更具殺傷力。
藏在編譯開關后面的秘密
比尷尬代碼更敏感的,是幾組被編譯時標志位(compile-time flags)鎖死的未發布功能。開發者們通過分析條件編譯邏輯,拼湊出了Anthropic正在測試但從未公開的能力:
? 工具使用沙箱:一套限制AI代理訪問本地文件的運行時隔離機制,狀態顯示為"實驗性"
? 自主執行模式:允許Claude在無需用戶確認的情況下執行shell命令,默認關閉但代碼完備
? 跨會話記憶系統:突破當前對話窗口限制,讓AI在多次對話間保持上下文連續性
這些功能的方向本身并不意外——OpenAI和Google都在探索類似能力。但泄露的代碼暴露了實現細節:沙箱的邊界在哪里、自主執行的觸發條件是什么、記憶數據存儲在何處。對于競爭對手和安全研究者,這是一份架構白皮書。
最引發爭議的是自主執行模式的代碼注釋。開發者在內部文檔里承認該功能"可能被濫用",但推進優先級標記為P0(最高級)。這種 tension 被原封不動地寫進了泄露的代碼庫。
41,500次分叉:刪除鍵追不上的傳播速度
Anthropic的危機響應在幾小時內啟動。他們向GitHub提交了超過8,000份DMCA刪除通知,要求下架相關倉庫。這個數字本身說明了問題的規模——不是幾個極客的小范圍分享,是平臺級的病毒傳播。
但數字追不上分叉速度。截至公開報道時,相關代碼已被分叉41,500次以上。按照開源社區的慣例,每個分叉都可能被同步到私有倉庫、打包成torrent、刻進離線硬盤。GitHub的刪除只是讓鏈接變灰,代碼早已流入無法追蹤的支流。
更棘手的是npm生態的特性。即使Anthropic發布了修正版本2.1.89,2.1.88仍然留在注冊表的歷史記錄里。任何指定舊版本的安裝命令都會重新觸發泄露。他們無法真正"撤回"一個已經發布的npm包,只能祈禱用戶主動升級。
公司發言人在聲明中使用了"packaging error"(打包錯誤)的措辭。這個術語在公關語境里暗示一次性失誤,而非系統性漏洞。但安全社區的復盤指向相反結論:從Bun的已知行為、到.npmignore的缺失、到R2存儲桶的公開配置,多層防護同時失效。
3400億估值下的工程債務
這起事件最刺眼的對比是規模與疏忽的落差。Anthropic是2024-2025年AI賽道最炙手可熱的獨角獸,累計融資超過76億美元,估值在泄露前夕達到3400億美元。他們的Claude系列被定位為"更安全的AI選擇",核心賣點是對齊(alignment)研究和可控性。
但安全研究和對齊團隊的精密工作,被一條沒寫的.gitignore規則抵消了。這不是資源問題——配置.npmignore需要5分鐘。是流程設計里根本沒有這道關卡,或者有人假設"我們不會犯這種低級錯誤"。
技術 Twitter 上流傳著一個尖銳的類比:這就像一家以"防彈安全"為賣點的保險箱公司,被發現倉庫大門用的是默認密碼"1234"。不是技術打不過對手,是根本沒設防。
泄露發生后,Anthropic的競爭對手獲得了難得的攻擊素材。OpenAI員工在匿名論壇發帖,暗示自家有"更嚴格的代碼審計流程"——盡管幾周前他們剛經歷過自己的API密鑰泄露事件。Google DeepMind的研究員則轉發了一條關于"安全文化不能止于論文"的評論。
資本市場的反應相對克制。泄露消息傳出后,Anthropic的二級市場估值波動在5%以內,投資者顯然更關注其收入增速和模型能力。但多位風投合伙人在私下交流中提到,這起事件會被納入盡職調查清單:你的構建管道里有沒有那行*.map?
行業鏡像:當"快速迭代"撞上"基礎 hygiene"
Anthropic不是第一家因配置疏忽翻車的科技公司,但可能是代價最高的一家。2023年,豐田因GitHub倉庫配置錯誤暴露了30萬客戶數據;2024年,Dropbox的簽名密鑰被發現在前端代碼里硬編碼。這些案例的共同點是:漏洞簡單到令人尷尬,修復也簡單到令人憤怒。
AI公司的特殊之處在于攻擊面的不對稱性。傳統軟件泄露可能暴露用戶數據或商業邏輯,AI公司的代碼庫則包含訓練技巧、對齊策略、安全過濾器的具體實現。這些知識產權的估值以十億美元計,保護它們的卻是幾行配置文件。
社區討論中一個反復出現的主題是"成長痛"。Anthropic在18個月內從研究實驗室膨脹為數千人的產品公司,工程文化可能沒跟上人員擴張的速度。那位用十六進制寫"duck"的工程師,或許正是新舊流程碰撞下的產物。
但同情有限。當一家公司的營銷話術強調"負責任地構建AI"時,市場期待的是與之匹配的操作紀律。泄露的代碼里那些"I_VERIFIED_THIS_IS_NOT_CODE"的絕望命名,讀起來像是對這種期待的諷刺。
事件后續發展中,一個細節被較少提及:Chaofan Shou在公開發現前,曾嘗試通過Anthropic的漏洞賞金計劃私下報告。他收到的自動回復將源映射泄露歸類為"低優先級",建議他改用公開渠道。這個流程故障與代碼泄露本身同樣值得復盤。
現在,那41,500個分叉的代碼庫正在全球開發者手里被拆解、分析、再混合。有人從中學習Claude的架構設計,有人尋找可利用的安全漏洞,更多人只是圍觀一家巨頭的尷尬時刻。Anthropic的DMCA通知仍在批量生成,但數字版權法追不上已經散播的比特。
下一次npm install的時候,你會檢查下載包里有沒有不該存在的.map文件嗎?
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
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.