技術

Claude Code以明文儲存密碼,GitHub上1122個檔案外洩

Susan Hill
在 Google 中新增我們

Anthropic 的 Claude Code 在執行大多數 shell 指令前,會先徵求使用者同意,提供的選項之一是「好,以後不要再問」。如果指令中包含密碼,例如資料庫登入資訊,選擇這個選項後,Claude Code 可能會把整條指令連同密碼一併寫進專案中的純文字設定檔。安全研究人員如今在 GitHub 上的公開程式碼儲存庫中,發現數以千計的密碼和金鑰,任何人都能讀取。

如果你使用 Claude Code,要找的檔案名為 settings.local.json。它位於儲存庫根目錄下隱藏的 .claude 資料夾中;只要不採取措施阻止,專案移到哪裡,這個檔案也會跟著一起移動。凡是能使用這項工具的國家,行為都一樣。改變使用習慣只要一分鐘,清理外洩的密碼卻要花上更久,因為刪除檔案並不會把它從 git 歷史紀錄或其他人的分支複本中移除。

據 The Hacker News 報導,軟體安全公司 Apiiro 搜尋 GitHub 公開內容後,發現 103,617 個儲存庫中共有 104,185 份這類檔案。約 1.1%,也就是 1,122 份檔案,至少包含一項機密資訊,總計涉及 1,379 組不同憑證。其中超過三分之一可直接用來登入資料庫,包括 379 組資料庫密碼。此外還有 43 組可登入公開伺服器的 SSH 資訊、42 組 GitHub、GitLab 和 npm 權杖,以及 23 組 Amazon Web Services 金鑰。

這些檔案的擁有者不只是業餘愛好者。Apiiro 追查出檔案來自 63 個組織,絕大多數是不同規模的軟體公司;最嚴重的案例包括某資料庫供應商自己的管理員級雲端金鑰,以及一個醫療紀錄資料庫的擁有者密碼。git 歷史紀錄中的舊版檔案,還在 509 個儲存庫中留有另外 734 項機密;74 個儲存庫的 211 個分支複本,也帶有與原始版本相同的機密。若再加上團隊刻意提交的共用設定檔,以及已儲存的代理聊天紀錄,機密數量便增至 1,994 個儲存庫中的 2,539 項。

Claude Code 確實會嘗試避免將這個檔案納入版本控制。Anthropic 的設定文件指出,工具第一次寫入檔案時,會在使用者的全域 git 排除清單中新增規則,讓 git 在那台電腦上忽略該檔案。但這條規則不會隨專案移到隊友的筆電、建置伺服器或新電腦上;若檔案早已提交,這條規則也無濟於事。在研究人員追查的 1,105 個儲存庫中,有 539 個儲存庫裡一筆署名 Claude 為共同作者的提交曾修改該檔案,顯示代理程式往往會自行提交檔案。Apiiro 比較了 16 款程式編寫代理的文件,Claude Code 是唯一確認預設會把完整核准指令儲存在專案檔案中的工具。

常見的安全防護措施也漏掉了不少問題。Apiiro 使用兩款熱門開源機密資訊掃描工具 gitleaks 和 TruffleHog,檢查所有檔案副本:gitleaks 標記出 1,122 份檔案中的 564 份,TruffleHog 標記出 643 份,另有 215 份兩者都未能發現。多數漏網之魚是接在 PGPASSWORD=、sshpass -p 或 mysql -p 之後輸入的密碼;對於搜尋已知金鑰格式的工具來說,這些內容看起來就像普通文字。

這些研究結果也有一些限制。Apiiro 銷售 AI 輔助開發安全工具,因此這項研究同時也有推廣產品之用。研究並未測試這些憑證目前是否仍有效,不過一間收到通知的公司確認,其金鑰當時仍可使用。若某個值符合已知金鑰格式,或出現在公開伺服器位址旁且獲 AI 審查人員判定為機密,就會被計入,因此仍有誤判的可能。Apiiro 也表示,共同作者的相關數據無法證明每一項外洩憑證都是 Claude 加入的。此外,GitHub 上看到的只是冰山一角:這個檔案是專案資料夾中的純文字 JSON,因此也可能隨 npm 套件、Docker 映像檔、zip 壓縮檔或同步資料夾一同流傳。

研究人員提出的第一項建議是立即更換憑證:在進行任何清理之前,先更換檔案曾包含過的每一組密碼、權杖和金鑰,因為機密一旦公開就已經失守,無論是否重寫歷史紀錄都一樣。接著使用 git rm –cached 停止追蹤該檔案,將它加入儲存庫自己的 .gitignore,並在 Claude Code 中開啟 /permissions,刪除任何包含機密資訊的已儲存規則。透過環境變數引用憑證,能讓已儲存規則保留 $DB_URL 之類的名稱,而非密碼;核准指令模式而非單一指令,則能徹底避免將明文參數寫入檔案。

此前已有使用者提出警告。一份於 2025 年 8 月 11 日提交的錯誤回報指出,已核准且包含 API 金鑰和權杖的指令,會逐字存入 settings.local.json;經過 60 天沒有活動後,自動機器人於 1 月 3 日以「暫不處理」為由關閉了回報。Apiiro 於 11 月 6 日公布研究結果,表示其引用的四份相關回報全都被同一個機器人關閉,最新一份在 11 月 6 日關閉,Anthropic 始終沒有回覆。截至 11 月 2 日,研究人員發現的所有外洩檔案仍留在各自儲存庫的主要分支中,其中一半至少已存在 217 天。

The Hacker News 和 Apiiro 都沒有報導 Anthropic 作出回應,而文件記載的行為也沒有改變:下次你對一條輸入了密碼的指令選擇「不要再詢問」,Claude Code 也會把密碼一併存下來。

標籤: , , , , ,

在 Google 中新增我們

討論

共有 0 則留言。