セキュリティとプライバシー

Claude Codeの「再度確認しない」機能が公開リポジトリでシークレットを漏洩

Apiiroの研究者は、AnthropicのAIアシスタント「Claude Code」によって保存されたパスワードやAPIキーが、1,122件の公開GitHubリポジトリで露出していることを発見しました。

ノートパソコンの横にある机の上で、デジタルキーがガラス製のフォルダーから漏れ出している様子。
この記事用に生成されたイラスト

英語の原文から自動翻訳されました。

AnthropicのClaude Codeを通じて承認されたシェルコマンドに入力されたパスワードやAPIキーが、公開GitHubリポジトリに露出しています。セキュリティ企業Apiiroは2026年11月6日、ユーザーが「はい、次回から確認しない」オプションを選択した場合、このAIアシスタントがこれらの認証情報を平文で保存することを報告しました。

何が起きたか

開発者がClaude Codeを使用する際、アシスタントはシェルコマンドを実行する前に許可を求めます。ユーザーが特定のコマンドを永続的に承認することを選択すると、ツールはその正確なコマンド文字列(埋め込まれたシークレットを含む)を、.claude/settings.local.jsonという名前のローカル設定ファイルに保存します。ツールはこのファイルをバージョン管理から除外するために、ユーザーのグローバルgit excludesに追加しようとしますが、プロジェクトの.gitignoreには追加しません。その結果、このファイルが手動またはエージェント自体によってコミットされると、リポジトリの履歴の一部となります。

Apiiroは公開GitHubリポジトリをスキャンし、103,617のリポジトリにまたがる104,185件のこの設定ファイルのコピーを特定しました。そのうち1,122件のファイルには少なくとも1つのシークレットが含まれており、合計1,379件の一意な露出した認証情報が確認されました。漏洩したデータには、379件のデータベースパスワード、43件の公開サーバー用SSHログイン認証情報、42件のGitHubやnpmなどのサービス用トークン、そして23件のAWSキーが含まれています。研究者らは、通知を受けたある企業が、このメカニズムを通じて有効なキーを露出させていたことを確認しました。

現在のブランチからファイルを削除しても、gitの履歴やフォークからは消去されないため、露出は持続的です。追跡されたリポジトリのうち539件では、Claudeを共著者として記載したコミットがこのファイルを修正しており、エージェントが自身の設定変更を頻繁にコミットしていることが示唆されています。さらに、チームが意図的にコミットする共有ファイル.claude/settings.jsonのコピー298件にもシークレットが含まれていました。履歴バージョンやエージェントのチャットログを含めると、露出したシークレットの総数は1,994のリポジトリにまたがり2,539件に上昇します。

仕組み

この脆弱性は、Claude Codeがコマンド承認を処理する方法に起因しています。デフォルトでは、シェルコマンドを実行する前にユーザーにプロンプトを表示します。ユーザーが「はい、次回から確認しない」を選択すると、システムは.claude/settings.local.jsonに許可ルールを作成します。このルールは、繰り返しのプロンプトを避けるために将来のコマンドと一致します。承認されたコマンドがパターンではなく正確な文字列である場合、そのコマンドに入力されたパスワードやトークンは、JSONファイルにそのまま保存されます。

Claude Codeはリポジトリ内でファイルが最初に作成された際に、ユーザーのグローバルgit excludesにファイルを追加しますが、この保護は特定のマシンとユーザーに限定されます。他の共同作業者に伝播せず、誤ったコミットからも保護しません。さらに、標準的なシークレットスキャニングツールはこれらの漏洩を見逃すことがよくあります。テストでは、gitleaksは1,122件の露出したファイルのうち564件しか検出しませんでした。TruffleHogは643件を検出しました。両方のツールは215件のファイルを完全に検出しませんでしたが、これは既知のキー形式を探す一方で、mysql -pのようなコマンドに埋め込まれたパスワードは通常のテキストとして表示されるためです。

主要な詳細

  • Apiiroは、少なくとも1つのシークレットを含む.claude/settings.local.jsonの公開コピー1,122件を発見しました。
  • 露出したシークレットには、379件のデータベースパスワード、43件のSSHログイン、23件のAWSキーが含まれます。
  • レビューされた16個のコーディングエージェントの中で、承認された完全なコマンドをデフォルトでプロジェクトファイルに保存することが確認されたのはClaude Codeのみです。
  • gitleaksやTruffleHogなどの標準スキャナーは、露出したシークレットのうち215件を検出できませんでした。
  • この動作に関する4件のバグレポートは、Anthropicからの応答なしに自動ボットによってクローズされました。
  • ファイルがメインブランチから削除された後でも、シークレットはgitの履歴やフォークでアクセス可能なまま残ります。

なぜ重要なのか

ソフトウェアエンジニアにとって、この事件はAIコーディングアシスタントのセキュリティモデルにおける重大なギャップを浮き彫りにしています。開発者は、ツールがgit除外を管理すると主張する場合、特にローカル設定ファイルが公的な露出から安全であると仮定しがちです。しかし、グローバルgit設定への依存は、ファイルをコミットする共同作業者やローカル設定でのミスがあれば、機密データを漏洩させる可能性があることを意味します。AIエージェント自身がこれらのファイルをコミットする可能性があるという事実は、リスクを増大させます。なぜなら、開発者はアシスタントが行うすべての変更を確認するとは限らないからです。

セキュリティチームは、エージェント固有のフォルダーやメモリファイルを.envファイルと同じ厳重さで扱う必要があります。コマンド文字列に埋め込まれたパスワードを検出できない標準スキャニングツールの失敗は、既存のCI/CDパイプラインが偽りの安心感を提供する可能性があることを意味します。組織は、従来のAPIキー形式とともにコマンド内のパスワードがフラグ付けされるよう、プリコミットフックとシークレットスキャニング設定を更新して、これらの新しいベクトルを具体的にターゲットにする必要があります。

できること

  • gitの履歴も含めて、GitHub組織内で.claude/settings.local.jsonおよび.claude/settings.jsonを検索してください。
  • クリーンアップを試みる前に、これらのファイルに一度でも保存されたすべてのパスワード、トークン、キーをローテーション(更新)してください。
  • git rm --cached .claude/settings.local.jsonを実行し、ファイルをリポジトリの.gitignoreに追加してください。
  • マシン上のローカル設定ファイルを直接確認し、ハードコードされたシークレットを含むルールを削除してください。
  • シークレットを直接入力する代わりに、コマンド内で環境変数(例:$DB_URL)を使用し、保存されたルールが変数名を参照するようにしてください。
  • 単一の正確なコマンドではなく、コマンドパターン(例:npm run:*)を承認することで、具体的な引数の保存を防いでください。
  • #ai security
  • #claude code
  • #secret management
  • #github
  • #developer tools

Bytechapストアのツール

続きを読む

セキュリティとプライバシー

Artex AIエージェントの露出により、グローバルな標的への自動サイバー攻撃が可能に

研究者らは、オンライン上で保護されていないArtex AIハッキングツールのインスタンスが800件以上存在することを発見し、これらが金融およびクラウドサービスにおける重大な侵害と関連していることを突き止めました。

すべての記事