[LLM] Claude Code「不再詢問」會把密碼存進設定檔:Apiiro 在 GitHub 找到 1,122 份 settings.local.json 含疑似機密,請先輪替再清理

作者

用 Claude Code 寫程式時,按下「Yes, and don’t ask again」可能把你剛輸入的密碼一起存下來。資安公司 Apiiro 在 11 月 5 日發表研究,在公開 GitHub 上找到 1,122 份含有疑似機密資訊的 .claude/settings.local.json,包含資料庫密碼、SSH 登入資訊、GitHub/npm 權杖與 AWS 金鑰。

事件經過

  • Claude Code 預設在執行多數 shell 指令前會詢問使用者;選擇「Yes, and don’t ask again」後,會在專案的 .claude/settings.local.json 寫入允許規則,之後相同指令不再詢問。
  • 若規則是「完整的單一指令」,指令裡直接輸入的密碼或權杖也會以明文存進檔案。
  • Claude Code 第一次在 git 專案寫入這個檔案時,會把它加到使用者電腦的全域 git excludes;但這項保護不會跟著專案走,專案本身的 .gitignore 沒有排除它,已經被追蹤的檔案也不受影響。
  • Apiiro 研究員在 11 月 1 日至 3 日蒐集公開資料,11 月 2、3 日通知受影響組織,其中一家確認外洩的金鑰當時仍有效。

重點

項目Apiiro 統計
公開的 settings.local.json 副本104,185 份
含疑似機密的副本1,122 份(約 1.1%)
不重複機密值1,379 個
其中資料庫密碼379 個
公開伺服器 SSH 登入43 組
GitHub、GitLab、npm 權杖42 個
AWS 金鑰23 組
含歷史版本、共用設定與對話紀錄的總計2,539 個機密、1,994 個儲存庫
  • 這些是依格式與上下文判斷的「疑似機密」,Apiiro 沒有實際測試是否仍可用,也沒有證據顯示已遭他人濫用。
  • 刪除檔案不等於解決:舊版本仍留在 git 歷史與 fork 中。
  • 常見掃描工具會漏抓:在 1,122 份檔案中,gitleaks 標出 564 份、TruffleHog 標出 643 份,兩者都沒抓到的有 215 份,多半是夾在指令裡的密碼(例如 PGPASSWORD=、mysql -p)。
  • 早在 2025 年 8 月就有使用者回報同樣行為,相關 issue 後來因長期無活動被機器人自動關閉,並不代表已修正。
  • 數字均為 Apiiro 自身研究結果,尚無第三方獨立重現;Apiiro 本身也銷售應用程式與 AI 代理安全產品。

對你的實務建議

企業 / IT 管理者

  • 在 GitHub 組織內搜尋 .claude/settings.local.json 與 .claude/settings.json,連同 git 歷史一起檢查,即使目前檔案已刪除。
  • 先輪替、再清理:這些檔案曾出現過的密碼、權杖、金鑰全部更換,再處理歷史紀錄。
  • 把 .claude/settings.local.json 加入組織的 .gitignore 範本;已追蹤的用 git rm –cached 移除追蹤。
  • 將 .claude/、.cursor/、.gemini/ 等 AI 代理設定與記憶檔,視同 .env 納入 pre-commit 與 CI 的機密掃描,並確認掃描規則能抓到指令中的密碼。
  • 教育開發者用環境變數或機密管理工具引用憑證,並核准指令「樣式」而不是單一完整指令。

一般用戶

  • 自己的專案若用過 Claude Code,打開 .claude/settings.local.json 檢查,刪掉含密碼或金鑰的規則。
  • 曾把該檔案推上公開 GitHub 的,相關帳密一律更換。
  • 指令中不要直接打密碼,改用環境變數或密碼管理器。

資料來源

留言

發表留言