powered by TechFeed
表示モード
Deep Dive

Claude Codeの「以後確認不要」オプションで承認コマンドの認証情報が設定ファイルに記録され、1,122件の公開リポジトリで実認証情報の露出を確認

11月10日、Dataconomyが「Claude Code flaw exposes passwords and keys on public GitHub repositories」と題した記事を公開した。Claude Codeのパーミッション設定の欠陥により、パスワードやAPIキーなどの認証情報がGitHubのパブリックリポジトリ上に露出している問題を、セキュリティ企業Apiiroの調査をもとに詳報している。

11月10日、Dataconomyが「Claude Code flaw exposes passwords and keys on public GitHub repositories」と題した記事を公開した。Claude Codeのパーミッション設定の欠陥により、パスワードやAPIキーなどの認証情報がGitHubのパブリックリポジトリ上に露出している問題を、セキュリティ企業Apiiroの調査をもとに詳報している。


「もう聞かないで」オプションが承認コマンドの認証情報をそのまま保存していた

セキュリティ企業Apiiroの調査によると、Claude Codeの設定ファイルに含まれる認証情報が、GitHubの公開リポジトリ上で誰でもアクセスできる状態になっていることが判明した。

問題の核心は、Claude Codeの「Yes, and don't ask again(承認、以後確認不要)」というパーミッションオプションにある。このオプションはコマンドの実行を一括承認する利便機能だが、承認したコマンドの全文が .claude/settings.local.json というローカルファイルに保存される仕様になっている。

開発者がデータベースへの接続、アプリのデバッグ、外部APIの呼び出しといった作業でClaude Codeを使う場合、コマンド中に認証情報を直接含めることがある。ツールはその認証情報をそのまま(verbatim)ファイルに書き込む——コマンドが承認されたという記録だけでなく、パスワードやキーの文字列ごと。つまり認証情報はコードとして直接コミットされるのではなく、承認済みコマンドの記録という形で間接的に設定ファイルへ混入する点が、このリスクを見落としやすくしている。

1,122件の公開設定ファイルに実認証情報

Apiiroの研究者Shmulik CohenとMatan Giladiは、GitHubのパブリックリポジトリ103,617件に存在する104,185件のClaude Code設定ファイルを調査した。その結果:

  • **約1.1%**(1,122ファイル)に実際の認証情報が含まれていた
  • 検出された認証情報は合計1,379件
  • ファイルの変更履歴や関連ファイルまで対象を広げると、1,994件のリポジトリから2,539件の認証情報を確認
  • 露出が確認された組織は63団体に及び、本番データベースのパスワード、データベースプロバイダーのクラウド管理APIキー、医療記録システムに紐づく認証情報なども含まれていた

Apiiroは実際にこれらの認証情報を使ったアクセス試行は行っていないが、1組織が露出したキーが有効だったと確認したと報告している。

なお、GitHubは公式のシークレットスキャン機能を提供しており、パートナー企業のAPIキーパターンなどを自動検出してアラートを送る仕組みを持つ。ただし今回のケースのようにコマンド文字列の一部として埋め込まれた認証情報は、パターンマッチングによる検出が困難な場合もある。

AIコーディングツールを介した認証情報漏洩はClaude Code固有の問題ではなく、過去にも類似ツールの設定ファイルやキャッシュが公開リポジトリに混入した事例が報告されてきた。AIツールの普及に伴い、こうした間接的な漏洩経路への注意が業界全体で高まっている。

.gitignore による保護が機能しないケース

Anthropicの公式ドキュメントには、この設定ファイルはグローバルの .gitignore に追加されるため、パブリックに共有されることはないと記載されている。しかしApiiroは、この保護が機能しないケースを複数指摘している:

  • ファイルがすでにGitの追跡対象(tracked)になっていた場合
  • プロジェクトを別の場所に移動・再設定した場合
  • その他、プロジェクト構成によって .gitignore の適用が外れる場合

グローバルの .gitignore(通常 ~/.gitignore_global や ~/.config/git/ignore に置かれるユーザー全体向けの除外設定)は、各リポジトリの .git/config で core.excludesFile が上書きされている場合や、リポジトリ内の .gitignore と競合する設定がある場合に、期待通り機能しないことがある。さらに git add -f(強制追加)によって明示的にステージングされたファイルは、.gitignore の設定に関わらずコミット対象となる。このため、グローバル設定に頼るだけでは不十分で、リポジトリ単位での確認が不可欠だ。

Anthropic側の対応状況

AnthropicのClaude Code責任者であるBoris Chernyは、11月7日のHacker Newsディスカッションにおいて、露出した認証情報の自動スキャン機能の追加や、自動パーミッションシステムへの追加保護の検討を表明した。ただし、具体的な修正内容やリリース時期は発表されていない。

今すぐ取るべき対応

Apiiroは開発者・組織に対して以下の対応を推奨している:

  • パブリックリポジトリで .claude/settings.local.json および .claude/settings.json を検索する
  • Gitの変更履歴(git log や git show)に削除済みのコピーが残っていないか確認する
  • これらのファイルに含まれていた可能性のある認証情報をすべてローテーション(再発行)する
  • 今後はコマンド内に認証情報を直接記述せず、$DB_URL のような環境変数で参照する

認証情報をコマンドラインに直書きすること自体、以前からセキュリティ上の悪習慣とされてきた。AIコーディングツールがその習慣をそのまま記録・保存する仕様と組み合わさったことで、従来は局所的だったリスクが公開リポジトリへの大規模な漏洩につながった構図だ。

詳細はClaude Code flaw exposes passwords and keys on public GitHub repositoriesを参照していただきたい。