Claude Code許可記録から認証情報2539件が流出

セキュリティ企業Apiiroの研究者は、GitHubの公開リポジトリにあるClaude Codeのローカル設定ファイル、Git履歴、エージェントの会話ログを調べ、実在の認証情報2,539件を見つけた。対象は1,994のリポジトリ、63の組織にまたがる。流出していたのは、Azureのデータベースパスワード、Squareの本番環境トークン、SSHのrootログイン情報、さらに医療記録データベースのオーナーパスワードなどだ。

原因は、多くの開発者が毎日のように押しているボタンにあった。

Illustration: a key-marked note slips from a laptop, symbolizing secrets leaked through Claude Code settings

「今後は確認しない」が書き込むもの

Claude Codeはシェルコマンドを実行する前に許可を求める。ユーザーが「はい、今後は確認しない」を選ぶと、そのルールはプロジェクトディレクトリ内の.claude/settings.local.jsonに保存され、以後は同種のコマンドでダイアログが出なくなる。問題は、保存されるのがコマンドの原文であることが多い点だ。コマンドにデータベース接続文字列やAPIトークン、キーが直接含まれていれば、それらもそのままファイルに残る。

Anthropicのドキュメントによると、Claude Codeはこのファイルを作成する際にGitの無視対象として設定する。しかしApiiroの集計では、この防御は複数の場面で機能していなかった。プロジェクトを別のPCにクローンした場合、通常のフォルダーを後からGitリポジトリにした場合、ファイルが強制的にバージョン管理へ追加された場合などで、settings.local.jsonが一緒にプッシュされてしまう可能性がある。

Apiiroが示した数字は次のとおりだ。

  • 公開GitHubには104,185件のsettings.local.jsonがあり、103,617のリポジトリに分布している。
  • そのうち1,122件(約1.1%)に実在のシークレットが含まれ、重複を除くと1,379件になる。
  • 追跡できた1,105のリポジトリのうち539では、Claudeが共同作成者として署名し、このファイルを変更したコミットが確認された。

ファイルが大きいほどリスクは高い。8KBを超えるファイルでは約10件に1件が本物のキーを抱えており、500バイト未満では500件に1件にも満たない。許可ルールは1件ずつ積み上がるため、「今後は確認しない」を押し続けた期間が長いほど、ファイルに溜まるものも増える。

Apiiroは、これらの認証情報が現在も有効かどうかは検証していない。リポジトリの所有者がファイルを削除しても、Git履歴や既存のフォークにはキーが残っている可能性がある。

この問題は以前から報告されていた

2025年8月11日には、承認されたコマンドがその中のAPIキーやトークンごと、一字一句そのままsettings.local.jsonに保存されるという報告が、Claude Codeのイシュートラッカーに寄せられていた。この報告は60日間動きがなかったため自動的にクローズされ、修正はされなかった。

1年余りを経て、同じ仕組みが体系的なスキャンで洗い出された。Claude Codeの責任者であるBoris Cherny氏はHacker Newsで、設定ファイルはもともとバージョン管理に入れるべきものではないと述べ、チームが予防策を検討中で、シークレットスキャンをClaude Code自体に組み込むことも考えていると回答した。それまでは、ユーザー自身でシークレットスキャンツールを実行して整理するよう勧めている。修正版がいつ公開されるかについて、Anthropicは時期を示していない。

Claude Codeがローカルデータの扱いで指摘されたのは、今月これが初めてではない。月初には、一部のネットワークリクエストにユーザーのメールアドレスが付与されると指摘され、そのときも、まず緩和策が出され、正式版が後から続く形だった。両件に共通するのは、エージェント型ツールがユーザーへの確認を減らすために情報をディスクへ保存したり外部へ送ったりしており、開発者には何が記録されているのか気づきにくいことだ。

開発者が今できること

Claude Codeを使ったことがあるなら、まずローカルとリモートのリポジトリで.claude/settings.local.jsonと.claude/settings.jsonを検索し、中に平文の認証情報を含むコマンドがないか確認したい。流出が確認されたキーは、ファイルを消すだけでは不十分で、失効させて再発行する必要がある。

より確実なのは、キーをコマンドライン引数に書かず、環境変数やシークレット管理ツールの参照に置き換える習慣をつけることだ。加えて、GitHubのシークレットスキャンやコミット前チェックなどを有効にしておけば、この種のファイルをプッシュ前に止められる。

参考資料:IT之家、Apiiro調査レポート、CocoLoop、Ars Technica、The Hacker News。設定ファイル数、シークレットを含むファイルの割合、認証情報の総数、影響を受けた組織数を照合。