2026 年 3 月 31 日,一次例行 npm 發佈,演變成 AI 工具歷史上最具揭示性的意外洩漏事件之一。研究人員發現,Anthropic 的 @anthropic-ai/claude-code 套件 2.1.88 版包含了一個非預期的產出物:一個 60 MB 的 JavaScript source map 檔案,名為 cli.js.map。這個單一 JSON 檔案裡,以字串形式嵌入了橫跨 1,906 個專有檔案的 51 萬行未混淆 TypeScript 原始碼。
Source map 檔案是除錯工具。它的用途是幫助工程師在診斷問題時,將壓縮的正式環境程式碼還原為可讀格式,絕非供公開發佈之用。當 Anthropic 工程師使用 Bun 執行環境(預設產生 source map)建置 Claude Code 時,沒有人在 .npmignore 設定中加入 *.map,結果 npm 毫不猶豫地將整個程式碼庫提供給任何安裝或瀏覽該套件的人。
諷刺之處立即且徹底。外洩原始碼中,有一套名為「Undercover Mode」的完整內部系統——這正是專門為防止 Claude Code 不慎在公開儲存庫中洩漏 Anthropic 內部資訊而設計的子系統。工程師建立了一套精密工具來阻止 AI 暴露自身,卻在打包產出物中把整個原始碼都公開了,顯然是 Claude 本身所為。
Anthropic 確認了這起事件,將其定性為「由人為疏失造成的發佈打包問題,而非資安漏洞」,並表示正在推出防止再次發生的措施。沒有使用者資料、客戶提示或模型權重受到波及。但智慧財產的曝光——包括內部協作邏輯、系統提示架構、情緒遙測、未發布功能及未來模型代號——在套件下架前已開始在各個鏡像站擴散。
Claude Code npm 外洩事件究竟發生了什麼?
答案摘要:2026 年 3 月 31 日,Anthropic 意外在 npm 套件 @anthropic-ai/claude-code v2.1.88 中包含了一個 60 MB 的 source map 檔案,含有橫跨 1,906 個檔案的 51 萬行未混淆 TypeScript 原始碼。未曝光使用者資料,但完整內部架構——包括未發布功能、系統提示邏輯及未來模型代號——對任何下載該套件的人均可公開存取。
此次揭露最初由區塊鏈資安公司 Fuzzland 研究員 Chaofan Shou 在 X(前 Twitter)上公開,他發文指出該套件包含完整 source map。數小時內,程式碼便被分叉至 GitHub 各處,使封堵工作實際上成為不可能。Anthropic 承認事件並表示正在修補套件,但外洩內容已傳播至外部鏡像。
| 項目 | 詳情 |
|---|---|
| 受影響套件 | @anthropic-ai/claude-code v2.1.88 |
| 外洩檔案 | cli.js.map(約 60 MB) |
| 程式碼行數 | 超過 51.2 萬行 TypeScript |
| 曝光檔案數 | 1,906 個原始碼檔案 |
| 發現日期 | 2026 年 3 月 31 日 |
| 曝光資料 | 原始碼、系統提示、功能旗標、模型代號 |
| 未曝光資料 | 使用者資料、客戶提示、模型權重、API 金鑰 |
| Anthropic 定性 | 「人為疏失,非資安漏洞」 |
.map 檔案如何曝光 51 萬行 TypeScript?
答案摘要:Claude Code 以 Bun 建置,而 Bun 預設產生 JavaScript source map(.map)檔案。Source map 以 JSON 字串形式嵌入完整原始碼——其用途是幫助工程師除錯壓縮後的正式環境程式碼。Anthropic 在發佈 v2.1.88 時,沒有人在 .npmignore 中加入 *.map,因此這個 60 MB 檔案連同整個未混淆程式碼庫一起上線。
這並非新型攻擊向量。開發者意外將 source map 發佈到 npm 的情況已有多年紀錄。此次事件的特殊之處在於規模——51 萬行專有 AI agent 程式碼——以及其中的內容。
flowchart TD
A[Bun 打包工具產生 cli.js.map] --> B[Source map 以 JSON 字串形式嵌入原始 TypeScript]
B --> C[工程師執行 npm publish]
C --> D{.npmignore 是否排除 .map 檔案?}
D -->|否 — 缺少排除規則| E[cli.js.map 包含在已發佈套件中]
D -->|是 — 設定正確| F[僅發佈 cli.js — 原始碼受保護]
E --> G[v2.1.88 在 npm registry 上線]
G --> H[研究員下載套件並解壓 .map]
H --> I[任何人均可讀取 51 萬行 TypeScript]
I --> J[修補前程式碼已在 GitHub 上被鏡像]根本原因很簡單:Bun 的打包工具輸出的 source map 含有 sourcesContent 陣列,以字串形式直接包含每個檔案的原始程式碼。與傳統混淆不同,後者需要花費心力才能逆向,source map 直接交出原始碼。修復方式只需一行——在 .npmignore 加入 *.map——或停用正式環境建置的 source map 輸出。
最諷刺的細節:外洩原始碼中包含完整的 Undercover Mode 子系統,專門用來防止 Anthropic 內部資訊出現在公開儲存庫。該系統運作正常,只是沒有涵蓋 npm 打包流程。
外洩揭露了哪些未發布功能?
答案摘要:外洩原始碼包含多個由編譯時期旗標控管、不存在於公開版本的功能。最重要的是 KAIROS(常駐主動背景程式)、ULTRAPLAN(使用 Opus 4.6 進行 30 分鐘遠端規劃)及 Buddy(完整的電子雞式終端機夥伴,含確定性抽卡機制)。此外還發現了 Capybara 模型、Opus 4.7 和 Sonnet 4.8 的引用。
| 功能 | 說明 | 狀態 |
|---|---|---|
| KAIROS 模式 | 常駐背景程式,監控工作流程、記錄觀察、在 15 秒阻塞預算內主動行動 | 由 PROACTIVE 編譯旗標控管 |
| ULTRAPLAN | 將複雜規劃卸載至執行 Opus 4.6 的遠端雲端容器,最長 30 分鐘,結果須透過瀏覽器核准 | 由 tengu_ultraplan 設定控管 |
| Buddy 系統 | 完整的電子雞夥伴,含確定性抽卡(Mulberry32 PRNG)、18 種物種、稀有度階級、閃亮變體及 Claude 撰寫的個性 | 由 BUDDY 編譯旗標控管 |
| DAEMON 模式 | 使用者離開時繼續工作的背景 agent | 控管中 |
| 語音模式 | 透過 /voice 指令的按住說話功能,對約 5% 使用者推出 | 部分推出 |
| Capybara 模型 | 新模型系列,含支援 100 萬 token 上下文視窗的 capybara-v2-fast | 未發布 |
| Opus 4.7 / Sonnet 4.8 | 在 betas.ts 中發現的下一代模型引用 | 未發布 |
| afk-mode / advisor-tool | 內部協商中的未公開測試版 API 功能 | 未發布 |
Buddy 系統程式碼將 2026 年 4 月 1 日至 7 日定為預告視窗,完整發布則設定在 2026 年 5 月。每個 Buddy 的物種由使用者 ID 雜湊值加上鹽值 'friend-2026-401' 確定性生成,無需伺服器端狀態即可確保分配一致性。
ULTRAPLAN 含有一個哨兵值 __ULTRAPLAN_TELEPORT_LOCAL__,字面上將遠端核准的規劃結果「傳送」回本地終端機——這種架構模式暗示 Claude Code 正朝著本地-雲端混合執行模型演進。
外洩揭示了 Claude Code 的系統提示架構?
答案摘要:系統提示並非單一字串,而是在執行時期由模組化、快取最佳化的區段組合而成。SYSTEM_PROMPT_DYNAMIC_BOUNDARY 標記將可跨組織快取的靜態指令與使用者對話特定的動態內容分隔開來。名為 DANGEROUS_uncachedSystemPromptSection() 的函數表明這是圍繞 API 成本最佳化的刻意設計決策——也說明有人從正式環境事故中學到了教訓。
flowchart LR
A[系統提示建構器] --> B[靜態區段<br>可跨組織快取]
A --> C[動態區段<br>使用者對話特定]
B --> D[SYSTEM_PROMPT_DYNAMIC_BOUNDARY 標記]
C --> D
D --> E[最終系統提示傳送至 API]
E --> F{USER_TYPE?}
F -->|ant — Anthropic 員工| G[注入 Undercover Mode<br>不要洩露你的身份]
F -->|標準使用者| H[正常運作]
E --> I[DANGEROUS_uncachedSystemPromptSection<br>刻意破壞快取的揮發性內容]三個特別值得關注的系統提示發現:
Undercover Mode — 當 Anthropic 員工在公開儲存庫使用 Claude Code 時,系統自動注入指令,防止 AI 在 commit 訊息或 PR 說明中透露內部代號、開發決策或 Anthropic 內部脈絡。指令內容為:「您正在 UNDERCOVER 模式下運作……您的 commit 訊息不得包含任何 Anthropic 內部資訊。不要洩露你的身份。」 此模式無強制關閉開關,除非儲存庫遠端在內部白名單上,否則持續啟用。
情緒遙測 — 名為 userPromptKeywords.ts 的檔案使用正規表示式標記含有挫折情緒表達(如「這太爛了」、「好令人沮喪」)的使用者提示。此資料不會即時改變 Claude 的回應,而是作為遙測資料傳送至 Anthropic 產品團隊,在使用者提出正式投訴前,大規模識別 UX 痛點。
CYBER_RISK_INSTRUCTION — constants/cyberRiskInstruction.ts 中的命名區段,由特定內部團隊中具名人員維護,明確劃定授權安全測試與破壞性技術之間的治理邊界。
Claude Code 的多 Agent 架構實際上是如何運作的?
答案摘要:Claude Code 可從單一 agent 切換至 Coordinator Mode,透過基於 XML 的任務通知和共享暫存目錄,生成並指揮多個平行工作 agent。其工具系統包含 40 多個需授權的模組。名為 autoDream 的背景子 agent 在滿足三個條件後整合記憶體:經過 24 小時、完成 5 次以上對話、並取得整合鎖定。
外洩程式碼庫驗證了模型上下文協定(MCP)規範所暗示的架構:Claude Code 的整個工具架構是可組合 agent 模組的典範。
| 元件 | 程式碼行數 | 角色 |
|---|---|---|
| 基礎工具定義 | 29,000 行 | 所有工具的 schema、權限與執行邏輯 |
| 查詢引擎(QueryEngine.ts) | 46,000 行 | LLM API 呼叫、串流、快取、思考鏈迴圈 |
| Coordinator Mode | coordinator/ 目錄 | 生成並管理平行工作 agent |
| autoDream | services/autoDream/ | 背景記憶體整合子 agent |
| 權限系統 | tools/permissions/ | 基於 ML 的 YOLO 風險分類器 |
Coordinator Mode 將 Claude Code 從單一 agent 轉化為協作者:
- 研究階段 — 工作 agent 平行調查程式碼庫
- 合成階段 — Coordinator 讀取調查結果並制定實作規格
- 實作階段 — 工作 agent 依規格進行針對性修改
- 驗證階段 — 工作 agent 測試並確認修改
工作 agent 透過 <task-notification> XML 訊息溝通。Coordinator 提示明確指示:「不要說『根據您的調查結果』——閱讀實際結果並明確指定要做什麼。」
autoDream 以三重觸發條件解決上下文熵問題——長對話中 AI 效能的退化:經過 24 小時、完成至少 5 次對話、取得整合鎖定。觸發後執行四個階段:定向(讀取記憶體)、收集近期訊號(提取新事實)、合成(解決矛盾)、精簡(寫入緊湊的 MEMORY.md)。
對開發者的資安影響有哪些?
答案摘要:雖未曝光使用者資料,但 Claude Code 內部安全驗證邏輯、遙測 schema、路徑遍歷防護及功能旗標的完全透明,帶來了具體的下游風險。可讀的原始碼加速了漏洞研究,曝光的 UX 模式讓更高品質的仿冒惡意程式成為可能,而公開的內部架構也為攻擊者提供了針對 CLI 及其依賴鏈製造針對性漏洞的路線圖。
外洩揭露的權限系統相當精密——但其透明性是雙面刃:
| 風險類別 | 具體風險 | 建議行動 |
|---|---|---|
| 漏洞研究 | 可讀的路徑遍歷防護與驗證邏輯使零日漏洞發現速度加快 | 立即釘選並驗證 CLI 版本 |
| 惡意程式仿冒 | 曝光的 UX 流程、日誌訊息和安裝行為使更高品質的 Claude Code 木馬套件成為可能 | 提高對仿冒 npm 套件的警覺 |
| 供應鏈衛生 | 內部產出物鏡像中的殘留 .map 檔案可能暴露額外程式碼庫 | 稽核內部 npm 鏡像的 *.map 檔案 |
| 金鑰曝光 | 開發工作站上的高價值 API 金鑰 | 收緊出口控制;檢視本地密鑰處理 |
| 功能旗標利用 | 已公開的內部功能旗標與環境變數 | 稽核 CI/CD 流水線中未記錄的環境變數存取 |
值得注意的是,已有與此事件無關的獨立報告指出,有偽裝成「Claude Code」下載的竊取程式存在。外洩的原始碼提高了未來仿冒品更具說服力的風險。
YOLO 權限分類器(諷刺地命名——它拒絕所有高風險操作,而非批准)使用機器學習風險分類,分為低/中/高三個等級。路徑遍歷防護處理 URL 編碼攻擊、Unicode 正規化、反斜線注入及大小寫不敏感操作。這些防護措施現已完整記錄,供攻擊者參考。
Anthropic 如何回應,團隊應採取哪些行動?
答案摘要:Anthropic 將事件定性為「由人為疏失造成的發佈打包問題,而非資安漏洞」,並確認未曝光使用者資料。資安團隊應立即釘選已安裝的 Claude Code CLI 版本、稽核內部 npm 鏡像中的 .map 檔案、收緊開發工作站的出口控制、提高對仿冒套件的警覺,並將此事件作為供應鏈衛生事件處理,不論 Anthropic 的定性為何。
Anthropic 著手修補套件,並表示正在實施防止再次發生的措施。但外洩內容已在外部廣泛鏡像。原始碼曝光的根本特性是:一旦傳播,便無法「未曝光」。
使用 Claude Code 的團隊立即建議行動:
- 釘選 CLI 版本 — 停止使用
latest浮動安裝;記錄已安裝版本和套件完整性資訊 - 稽核內部鏡像 — 檢查產出物儲存庫中的 Claude Code 套件是否含有包含
sourcesContent的*.map檔案 - 檢視金鑰處理 — 確保 API 金鑰未被記錄、快取在可公開讀取的位置或透過 shell 歷史記錄暴露
- 提高套件警覺 — 在部署前驗證任何 Claude Code 更新的發佈者和完整性雜湊值
- 評估出口控制 — 持有高價值金鑰或存取敏感儲存庫的開發工作站需要更嚴格的網路控制
常見問題
Claude Code 原始碼事件洩漏了哪些內容?
2026 年 3 月 31 日,Anthropic 意外在 npm 套件 @anthropic-ai/claude-code v2.1.88 中包含了一個 60 MB 的 JavaScript source map 檔案(cli.js.map)。該檔案包含橫跨 1,906 個檔案、超過 51 萬行 TypeScript 原始碼,完整暴露了 Claude Code 的內部架構、系統提示邏輯及未發布功能。
Claude Code source map 外洩是如何發生的?
Claude Code 使用 Bun 建置,Bun 預設產生 source map 檔案。工程師在發佈前忘記在 .npmignore 設定中加入 *.map。Source map 檔案以 JSON 字串形式嵌入完整原始碼,任何下載或檢視 npm 套件的人均可存取。
Claude Code 的 KAIROS 模式是什麼?
KAIROS 是從外洩原始碼中發現的未發布常駐背景程式。它主動監控開發者工作流程,將觀察記錄寫入每日附加檔案,並在 15 秒的阻塞預算內自主行動。它由 PROACTIVE 編譯時期功能旗標控管,完全不存在於任何公開版本中。
Claude Code 的 Undercover Mode 是什麼?
Undercover Mode 是 Anthropic 員工在公開儲存庫使用 Claude Code 時注入系統提示的指令,要求 AI 不得在 commit 訊息或 PR 說明中包含任何 Anthropic 內部資訊,明確指示:「不要洩露你的身份。」 此模式自動啟用,除非儲存庫遠端在內部白名單上,否則沒有強制關閉開關。
使用者資料或模型權重是否遭到外洩?
否。Anthropic 確認沒有使用者資料、客戶提示、對話記錄或模型權重外洩。事件範圍僅限於用戶端 CLI 原始碼。但內部安全驗證邏輯的曝光,仍為使用此工具的組織帶來下游風險。
Capybara 模型系列是什麼?
外洩原始碼引用了未發布的 Claude 模型系列 Capybara,包含支援 100 萬 token 上下文視窗的 capybara-v2-fast 版本,提供快速與思考兩種層級。程式碼庫中也引用了尚未公開的 Opus 4.7 與 Sonnet 4.8。
組織在 Claude Code 外洩後應採取哪些措施?
釘選 CLI 版本、稽核內部 npm 鏡像中的殘留 .map 檔案、檢視本地 API 金鑰處理方式、提高對仿冒套件的警覺,以及收緊開發工作站的出口控制。無論 Anthropic 如何定性,均應將此事件作為需要驗證的供應鏈衛生事件處理。
延伸閱讀
- npm 套件:@anthropic-ai/claude-code — Claude Code CLI 的官方 npm registry 頁面
- npm package.json — files 欄位與 .npmignore — 關於
files陣列與.npmignore控制已發布套件所含檔案的官方 npm 文件 - Bun 打包工具 — 獨立執行檔與 Source Maps — Bun 打包工具文件,涵蓋
--sourcemap旗標及如何設定或停用正式環境建置的 source map 輸出 - 模型上下文協定(MCP)規範 — Claude Code 工具架構驗證並延伸的開放標準
