跳到主要內容

Claude Code 憑證外洩解讀:永久批准為何留下密碼?Anthropic 回應與防線(2026)

最後更新: ·
Claude Code 憑證外洩:批准紀錄、留存鑰匙與公開雲端的原創示意圖

2026 年 11 月 5 日,Apiiro 的 Shmulik Cohen 與 Matan Giladi 發布了〈Coding Agents Copy Your Secrets to a Hidden File. Thousands Are on GitHub〉,把 Claude Code 憑證外洩的焦點放在一個容易忽略的地方:你按下「以後別再問」之後,批准內容究竟存在哪裡。原文於 11 月 8 日補上 Claude Code 團隊的回應。

Apiiro Claude Code 憑證外洩研究原文標題、作者與發布日期
圖/Apiiro 原始文章頁面;AlphaLab 擷取標題與作者區並加上瀏覽器外框。點圖可閱讀原文。

先讀研究發現,再對照 Anthropic 與 Git 的文件,最後判斷應該改哪一道防線。核心問題很具體:允許執行一個動作,和允許長期保存它用到的密碼,是兩個不同決定。

一、Claude Code 憑證外洩:批准,如何變成留存?

This is Claude Code’s own behavior, not the model’s:

中文:這是 Claude Code 執行工具本身的行為,而不是模型本身的行為。

Apiiro,原文機制說明;冒號後另接其測試敘述。

這句話值得留下,因為它把問題從「模型會不會說錯話」移到「產品會把哪些內容寫進檔案」。Anthropic 的權限文件證實:選擇永久批准時,規則會存入 .claude/settings.local.json;Bash 的批准可跨未來工作階段生效。規則可以精確匹配命令,也可以使用模式。若把含密碼的命令字串存成規則,密碼便跟著成為持久資料。

可以把它想成門房留下通行名單。名單需要記住「誰可以做哪件事」,卻不該順便抄下保險箱密碼。執行當下需要一份憑證,並不代表批准紀錄也需要保留其明文。這是保存格式與資料流的設計問題,不能靠換一個推理分數更高的模型來推定已解決。

Apiiro 遮蔽敏感值的設定規則範例與兩款掃描器結果
圖/Apiiro。這張原圖展示一條已遮蔽密碼與主機資訊的規則,以及作者測試中兩款掃描器的結果;不是 AlphaLab 的重現測試。

二、2,539 是調查結果,不能直接當成入侵數

Apiiro 於 11 月 1~3 日搜尋公開 GitHub:104,185 份本機設定檔中,1,122 份含其判定的秘密值,合計 1,379 個;擴及歷史與其他 Agent 產物後,報告為 1,994 個儲存庫、2,539 個不同秘密值。這些是研究方的統計,本文未獨立重掃。

其方法結合格式、公開主機脈絡、排除規則與遮蔽後的 LLM 複核;部分其他產物僅用規則分類。作者明言未使用憑證或連線測試。因此,這份研究支持「敏感值被公開」,不等同逐一證實仍有效、有人登入成功,或已有多少組織遭入侵。

這個界線不會讓風險消失。對防守者而言,公開的鑰匙即使尚未證實被使用,也值得撤換;對報導者而言,卻不能把「看起來像可用鑰匙」直接寫成「已經有人進門」。應變可以保守,對事實的描述仍要精準。

報告還稱兩款掃描器都漏掉部分檔案,並把範圍延伸到對話、記憶與交接產物。它要推動的改變,是把 Agent 的紀錄一併納入秘密值管理,而非只盯著 .env。Apiiro 本身販售應用安全產品,這讓我們更需要查方法與分母,而不是把商業動機當成推翻結果的證據。

三、官方回應談的是防護方向,交付狀態要另外認

Boris Cherny 在 11 月 7 日的 Hacker News 回應中表示,團隊過去未做秘密值清理,正在思考如何預防;也建議使用 Auto Mode 與秘密值掃描。另一則回覆提到,會先對幾種方法做原型、了解取捨,再出貨。

Going to prototype a few of these to understand the tradeoffs better before we ship something.

中文:會先把其中幾種方法做成原型,更了解取捨,再交付。

Boris Cherny,Hacker News 討論串中的回覆

讀這段 團隊公開討論,應把「正在評估」放在正確時態。它證明負責人回應了問題,也說明候選方向;它本身不是某個已發布版本通過防漏驗收的證明。本文截至 2026 年 11 月 9 日查閱的證據,採用這個有限判斷,不把原型承諾改寫成修補完成。

同樣地,官方安全文件把 Auto Mode 描述為由另一個分類器審查動作;Sandbox 文件則說明作業系統層的檔案與網路限制。兩者各有工作:前者審查動作,後者限制 Shell 可達範圍。要知道秘密值是否會進入批准檔、輸出或成品,仍得檢查實際保存路徑與產物。

四、Claude Code 憑證外洩的關鍵:本機排除與專案邊界

