Claude Codeの「Yes, and don’t ask again」機能、パスワードやAPIキーがGitHubで露出

Claude Codeの承認オプション「Yes, and don’t ask again」を選ぶと、認証情報を含むシェルコマンドがプロジェクトの設定ファイルに保存されることがあります。開発者がそのファイルをGitHubにコミットすると、パスワードやAPIキーが外部に露出する恐れがあります。

Apiiroの研究者Shmulik Cohen氏とMatan Giladi氏は11月5日、1,994件の公開リポジトリで計2,539件の固有のシークレットを確認したと報告しました。

この調査では63の組織が影響を受けていました。攻撃者の操作や悪意あるプロンプトがなくても、権限の永続化によって日常的なデータベースのトラブルシューティングが平文の認証情報の露出につながり得ることが明らかになっています。

問題の中心は.claude/settings.local.jsonです。Claude Codeが認証情報を含むコマンドを提案した際に恒久的な承認を選ぶと、そのコマンドが文字列のまま許可リストのルールとして保存されます。

接続文字列や認証ヘッダー、環境変数の代入に埋め込まれたパスワードは、その結果として永続的な設定データになります。

DNS TXTペイロードの実行とは異なり、今回の露出に注入されたペイロードは不要です。承認されたコマンド自体がシークレットを抱えたままファイルに残り、通常の開発ワークフローを経て、そのファイルがバージョン管理に入り込む可能性があります。

Claude Codeは、既存のリポジトリ内でローカル設定ファイルを作成する際、そのファイルを開発者のグローバルなGit無視設定に追加して保護を試みます。しかし、この除外設定はプロジェクトと一緒には引き継がれません。

すでに追跡されているファイルや、後からリポジトリとして初期化されたディレクトリ、別の作業環境へのクローンについては、確実な保護になりません。

Apiiroは、シークレットを含むとして追跡した1,105件のリポジトリのうち539件で、Claudeが共同作成者となったコミットがこのファイルを変更していたことを確認しました。自動化されたコミットが、意図しない情報漏えいのリスクを拡大させ得ることを示しています。

研究者らは公開されているローカル設定ファイル104,185件を調べ、1,122件のファイルから1,379件の固有のシークレットを特定しました。内訳には、データベースのパスワード379件、Supabaseのサービスロールキー122件、Supabaseのアカウントトークン103件、SSH認証情報43件が含まれます。

関連するGitHub ActionsのOIDCトークン露出は、開発者の認証情報がソースファイル以外でも精査に値することを示しています。

Apiiroが挙げた例には、本番環境のAzure PostgreSQLのパスワード、Squareの本番トークン、医療記録データベースの所有者パスワードがあります。ただし研究者らは、収集の過程で認証情報の有効性を検証せず、露出したホストにも連絡していません。

検出も不完全でした。Gitleaksは影響を受けたファイル564件を、TruffleHogは643件を検出しましたが、215件は両方のスキャナーをすり抜けています。PGPASSWORD=、sshpass -p、mysql -pの後に続く一般的なパスワードは、特定のプロバイダーを示す識別可能なシグネチャを持たないことが多いためです。

危険は開発者の作業環境にも及びます。npmのライフサイクルスクリプトによる認証情報の窃取はローカルの開発環境を標的にしています。GitGuardianによるNxの調査では、AIクライアントを巻き込んでシークレットを探索させようとするマルウェアも確認されました。

Apiiroはさらに、より広範なデータセットの中で、共有設定やリポジトリ履歴、エージェントのトランスクリプト、デプロイメモからも認証情報を見つけています。

影響を受けた開発者は、ファイルを削除する前に、露出した認証情報をローテーションしてください。過去のコミットやフォーク、クローンにはコピーが残るためです。git rm --cachedで.claude/settings.local.jsonの追跡を解除し、リポジトリ単位の無視ルールを追加したうえで、シークレットを含む承認をローカルから削除します。

認証情報をそのまま記述するのではなく、シークレットマネージャーを介した環境変数の参照を使い、承認するコマンドパターンは範囲を絞ったものにすることをお勧めします。

セキュリティチームは、エージェントの設定ディレクトリとGit履歴をスキャンし、コマンドに埋め込まれたパスワードにも検出対象を広げてください。公開されているサービスと組み合わさった認証情報は、直ちに優先して対処する必要があります。

16,000以上のSOCチームがANY.RUNを活用し、脅威調査を効率化して手作業を削減しています。チームでの導入を検討する

翻訳元: https://cyberpress.org/claude-codes-yes-and-dont-ask-again-feature/

本記事は cyberpress.org の記事を翻訳・要約したものです。