ニュース

Claude Codeの「今後は確認しない」でパスワード流出、公開リポジトリ1,122件で確認

Claude Codeで「Yes, and don't ask again」を選ぶと、承認したコマンドがそのまま.claude/settings.local.jsonに保存されます。米Apiiroの調査では、公開コピー1,122件にパスワードやトークンが残っていました。該当者は削除より先に鍵の再発行が必要です。

Claude Codeでコマンドの実行許可を求められたとき「Yes, and don't ask again(今後は確認しない)」を選ぶと、承認したコマンドの文字列がプロジェクト内の .claude/settings.local.json に保存されます。コマンドにパスワードやトークンを直接書いていた場合、それも平文で残ります。米セキュリティ企業Apiiroの調査によると、GitHub上で公開されているこのファイルのうち1,122件に、データベースのパスワードやクラウドの鍵などの秘密情報が含まれていました。Claude Codeを使っていて、リポジトリを公開・共有している開発者は確認が必要です。

何が起きているのか

Claude Codeの公式ドキュメントによると、Bashコマンドで「今後は確認しない」を選ぶと、その許可は「リポジトリとコマンドごとに恒久的に」記録され、保存先はリポジトリ直下の .claude/settings.local.json です。Bash(npm test *) のようなパターンで保存されることもあれば、実行したコマンドがそのまま1行の許可ルールになることもあります。後者の場合、PGPASSWORD=... や mysql -p... のようにコマンドへ直接書いたパスワードも、そのまま許可ルールの一部として書き込まれます。

The Hacker News(11月7日)が伝えたApiiroの調査結果は次のとおりです。数字はいずれもApiiroの発表によるもので、見つかった秘密情報が現在も有効かどうかは検証していないとしています。ただし、事前に連絡した企業の1社は、鍵が有効だったと認めたそうです。

Apiiroの調査で分かったこと
出典: Apiiro調査(The Hacker News 2026年11月7日報道)

追跡できた1,105リポジトリのうち539件では、このファイルを変更したコミットにClaudeが共同作者として記録されていました。開発者が気づかないうちに、エージェント自身がファイルをコミットしている例が多いと考えられます。

なぜ.gitignoreをすり抜けるのか

Claude Code側にも対策はあります。設定のドキュメントによると、Claude Codeは settings.local.json を初めて作成するときに、利用者のグローバルなgit除外設定へ **/.claude/settings.local.json を追加します。そのパソコンでは、どのリポジトリでもこのファイルがコミットされない仕組みです。

ただし、この設定はそのパソコンの、その利用者のgit設定にしか存在しません。プロジェクトの .gitignore には書かれないため、別のパソコンや別のツールでコミットした場合や、手動でファイルを作った場合には効きません。一度コミットされたファイルは、後から除外設定を足しても履歴とフォークに残ります。

既存のスキャナーでも防ぎきれていません。Apiiroが1,122件にgitleaksとTruffleHog(どちらもリポジトリ内の秘密情報を探すツール)をかけたところ、検出できたのはそれぞれ564件と643件で、215件はどちらも見逃しました。見逃しの多くは、コマンドの途中に書かれたパスワードです。決まった形式を持つAPIキーと違い、ただの文字列に見えるためです。

この挙動は以前から報告されていました。2025年8月に立てられたIssue #5544は、60日間動きがなかったため、自動ボットによって「not planned」で閉じられています。研究者が挙げた関連報告4件はすべて同じボットが閉じており、Anthropicからの回答はなかったとされています。執筆時点で、Anthropicからこの件に関する公式な声明や修正は確認できていません。

保護される場合とされない場合
出典: Claude Code公式ドキュメント、Apiiro調査

日本の開発者にとっての意味

国内でもClaude Codeは個人開発から企業のチーム開発まで広く使われています。社内のGitHub Enterpriseや非公開リポジトリなら外部へは出ませんが、社内の誰でも読める場所にDBパスワードが残る点は同じです。npmパッケージやDockerイメージ、zipで配ったソース、クラウドの同期フォルダにファイルが紛れ込む経路もあります。

今回の件は、AIエージェントの「承認を省略する仕組み」そのものが秘密情報の置き場所になる、という新しい種類の問題です。GitHub Copilotの支援付き承認のように、各社が承認の手間を減らす機能を増やしているため、.claude/ や .cursor/ のようなエージェント用フォルダを .env と同じ扱いにする必要が出てきたと考えられます。エージェント周りのファイルが攻撃対象になる例としては、偽のClaude Code拡張がSSH鍵を仕込んだ件も記憶に新しいところです。

今日やること

  • 自分や組織のリポジトリで、履歴も含めて .claude/settings.local.json と .claude/settings.json を検索する。秘密情報が見つかったら、ファイルを消す前にパスワード・トークン・鍵を再発行する
  • git rm --cached .claude/settings.local.json で追跡を外し、プロジェクトの .gitignore と組織のテンプレートに追加する。手元のファイルからも秘密情報を含むルールを削除する
  • 今後はコマンドに秘密情報を直接書かず、$DB_URL のような環境変数やシークレット管理ツール経由で渡す。許可は個別コマンドではなく Bash(npm run *) のようなパターンで与える

出典

関連記事

ニュースの記事 →