這裡需要修正一種過度簡化:不能說 Claude Code 完全不處理 Git 排除。目前官方設定文件明列,工具在 Git 儲存庫首次寫入本機設定檔時,會把對應模式加入使用者的全域 Git 排除檔;若自行建立,則應自行加入排除。共享的 .claude/settings.json 與個人的 settings.local.json,用途也不同。

但「這台電腦會忽略它」和「這個專案到哪裡都會忽略它」是不同保證。Git 官方文件說明,全域排除屬於使用者設定;需要隨 clone 分發的模式應放進專案的 .gitignore。更關鍵的是,忽略規則不影響已經被 Git 追蹤的檔案。先確認追蹤狀態,才知道補一行排除能解決哪一段問題。

因此,單憑「工具預設會忽略」,無法倒推出每一份公開副本一定由使用者手動建立。那需要逐案的建立時間、追蹤紀錄與工具版本。反過來,找到公開副本,也不能推定每個版本在所有環境都不會排除。對產品責任與使用者責任的判斷,最好落到可重跑的情境,而不是猜誰按了哪顆按鈕。

五、AlphaLab 的判讀:把授權和秘密值分開設計

我同意:設定與紀錄應列入機密資料清冊

這起事件有價值的提醒,是批准紀錄也可能成為資料副本。對維運團隊而言,清冊應沿著流程走:輸入從哪裡來、誰能讀、工具如何取得憑證、哪些內容落盤、哪些檔案會離開電腦。只檢查原始憑證檔,容易錯過後來產生的副本。Geiger 設定曝險盤點可補足清冊思路,但掃描報告本身同樣需要控管。

我存疑:換成自動批准,就能回答全部問題

降低人工確認疲勞有其價值;但「哪個動作值得執行」與「哪些字元值得保存」需要不同驗收。更好的評估題應是:含假憑證的命令經過批准後,設定、對話、日誌與交件各留下什麼?這是建議的測試設計,本文未對 Claude Code 執行重現,也未接觸外洩帳戶。

執行隔離與秘密值生命週期也應分開看。一個動作可能被允許,憑證卻仍應短效、限權、可撤銷;一個秘密值可能沒有進入 Git,卻仍可能落在備份與封裝成品。Auto Mode 與 Sandbox 的分工以及 Agent 撤權與既有 Token 的界線,分別補上這兩層問題。

下一份好證據,應證明秘密值走到哪裡為止

我會追蹤的驗收很具體:工具版本固定、使用合成秘密值,分別測未追蹤、已追蹤與跨機器 clone 的專案;記錄批准前後的檔案差異,再檢查歷史與輸出成品。通過某個案例,只對那個配置成立。廠商若公開這類測試,比一句「更安全」更能幫團隊決定是否導入。

六、現在先做什麼:先讓公開的鑰匙失效

如果你懷疑憑證已公開,先到發行服務撤銷或輪替,核對用途與存取紀錄,再安排清理。GitHub 的處理指南也是先撤銷/輪替,再評估歷史清除;只刪最新檔案,無法收回他人的 clone 與 fork。處理歷史需要協調,別在緊急狀況直接對共享儲存庫強推。

接著在自己的專案私下檢查本機與共享設定、暫存變更及歷史:不要把整份含值輸出貼進聊天、工單或新的公開報告。對尚未曝光的憑證,優先讓受控執行工具從秘密值管理取得所需值,批准規則只描述必要動作。即使改用環境變數,也要避免展開、除錯輸出或工具紀錄再次寫出真值。

最後,啟用適用於儲存庫的 GitHub 秘密值掃描,並用合成資料驗證團隊使用的掃描規則。掃描、提交檢查、權限限制與憑證輪替各擋不同階段;不要把其中一道通過,當成其他階段的證明。要理解這些檢查如何放回執行循環,可以接著讀 Agent Harness 的分工與 最小 Harness 實作。

今天最值得做的一件事,是確認你的永久批准紀錄,究竟只記了動作,還是也留下了鑰匙。如果已經公開,先換鑰匙;如果還留在本機,先把保存路徑整理清楚,再談提高自動化程度。

接著閱讀

左右滑動查看更多推薦

ALPHALAB 社群

有問題?來 Telegram 聊

和 Terry、編輯、其他網友一起討論這篇文章。提問、分享觀點,回覆更即時。

加入 Telegram 討論

📩 訂閱 AlphaLab 電子報

週日 Weekly 週報+週二、週四 Alpha Signal,每週最多三封。

我們不會 spam,隨時可退訂。已訂閱?管理訂閱偏好(會寄登入連結到你的信箱)

主題篩選與退訂說明

寄送日期以台灣時間為準。主題偏好會篩選每期精選,並非每篇新文章的即時通知;當期符合主題的文章不足時會略過寄送。

未勾選任何主題會收到所有主題的精選,並不會停止寄信。

取消勾選 Alpha Signal 可停止週二、週四短報,仍保留週日週報。若要停止所有電子報,請使用信件底部的「取消訂閱」。