Claude Code「不再詢問」把密碼存進設定檔,GitHub 逾千份外洩

Elponcrab
分享
Claude Code「不再詢問」把密碼存進設定檔,GitHub 逾千份外洩

資安公司 Apiiro 11 月 5 日發布研究報告,掃描 GitHub 上 104,185 份 Claude Code 的專案設定檔 .claude/settings.local.json,其中 1,122 份(1.1%)含有真實的密碼或金鑰。

原因出在一個按鈕。使用者對 Claude Code 提出的指令按下「Yes, and don’t ask again」(同意且不再詢問)後,整串指令連同裡面的密碼會原樣存進這個檔案,檔案後來又跟著程式碼一起上傳到公開的 GitHub 儲存庫。

按一次「不再詢問」,指令連密碼一起存檔

開發者請 Claude Code 檢查資料庫或呼叫 API 時,它提出的指令常會帶著設定檔裡的連線字串或 API 金鑰,因為少了它指令跑不動。Claude Code 執行指令前會先問使用者,Apiiro 指出,一次工作要按好幾次同意,密碼只是長指令裡的一個字,很多人看到第十次就不再細讀。

廣告 - 內文未完請往下捲動

根據 Claude Code 官方文件,使用者第一次按下「不再詢問」時,Claude Code 會建立 settings.local.json,把這條指令存成允許規則;這個檔案設計上只留在本機,Claude Code 會把它加進使用者的全域 git 排除清單。

Apiiro 認為這個做法擋不住幾種情況:資料夾之後才變成 git 儲存庫、在另一台電腦重新複製專案,或檔案早已被 commit 過。排除規則不會寫進專案自己的 .gitignore,專案換到別的地方就失去保護。

報告也指出,在追查到的 1,105 個含真實密碼的儲存庫中,有 539 個的設定檔是由標示 Claude 共同作者的 commit 修改,涵蓋 Sonnet 4.5 到 Opus 5.5 等近期模型。Apiiro 說,用 Opus 5.5 與 Fable 5.1 都能重現這個情況,問題出在 Claude Code 的行為,不是模型。

2,539 組密碼散在近 2,000 個儲存庫

這 1,122 個檔案共藏有 1,379 組不重複的密碼與金鑰,超過三分之一可以直接連進資料庫,包括 379 組資料庫密碼與 122 把 Supabase 服務金鑰,另有 43 組 SSH 登入資訊,部分是伺服器的 root 密碼。

受影響的機構有 63 個,從學生社團、新創、軟體外包商到老牌廠商都有。Apiiro 舉例,其中包括一家資料庫廠商自己的雲端管理金鑰、一家支付新創的資料庫密碼,以及一家醫療紀錄 App 的資料庫擁有者密碼。Apiiro 11 月 2 日、3 日通知各機構,有一家公司證實外洩的金鑰當時仍可使用。

刪掉檔案也不夠。含密碼的檔案中位數已在儲存庫裡放了 217 天,Apiiro 在檔案的歷史版本裡又找到 734 組已不在現行檔案中的密碼,另有 211 個分叉儲存庫複製了同樣的內容。

再加上團隊刻意共用的 .claude/settings.json、代理對話紀錄與交接筆記,Apiiro 總共在 1,994 個儲存庫找到 2,539 組真實密碼。

一般的密碼掃描工具也會漏掉。Apiiro 用 gitleaks 與 TruffleHog 掃這 1,122 個檔案,分別只抓到 564 個與 643 個,有 215 個兩套工具都沒發現。原因是掃描工具認的是金鑰格式,寫在 mysql -p 或 sshpass -p 後面的密碼看起來只是一般指令裡的一個字。

Apiiro 也說明研究限制:報告所謂「真實密碼」是指符合服務商金鑰格式,或與公開主機寫在同一行的密碼,團隊沒有實際登入測試,無法確認每組都還有效。

Claude Code 負責人:檔案本來就不該上傳

報告 11 月 7 日在 Hacker News 討論區引發討論,Claude Code 負責人 Boris Cherny 在留言中表示,Claude Code 過去沒有做密碼過濾,「但我們正在研究能做些什麼來防止這種情況」。

Cherny 強調,settings.local.json 本來就該留在本機,不該放進版本控制,Claude Code 建立這個檔案時會自動排除,他認為這些外洩的檔案是使用者手動建立並上傳的。這和 Apiiro 指出有 539 個儲存庫由 Claude 共同作者的 commit 修改的說法不同。

Cherny 也建議使用者改用 auto 模式,不必再自己維護允許與禁止清單,並說 auto 模式已預設開啟、所有方案都能免費使用。Claude Code 命令列工具 8 月 14 日起新工作階段預設採用 auto 模式,由另一個分類模型在動作執行前審查,10 月Claude App 也跟進改為預設。

他在另一則留言補充,可能的做法包括讓 auto 模式攔下這類指令、內建基本的密碼掃描,團隊會先做幾種原型比較取捨。Apiiro 則指出,Claude Code 使用者從 2025 年 8 月起就在 GitHub 回報這個問題,四則回報都沒有得到 Anthropic 回覆,其中三則被系統以閒置或重複為由自動關閉。

Apiiro 建議開發者用 git rm –cached 把這個檔案移出版本控制、加進專案的 .gitignore,並更換檔案裡出現過的所有密碼,因為刪檔清不掉歷史版本與分叉。之後在指令裡改用環境變數代替明文密碼,允許規則也改成 npm run 這類指令樣式,而不是整串指令。

風險提示

加密貨幣投資具有高度風險,其價格可能波動劇烈,您可能損失全部本金。請謹慎評估風險。