Anthropic 的程式開發工具 Claude Code 有 1,122 個設定檔被發現含有 1,379 筆認證資訊。這些資料可能在開發者核准指令後留存在設定檔,並隨檔案被提交至公開 GitHub 儲存庫。
Apiiro 於 5 日公布的調查報告指出,團隊檢查了 103,617 個公開儲存庫中的 104,185 個設定檔。調查期間為 11 月 1 日至 3 日,其中 1,122 個檔案(1.1%)被判定含有認證資訊。
資料外洩途徑與指令核准流程有關。使用者若選擇「同意並且不再詢問」,Claude Code 會將核准的指令以允許規則形式存入專案的 .claude/settings.local.json;若指令中包含密碼或 API 金鑰,相關值也可能一併留在檔案中。
Claude Code 設定文件指出,這個檔案是僅適用於專案中該使用者的本機設定。工具若在 Git 儲存庫內建立檔案,會將檔案加入使用者的全域排除清單,但不會自動寫入專案的 .gitignore。
因此,如果檔案在建立儲存庫前就已產生,或之後被複製到另一台電腦,全域排除設定便難以阻止已由 Git 追蹤的檔案公開。若使用者手動建立檔案,也必須自行將它加入專案的 .gitignore。
發現的 1,379 筆資料中,636 筆是符合服務供應商金鑰格式的認證金鑰,另有 743 筆是與公開主機資訊出現在同一行的密碼或權杖。其中包括 379 個資料庫密碼、122 個 Supabase 服務角色金鑰,以及 43 筆 SSH 連線資訊。
調查在 63 個組織的公開設定檔中發現認證資訊。一家公司收到通知後確認,外露的金鑰當時仍有效。
含有認證資訊的儲存庫中,設定檔首次提交至 Git 的時間中位數為調查時點前 217 天,顯示不少檔案在進入公開儲存庫後已留存一段時間。
目前檔案中已不存在的認證資訊,也有 734 筆可在 Git 歷史紀錄中找到。這些資料來自 509 個儲存庫的舊版檔案;另外,74 個儲存庫的 211 個分支也複製了相同內容。
若將統計範圍擴大至共用設定檔、代理對話紀錄及交接備忘錄等資料,調查在 1,994 個公開儲存庫中發現 2,539 筆認證資訊。初步檢查的 1,122 個檔案、歷史紀錄中的 734 筆資料,以及總計 1,994 個儲存庫,分別是不同指標。
一般認證資訊偵測工具也漏掉部分檔案。gitleaks 在 1,122 個含有認證資訊的設定檔中偵測到 564 個,TruffleHog 偵測到 643 個;兩種工具都未標示的檔案有 215 個。
偵測缺口可能與密碼在指令中看起來像一般文字有關。若工具主要搜尋特定服務的金鑰前綴或隨機字串格式,mysql -p 或 sshpass -p 後方的密碼可能會被當成一般指令內容而略過。
Claude Code 負責人鮑里斯·切爾尼(Boris Cherny)7 日在 Hacker News 留言表示:「我們正在研究可以採取哪些措施來避免這類情況。」他也說,Claude Code 過去沒有過濾機密資訊的功能,而這次發現的檔案是由使用者建立並提交至版本控制系統。
在 1,105 個可追蹤的含認證資訊儲存庫中,有 539 個儲存庫的相關提交將 Claude 標示為共同作者,且曾修改這些設定檔。單憑這項紀錄,無法判定 Claude 最初建立了檔案,或將檔案提交至公開儲存庫。
Apiiro 建議更換外露的認證資訊,並將已由 Git 追蹤的檔案從追蹤清單移除,再加入專案的 .gitignore。報告也建議避免直接在指令中輸入密碼,改用環境變數讀取,並只允許必要的指令模式,而非放行完整指令。
調查團隊沒有使用發現的認證資訊實際登入服務,也沒有測試連線主機。因此,報告中的認證資訊是指符合服務金鑰格式,或與公開主機一同發現的資料,並不代表所有資料目前都有效。
Comment 0