Claude Code 授權紀錄外洩 2539 組憑證

資安公司 Apiiro 的研究人員在 GitHub 公開儲存庫中,從 Claude Code 的本機設定檔、Git 歷史紀錄與代理程式對話紀錄裡,總共找出 2539 組真實憑證,分布在 1994 個程式碼庫,涉及 63 個組織。外洩的內容包括 Azure 資料庫密碼、Square 正式環境權杖、SSH root 登入資訊,還有一個醫療紀錄資料庫的擁有者密碼。

問題出在許多人每天都會按的一個按鈕上。

示意图:钥匙便签滑出笔记本,象征Claude Code设置文件泄露凭据

「不再詢問」寫進了什麼

Claude Code 在執行 Shell 指令之前會請求授權。使用者選擇「是,且不再詢問」後,這條規則就會寫進專案目錄下的 .claude/settings.local.json,之後同類指令不再跳出視窗。麻煩的是,寫進去的往往是指令原文:如果那條指令裡直接帶著資料庫連線字串、API 權杖或金鑰,這些內容也會原封不動地存進這個檔案。

依 Anthropic 的文件,Claude Code 建立這個檔案時會設定讓 Git 忽略它。但 Apiiro 的統計顯示,這道防線在不少情境下失靈:專案被複製到另一台電腦、一般資料夾事後才初始化成 Git 儲存庫,或是檔案被強制加入版本控制,settings.local.json 都可能一併被推送上去。

Apiiro 提出的幾個數字如下:

  • 公開 GitHub 上有 104185 份 settings.local.json,分布在 103617 個儲存庫;
  • 其中 1122 份(約 1.1%)含有真實機密,去除重複後為 1379 筆;
  • 在追溯到的 1105 個儲存庫中,有 539 個出現過由 Claude 掛名參與、修改過這個檔案的提交。

檔案越大,風險越高。超過 8KB 的檔案裡,大約每十份就有一份藏著真金鑰,小於 500 位元組的則不到五百分之一。授權規則是一條一條累積的,使用者按「不再詢問」的時間越長,檔案裡積存的東西就越多。

Apiiro 並未測試這些憑證目前是否仍然有效。儲存庫擁有者即使刪掉檔案,金鑰仍可能留存在 Git 歷史紀錄與既有的 fork 中。

這個問題早就有人回報過

2025 年 8 月 11 日,就有使用者在 Claude Code 的問題追蹤頁面回報:被核准的指令連同其中的 API 金鑰與權杖,被逐字存進了 settings.local.json。這份回報後來因為 60 天沒有動靜而被自動關閉,並未獲得修復。

一年多之後,同樣的機制被系統性地掃描出來。Claude Code 負責人 Boris Cherny 在 Hacker News 上回應,設定檔本來就不該進版本控制,團隊正在研究預防辦法,並考慮把金鑰掃描直接做進 Claude Code;在那之前,建議使用者自行執行金鑰掃描工具來清理。修復版本何時發布,Anthropic 尚未給出時間。

這也不是 Claude Code 本月第一次在本機資料處理上被點名。本月稍早,它被指出會在部分網路請求中附上使用者的電子郵件地址,當時的處理方式同樣是先推出緩解措施,正式版本隨後跟進。兩起事件的共通點在於,代理程式工具為了減少打擾使用者,會把資訊寫入磁碟或對外傳送,開發者很難察覺它到底記下了什麼。

開發者現在能做的事

如果用過 Claude Code,可以先在本機與遠端儲存庫中搜尋 .claude/settings.local.json 和 .claude/settings.json,檢查裡面有沒有帶明文憑證的指令。確認外洩過的金鑰要直接作廢並重新核發,光刪除檔案是不夠的。

更穩妥的習慣是不要把金鑰寫進命令列參數,改用環境變數或金鑰管理工具來引用;同時替儲存庫開啟 GitHub 的金鑰掃描或類似的提交前檢查,讓這類檔案在推送之前就被攔下。

參考來源:IT之家、Apiiro 研究報告、CocoLoop、Ars Technica、The Hacker News;核實設定檔數量、含金鑰檔案占比、憑證總數與受影響組織數。