Claude Codeの確認画面で「Yes, and don’t ask again」を選んだ人は多いはずです。そうして保存されたルールに残った秘密情報を、セキュリティ企業2社が公開GitHubで数え、GitGuardianの集計では検出時に有効だったものが5,343件ありました。次から聞かれなくなったあの承認は、いまどこで、何を抱えているのでしょうか。
セキュリティ企業のApiiroは2026年11月5日、Claude Codeの権限確認で「Yes, and don’t ask again」を選ぶと、選択肢が示す許可ルールに含まれたパスワードやトークンがそのまま.claude/settings.local.jsonに保存され、そのファイルが公開GitHubに残っていたとする調査を公表した。11月1〜3日の収集で見つかった104,185件のうち1,122件(1.1%)が本物と判定した秘密情報を含み、異なる秘密情報は1,379件だった。git履歴や共有の設定ファイル、会話記録まで含めると1,994リポジトリの2,539件に上る。
資格情報の有効性は検証していない。同社は追跡の解除と、ファイルが保持した資格情報すべての交換を勧めている。
From:
Coding Agents Copy Your Secrets to a Hidden File. Thousands Are on GitHub
From:
Claude Code settings.local.json Secrets: 17 months of exposure on GitHub, & Docker Hub
【編集部解説】
私もClaude Codeを日々使っています。実行前の確認画面は安全のための大切な仕組みですが、同じ画面が続けば、「Yes, and don’t ask again」に指が伸びるのは自然なことでしょう。
セキュリティ企業のApiiroと、続いて別の集計を公表したGitGuardianが光を当てたのは、その「次から聞かなくていい」の一回が、どこに、どんな形で残るのかでした。攻撃の話ではありません。便利さのための記録が、意図しないまま鍵の保管庫になるという、仕組みの話です。
承認の近道が、鍵の保管庫になるまで
Claude Codeが承認の必要なシェルコマンドを実行しようとすると、「実行してよいか」を尋ねる確認が表示されます。選択肢の2番目は「Yes, and don’t ask again for: 〜」で、コロンの後ろに、保存されるルールが表示されます。コマンドの先頭部分に「*」を付けたパターンのこともあれば、コマンドそのもののこともあります。選ぶと、その文字列が「次からは確認しない」ルールとして.claude/settings.local.jsonに書き込まれます。Anthropicのドキュメントも、保存されるルールは選択肢が示した範囲に限ると説明しています。
問題は、その文字列に何が入るかです。Apiiroが示した画面の例では、データベースに接続するコマンドの先頭にPGPASSWORD=とパスワードが並び、選択肢2の文面にも同じパスワードが表示されていました。選べば、パスワードを含んだまま、平文のルールとして保存されます。パスワードをコマンドに直接含める書き方だと、その値まで保存の対象になる。誰かが悪意を持ったわけではありません。
Apiiroは、これはモデルの判断ではなくClaude Code自体の挙動だとし、Opus 5.5とFable 5.1でも再現したと報告しています。
手元に置くためのファイルが、外へ出る道
このファイルは本来、手元に置いておくものです。ドキュメントによると、Claude Codeはgitリポジトリの中で初めてこのファイルに書き込むとき、このファイルを指すパターンをその利用者のグローバルのgit除外ファイルに加えます。そのPCでは、どのリポジトリでもコミットに入りにくくなる仕組みです。
Apiiroが指摘するのは、この守りがその人のそのPCの設定にとどまる点です。gitの管理外で作られ、除外の登録がないまま後からリポジトリになったフォルダや、除外設定のない別のPCでは働きません。すでにコミット済みのファイルにはgitの無視設定そのものが効かず、プロジェクト自身の.gitignoreにも書かれません。
見方が分かれている点もあります。AnthropicでClaude Codeを率いるボリス・チェルニー(Boris Cherny)氏は、Hacker News上のコメントで、ファイルは作成時に自動で除外されるので、公開されているのは手作業で作られてチェックインされたものだろうと述べました。一方でGitGuardianは、約3,000件を抜き出して調べた範囲では、秘密情報はすべて確認画面が書き込む形の許可ルールに入っていたとして、ファイルの中身は手で打ち込まれたものではないとしています。一方Apiiroは、経緯をたどった1,105リポジトリのうち539で、Claudeを共著者とするコミットがこのファイルを変えていたと数えています。両者に共通するのは、このファイルは手元に置くもので、共有するものではないという前提です。
数字は種類を分けて読む
報道によって見出しの数字が違うのは、数えているものが違うためです。Apiiroの1,122は、公開GitHubで見つかった.claude/settings.local.json104,185件のうち、本物と判定した秘密情報を含むファイルの数(1.1%)です。そのファイルに入っていた異なる秘密情報の数が1,379件。git履歴、チームで共有する.claude/settings.json、リポジトリに保存されたエージェントの会話記録などまで範囲を広げると、1,994リポジトリの2,539件になります。
Apiiroの「本物」は、既知の鍵の形式に合うものや公開されたホストと並ぶパスワードを候補に、誤検出をルールで除き、別のAIによる確認と一致したものを指します。Apiiroは、使えるかどうかを試していません。同社によると、通知を受けた1社は鍵が有効だったと認めました。
有効性に踏み込んだのが、11月9日に公表されたGitGuardianの集計です。2025年1月から2026年11月7日までに公開GitHubへpushされたすべての版を、削除や強制pushで消えた版も含めて対象にしています。settings.local.jsonでは、23,276リポジトリから異なる秘密情報31,088件を数え、検出時の読み取り専用の自動チェックで5,343件(17%)が有効でした。チェックできない種類は有効に数えないため、下限の値だとしています。共有の.claude/settings.jsonでは、8,271件のうち1,283件が有効でした。
GitGuardianは、Apiiroが「いま公開されているもの」を、自社が「これまでにpushされたもの」を数えたとして、問いが違い、どちらの数字も正しいと書いています。両社とも、セキュリティ製品を手がける企業です。月ごとの流入は2026年4月の12,535件(出現回数)を山に、10月には959件まで92%減りました。理由はまだ分からないとしています。
シークレットスキャナーとの相性も示されました。Apiiroの1,122ファイルのうち、gitleaksとTruffleHogのどちらも検出しなかったファイルが215ありました。PGPASSWORD=の後ろのパスワードは、鍵の形式を探す道具には普通の単語に見えるためです。
今日、自分で確かめられること
Apiiro、GitGuardian、ドキュメントが勧める手順を、「交換が先、片づけは後」の順に並べます。
まず、自分のPCにある.claude/settings.local.jsonのallowの一覧を読み、パスワードやトークン、接続文字列が入っていないかを確かめます。Claude Codeの中で/permissionsを開くと、ルールとその出どころのファイルを一覧できます。なお、ドキュメントによると、Windowsではこのファイルをリポジトリのルートへ集めず、セッションの作業ディレクトリにある.claude/settings.jsonと同じ場所に保存します。
次に、リポジトリの側です。ファイルがgitで追跡されていないか、過去の履歴に入っていないかを確かめます。秘密情報が見つかったら、ルールやファイルを消す前に、その鍵をすべて交換します。消しても、履歴やフォーク、クローンには残るからです。交換を済ませてから、秘密情報を含むルールを/permissionsなどで削除します。ファイルが今も追跡されているなら、git rm --cachedで追跡を外し、プロジェクト自身の.gitignoreにも加えてコミットします。
Dockerイメージを作っているなら、ビルドコンテキストのルートにある.dockerignoreに.claude/を加えます。プロジェクトのフォルダをCOPY . .でまとめて写すと、.gitignoreの除外は引き継がれません。GitGuardianによると、公開Docker Hubのイメージにも異なる秘密情報613件(うち有効99件)が入っていました。
これからの習慣としては、コマンドに秘密情報を直接打たないことが効きます。$DB_URLのように変数で参照すれば、ルールに残るのは変数名です。ルールの範囲は狭く保ちます。Bash(curl:*)のように、curlの引数や接続先を限定しない広いパターンは避け、使う操作に絞った接頭辞にとどめる、というのがGitGuardianの勧めです。選択肢2を選ぶ前に、コロンの後ろの文字列を一度だけ読む。そこに表示されたものが、保存されるルールです。
公開リポジトリでは、GitHubのシークレットスキャンが無料で自動的に動きます。コマンドの中のパスワードは拾いにくい場合があるので、「打たない習慣」と組み合わせておくと安心です。
Anthropicの現状
11月12日時点で、Anthropicの公式な声明や、リリースノート(最新はv2.1.322)に載ったこの件向けの製品の変更は確認できません。同じ挙動は2025年8月11日にGitHubのIssue #5544で報告され、不活動を理由に自動でクローズされました。
方向性を示したのは、チェルニー氏が米国時間11月7日にHacker Newsのスレッドに寄せたコメントで、会社としての発表とは位置づけが異なります。同氏は、これまで秘密情報の除去は手がけてこなかったとしたうえで、防ぐ方法を検討していると述べました。挙げたのは、auto modeでこうしたコマンドを捕まえること、基本的なシークレットスキャンを組み込むことで、試作して比べてから出すとしています。auto modeでも確認が出る場面では同じことが起こりうるという指摘には、「good catch」と応じました。
同氏が勧めるauto modeは、分類器が人の代わりに操作を審査するモードです。米国時間9月28日公開のv2.1.284から、権限モードを設定していない対話型のターミナルとVS Codeのセッションはauto modeで始まります。
「実行の記録」が増える時代の作法
両社の集計には、settings.local.jsonのほかに、エージェントの会話記録や指示ファイルなども並んでいました。AIに任せる仕事が増えるほど、「何を実行したか」の記録も増えていきます。記録は振り返りや引き継ぎを支える資産であり、同時に、鍵がまぎれ込みやすい場所でもあります。
AIの鍵が狙われた10月の開発基盤の侵害(関連記事)や、「誰が何を許可したのか」が問われたGitHub Copilot CLIの検証(関連記事)に続き、今回の件は、その許可がどこに、どんな形で残るのかを見せています。
承認の画面が「何を記録するか」まで見せてくれる設計と、鍵をコマンドに打たない使い方。作る側と使う側の両方から整っていけば、確認の手間を減らしながら、AIに安心して任せられる範囲はもっと広がっていくはずです。
【関連記事】
【解説】AI開発基盤9社が10月に侵害を公表、狙われたのはAIの鍵 NorthflankとChainalysisも
10月にAI開発基盤9社が侵害を公表した件の解説記事。攻撃者が環境変数に預けられたAIの鍵を狙った共通点を読み解いている。
GitHub Copilot CLI、暗号文で秘密情報を外部送信 研究者が実証
暗号文で包んだ指示により、Copilot CLIが.envの内容を外部へ送った検証。誰が何を許可したのかという線引きを問う。
【解説】韓国大統領らの旅券番号がVirusTotalで閲覧可能と報道|検査に上げたファイルはどこへ行くのか
検査のために上げたファイルが第三者から閲覧可能になったとの報道の解説記事。便利な操作の先でデータがどこへ行くのかを追う。
Anthropic「Claude Code」はこうして生まれた|16人の証言でたどる誕生から普及まで
Claude Codeの誕生から普及までを関係者16人の証言でたどる記事。ボリス・チェルニー氏の試作が出発点だった経緯を紹介。
【編集部後記】
Apiiroの記事には、一枚の画面写真が載っています。問いかけは「パスワードを見つけられますか?」。データベースにつなぐ長いコマンドの中で、パスワードは3行目の途中にあり、選択肢2の文面にも同じ文字列が並んでいました。
答えを知ってから見れば、すぐに目に入ります。知らずに、その日10回目の確認画面で見ていたら、気づけたかどうか。次に確認画面が出たら、私はまずコロンの後ろの1行を読んでから選ぶつもりです。
【用語解説】
.claude/settings.local.json
Claude Codeが、プロジェクトごとに利用者個人の設定を保存するファイルである。権限確認で「Yes, and don’t ask again」を選ぶと、承認したルールがここに書き込まれる。手元に置く前提のファイルで、共有用の.claude/settings.jsonとは役割が異なる。
.gitignore
gitに追跡させないファイルを列挙する設定ファイルである。リポジトリの中に置かれ、クローンした人にも同じ設定が引き継がれる。すでに追跡しているファイルには効かない。
グローバルのgit除外ファイル
その利用者のPC上のすべてのリポジトリに共通して適用される、gitの無視リストである。core.excludesFileで場所を指定でき、未設定なら~/.config/git/ignoreなどが使われる。リポジトリには含まれないため、ほかのPCには引き継がれない。
git rm –cached
ファイルを手元に残したまま、gitの追跡対象から外すコマンドである。過去のコミット履歴に残った内容は消えない。
.dockerignore
Dockerイメージを作るとき、ビルドに渡すファイルから除外するものを列挙する設定ファイルである。.gitignoreとは別の仕組みで、gitが無視しているファイルでも、ここに書かなければイメージに入りうる。
PGPASSWORD
PostgreSQLのコマンドラインツールが読み取る、接続用のパスワードを渡す環境変数である。コマンドの先頭に書くと、そのコマンドを実行するときだけパスワードが渡る。
シークレットスキャン
コードやコミット履歴の中から、APIキーやトークンなどの秘密情報を検出する仕組みである。多くは既知の鍵の形式を手がかりにするため、形式を持たないパスワードは見つけにくい。
auto mode
Claude Codeの権限モードの一つである。操作ごとに人が承認する代わりに、分類器が操作を審査する。2026年9月のv2.1.284から、権限モードを設定していない対話型のターミナルとVS Codeのセッションでは、auto modeで始まるようになった。
Hacker News
Y Combinatorが運営する、技術者向けのニュース共有・議論サイトである。投稿された記事にコメントで議論が付き、開発企業の担当者が個人として発言することもある。
【参考リンク】
Apiiro(外部)
アプリケーションとAIエージェント開発のセキュリティ製品を手がける企業の公式サイト。今回の調査記事もブログで公開している。
Settings files and precedence(Claude Code Docs)(外部)
Claude Codeの設定ファイルの種類と優先順位の公式ドキュメント。settings.local.jsonの除外の仕組みを説明する。
Configure permissions(Claude Code Docs)(外部)
Claude Codeの権限ルールの公式ドキュメント。don’t ask againで保存される範囲と/permissionsを説明する。
GitGuardian(外部)
秘密情報の検出と管理の製品を手がけるセキュリティ企業の公式サイト。公開GitHubを継続的に監視した調査をブログで公開している。
About secret scanning(GitHub Docs)(外部)
GitHubのシークレットスキャンの公式解説。リポジトリ内の鍵やトークンを検出する仕組みと、利用できる条件を説明している。
【参考記事】
Claude Code’s “Don’t Ask Again” File Exposes Passwords and Keys in 1,122 Public Copies on GitHub(外部)
The Hacker Newsの記事。Apiiroの数値と推奨手順を伝え、関連するIssueがすべて自動でクローズされた経緯にも触れる。
Approved Once, Leaked Forever: Secrets in Claude Code Settings Files(外部)
CSAの研究ノート。Apiiroの数値を整理し、組織向けの対策を即時・短期・戦略の3段階で示す。AI支援で作成された文書。
Claude Code approval files found exposing company secrets on GitHub, says Apirro researchers(外部)
iTWireの記事。収集期間や開示の日付を伝え、見つかったのは露出のリスクであり、侵害の実証ではない点を丁寧に書き分けている。



