SNAPSHOT
BTC/USD$75,905-0.0%
ETH/USD$2,236.40-0.4%
Coinbase(perp)$133.83-0.3%
S&P 500(perp)7,381.10-0.1%
米テック100(perp)26,963.00-0.1%
日経225(perp)58,175-0.1%
EUR/USD(perp)1.1157-0.0%
USD/JPY(perp)158.350+0.1%
Gold(perp)$4,061.90-0.3%
WTI(perp)$90.53+0.6%
米10年金利4.86%+0.4%
BTCボラティリティ(BVIV)42.20+2.0%
審査状態: auto_collectedソース: collected_liveas-of 23:03 JSTパケットID: alt20_2026110823トップの市場価格は Hyperliquid 上の先物(perp)価格です(米10年金利は米財務省)
SNAPSHOT 2026-11-08 23:03 JST

Signal

📡 Signal|Claude Code の承認ファイル、公開 1,122 件に秘密情報

Apiiro が GitHub 上の Claude Code の設定ファイル 104,185 件を調べ、1,122 件にパスワードや API キー。「もう聞かない」で承認したコマンドが秘密情報ごと残る仕組みと、Anthropic の説明を一次資料で読む。

LiveMakers 編集デスク

📡 Signal|Claude Code の承認ファイル、公開 1,122 件に秘密情報

アプリケーションセキュリティ企業の Apiiro は 11 月 5 日、GitHub で公開されている Claude Code の設定ファイル .claude/settings.local.json 104,185 件を調べ、1,122 件にデータベースのパスワードや API キーが残っていたと公表した。開発者が「Yes, and don't ask again」で承認したコマンドが、打ち込んだ秘密情報ごとファイルに保存され、コードと一緒に公開されていた。

AI に作業を任せる時間が長いほど承認の記録は伸び、そこに鍵が溜まっていく。見つかった中には決済サービスの本番用トークンやデータベースの管理者パスワードもあった。AI を開発に使う会社にとって、承認の履歴は .env と同じく、鍵の置き場所として管理する対象になった。

承認したコマンドが、そのまま許可の規則になる

Claude Code はシェルのコマンドを実行する前に許可を求める。「Yes, and don't ask again」を選ぶと、そのコマンドの文字列が許可の規則としてプロジェクトの .claude/settings.local.json に書き込まれ、次からは聞かれなくなる。データベースを調べるコマンドに接続先のパスワードが含まれていれば、パスワードも規則の一部として残る。

Apiiro は最新の Opus 5.5 と Fable 5.1 でも同じ動きを再現し、モデルではなく Claude Code というツールの動作だとしている。ドキュメントを比べた 16 のコーディングエージェントのうち、承認したコマンドを全文のままプロジェクト内のファイルに書くと確認できたのは Claude Code だけだった。

このファイルは本来、開発者の手元だけに置く個人用の設定だ。公式ドキュメントによると、Claude Code は Git リポジトリの中で初めてこのファイルを書くとき、その PC のすべてのリポジトリに効く Git の除外設定に **/.claude/settings.local.json を足す。Apiiro はこれで多くの場合は防げるとしたうえで、後から Git の管理を始めたフォルダ、別の PC での clone、すでに commit されたファイルには効かないと指摘する。除外はプロジェクトの .gitignore には書かれないため、プロジェクトと一緒には移らない。秘密情報が見つかったリポジトリのうち履歴を追えた 1,105 件では、539 件で Claude を共同作成者とする commit がこのファイルを変更していた。

1,122 件に何が残っていたか

1,122 件のファイルには、重複を除いて 1,379 個の秘密情報があった。最も多いのはデータベースのパスワード 379 個で、Supabase のサービス用キー 122 個と合わせると、全体の 3 分の 1 を超えるものがデータベースを直接開ける。ほかに Supabase のアカウントトークン 103 個、公開サーバーへの SSH ログイン 43 件、GitHub・GitLab・npm のトークン 42 個、AWS のキー 23 個、秘密鍵 6 個があった。

持ち主の組織が分かったものは 63 あった。データベース事業者自身の管理用クラウドキー、ソフトウェア会社が持っていた決済サービス Square の本番用トークン、決済スタートアップのデータベースのパスワード、医療記録アプリのデータベースの所有者パスワードなどだ。Apiiro は 11 月 2〜3 日に各組織へ知らせ、1 社はキーが実際に有効だったと認めた。

ただし Apiiro は、どの鍵も使って試してはいない。数えたのは既知の形式に合うキーと、公開サーバーの名前と同じ行にあるパスワードで、すべてが今も使えるとは限らない。

