不再詢問會寫進設定
The Hacker News 在 2026 年 11 月 7 日報導,Apiiro 的研究指出一件操作風險:Claude Code 在執行多數 shell 指令前會先問。若選 “Yes, and don't ask again”,助理會把這次的允許規則寫進專案裡的 .claude/settings.local.json。規則有時是一類模式,有時是整段指令。若存下的是整段指令,而且指令裡帶有密碼或金鑰,該內容會以明文留在這個檔案,之後也可能被提交進 Git。
這不是 Anthropic 公布的新產品,也不是官方的安全公告。THN 寫,研究者用當時的 Opus 5.5 與 Fable 5.1 重現了這個行為。本篇只說明風險與他們公布的處理順序,不提供取出秘密的步驟。
Claude Code 第一次在 git 專案寫入這個檔時,會把它加進該使用者電腦上的全域 git exclude,所以這台電腦之後會忽略它。THN 引述研究者:這道保護停在一個人的一台電腦,不會跟著專案走,Claude Code 也不會把檔名寫進專案自己的 .gitignore。檔案一旦被提交,刪掉工作目錄裡的那一份,並不會清掉歷史與分叉裡的舊版本。

THN 另寫,2025 年 8 月 11 日已有使用者回報:核准過的指令若含有 API 金鑰或權杖,會被逐字存進 settings.local.json。一個自動機器人在 2026 年 1 月 3 日以 not planned 關掉該回報,因為 60 天沒有活動。研究者引用的四則相關回報,截至報導當天都已被同一個機器人關閉,最近一則是前一天,而且都沒有 Anthropic 的回覆。這段用來說明來源,不是本站對 Anthropic 意圖的判斷。
掃描數字是研究聲稱
下面的數字都是 THN 對 Apiiro 研究的引述。本站這次沒有打開 Apiiro 原文:擷取時網站回傳錯誤,因此沒有用原文再核對一次。Apiiro 沒有測試這些秘密是否仍然有效。有一間在報導該週較早被通知的公司,向研究者確認自己的金鑰當時仍有效。那是單一個案,不是 1,379 個全部仍有效。
THN 寫,公開的 .claude/settings.local.json 有 104,185 份,分布在 103,617 個儲存庫。其中約 1.1%,也就是 1,122 份,至少含有一項秘密,合計 1,379 個不同秘密。一項值要同時符合已知金鑰格式,或是密碼、權杖出現在公開伺服器位址旁邊,並且再經過一個 AI 審閱者同意,才算進這個數。研究者沒有說這些秘密是否已被使用。
文中另寫,超過三分之一可以直接打開資料庫,其中包括 379 組資料庫密碼。另有 43 組公開伺服器的 SSH 登入、42 個 GitHub、GitLab 與 npm 權杖,以及 23 個 AWS 金鑰。擁有這些檔案的組織有 63 個,多半是不同規模的軟體公司。這些是研究掃描的分類,不是本站複核過的清單。
下圖是 THN 頁上的分類圖。副標寫 1,379 個不同秘密,並註明沒有測試是否仍有效。本篇不把圖上每一條長條再抄成另一張表,正文只使用 THN 文章裡寫出的數字。

THN 還寫:截至報導中的星期一,每一份含秘密的檔案仍在儲存庫的預設分支上,其中一半至少已放了 217 天。他們追到的 1,105 個儲存庫裡,有 539 個出現把 Claude 列為共同作者、並且改動這個檔案的提交。研究者把這點理解為,常常是 Claude 自己把檔案交進去。這是他們的解讀。
舊版本裡另有 734 個秘密,分布在 509 個儲存庫,通常是因為檔案後來被刪掉。74 個儲存庫的 211 個分叉仍帶著與原件相同的秘密。刻意提交的 .claude/settings.json 有 76,011 份,其中 298 份含秘密,多半也在允許規則裡。若把舊版本與存下的代理對話紀錄算進去,THN 寫總數是 1,994 個儲存庫裡的 2,539 個秘密。
在他們比較過文件的 16 個程式代理裡,THN 寫 Claude Code 是唯一被確認會預設把整段已核准指令存進專案檔的一個。
THN 寫,他們對全部複本跑了 gitleaks 與 TruffleHog,而且沒有做這兩個工具的驗證步驟。1,122 份含秘密的檔案裡,gitleaks 標出 564 份,TruffleHog 標出 643 份,有 215 份兩個都沒標出。許多漏掉的是寫在指令裡的密碼,而不只是已知的金鑰格式。
先換憑證再停止追蹤
THN 轉述的處理順序是先旋轉,再清理。從版本庫刪檔,不會讓已經露出的憑證失效。
- 在自己的 GitHub 組織搜尋
.claude/settings.local.json與.claude/settings.json,並檢查每個儲存庫的 git 歷史,包含檔案已經不在最新版本的儲存庫。 - 先旋轉這些檔案曾經保存的每一組密碼、權杖與金鑰,再做清理。
- 用
git rm --cached .claude/settings.local.json停止追蹤,並把這個檔名寫進專案自己的.gitignore。 - 在自己的電腦打開檔案,刪掉每一條含有秘密的規則,即使這份檔從未提交。
- 指令裡不要放入秘密。用秘密管理工具的變數名稱,讓存下來的規則只剩變數名。
- 核准一類模式,而不是單一一整段指令。
THN 並寫,沒有推上 GitHub 的複本仍要處理。它是專案資料夾裡的純文字 JSON,也可能留在套件、映像檔、壓縮檔或同步資料夾。安全團隊方面,他們建議把 .claude/、.cursor/、.gemini/、.specstory/ 這類代理資料夾,以及代理的記憶檔,當成和 .env 一樣可能含有秘密,在筆電與儲存庫都如此看待。並把它們納入提交前與 CI 的秘密掃描,包含 git 歷史,確認掃描找得到指令裡的密碼,而不只是已知金鑰格式。再把 .claude/settings.local.json 放進組織的 gitignore 範本。優先檢查與公開伺服器放在一起的憑證,因為那些是能直接連上的一組。
以上步驟跟隨 THN 對 Apiiro 建議的轉述。本篇沒有另加做法。