ファイルを消しても終わらない。過去の版には、今のどのファイルにも無い秘密情報が 509 リポジトリで 734 個残っていた。チームで共有する .claude/settings.json や、リポジトリに保存された AI との会話記録なども合わせると、Apiiro の集計は 1,994 リポジトリで 2,539 個になる。秘密情報を含むリポジトリの中央値では、ファイルは最初の commit から 217 日公開されたままだった。

一般的な検出ツールでも拾いきれない。Apiiro が gitleaks と TruffleHog を全ファイルにかけると、1,122 件のうち 215 件はどちらにも検出されなかった。PGPASSWORD= や sshpass -p の後ろに打ち込んだパスワードは、決まった形式を持たない普通の単語に見えるためだ。

Anthropic の説明と、見方が分かれる点

Apiiro は発表前に Anthropic へ調査を共有した。Claude Code を率いる Boris Cherny 氏は日本時間 8 日朝、Hacker News の議論で、Claude Code はこれまで秘密情報を消す処理を持っていなかったと書き、防ぐ方法を検討していると述べた。案として、許可を自動で判断するオートモードでこうしたコマンドを捕まえることと、基本的な秘密情報の検出を挙げ、いくつかを試作して比べてから出すという。

Cherny 氏は同時に、このファイルは作られるときに自動で除外されるので、今回のものは手で作って commit されたものだろうとも書いた。Apiiro が示した、別の PC での clone や Claude 自身の commit という経路とは、原因の見立てが分かれる。Cherny 氏はさらに、許可の規則は古いやり方だとしてオートモードを勧め、どの AI を使う場合でも GitHub などが提供する秘密情報の検出を有効にするよう求めた。

同じ仕組みは 2025 年 8 月から GitHub の issue で報告されていた。編集部で確かめると、Apiiro が挙げた 4 件はいずれも閉じられている。#5544 と #11982 は動きが無いとして自動で「対応予定なし」に、#13106 は自動で重複扱いになっており、どの件にも Anthropic の社員と表示されたコメントは無い。

GitHub に出なくても、手元の鍵は狙われる

このファイルは、公開されなくても安全とは言えない。プロジェクトのフォルダに平文の JSON で置かれているからだ。2025 年 8 月に npm で配られた改ざん版の Nx は、インストールされると端末の中の認証情報を集めて GitHub に上げ、手元の AI ツールにも探させようとした。Apiiro によれば、翌月の Shai-Hulud ワームは TruffleHog を持ち込んで端末を走査しており、その TruffleHog は 1,122 件のうち 643 件を検出できる。npm パッケージや Docker イメージ、zip に入ってファイルが外へ出ることもある。

開発者の端末を入口にした侵害は、暗号資産の業界でも続いている。Binance は 10 月 30 日、流出の初期調査で DevOps 担当者のノート PC が侵害された可能性を挙げた。取引所の API キーや決済のトークンを扱う作業を AI に任せる開発者は、承認のたびに鍵の写しを 1 つずつ増やしてきたことになる。AI に渡す権限の管理は、そのまま資産を守る仕組みの一部だ。

次に見るもの

確認先は GitHub の anthropics/claude-code の変更履歴 (CHANGELOG) だ。承認の保存方法の変更か、秘密情報の検出が載るかを見る。Cherny 氏は試作してから出すとしており、今後数回の更新が分かれ目になる。

Claude Code を使う開発者は、今日のうちに自分の .claude/settings.local.json を開き、許可の一覧にパスワードやトークンが無いかを確かめられる。見つけたら先に鍵を作り直し、それから規則を消す。Git で管理しているなら git rm --cached で追跡を外してプロジェクトの .gitignore に足し、git log --all で過去の版にも残っていないかを見る。これからは秘密情報をコマンドに直接打たず、$DB_URL のような環境変数で渡せば、規則に残るのは変数の名前だけになる。

ことば

  • settings.local.json — Claude Code が開発者ごと・プロジェクトごとの設定を置くファイル。「もう聞かない」で承認したコマンドがここに許可の規則として残る。チームで共有する settings.json とは分けて、手元だけに置く前提で作られている。
  • グローバル除外設定 — その PC のすべての Git リポジトリで無視するファイルを書いておく設定。プロジェクトの .gitignore と違ってリポジトリと一緒には配られないため、別の PC や clone では効かない。
  • シークレットスキャン — コードに紛れ込んだパスワードや API キーを探す検査。多くは決まった形式の鍵を探すため、コマンドの中に打ち込んだ普通の文字列のパスワードは見逃しやすい。

🔗 一次ソース

関連記事