製品・サービス · · Team LATENT
Claude Codeの「今後は確認しない」と公開リポジトリの秘密情報 1,122ファイルの内訳と2つの検出ツールが見逃した19%
セキュリティ企業のApiiroは、公開GitHubにあるClaude Codeの設定ファイル104,185件を調べ、1,122件に1,379件の秘密情報を見つけた。承認の画面で「今後は確認しない」を選ぶと、パスワードを含むコマンドがそのまま許可の規則として残る。報告の原文、Claude Codeの文書と変更履歴、GitHubのissueで仕組みを確かめ、秘密情報の種類、ファイルの大きさとの関係、検出ツールの見逃し、履歴に残る件数を計算した。自分のリポジトリの点検の手順も載せる。
データベースの中身を確かめてほしいとClaude Codeに頼むと、接続のパスワードを含むpsqlのコマンドが提案されることがある。承認の画面で「Yes, and don't ask again」を選ぶと、Claude Codeはそのコマンドを実行し、コマンドの文字列を許可の規則として.claude/settings.local.jsonに書く。パスワードは平文のまま、プロジェクトのフォルダの中に残る。
セキュリティ企業のApiiroは11月5日、このファイルを公開GitHubで調べた報告を出した。104,185件のうち1,122件に、パスワードやAPIキーなど1,379件の秘密情報があった。報道では2,539件という数字も広まったが、これは別のファイルや履歴を合わせた値だ。この記事は数字ごとに何を数えたかを分け、秘密情報の種類、ファイルの大きさとの関係、検出ツールの見逃し、履歴に残る件数を計算する。最後に、自分のリポジトリを点検する手順を載せる。
数値は11月8日に、Apiiroの報告の原文(11月5日公開、8日更新)、Claude Codeの公式文書と変更履歴、GitHubのissueで確かめた。Apiiroは見つけた認証情報を一つも試していない。報告の「本物の秘密情報」は形式や公開ホストとの組み合わせから判定した値で、有効と確かめた値ではない。比率はLATENTの計算だ。この記事は他人のリポジトリから秘密情報を探す方法を扱わない。
Apiiroの報告 / Claude Codeの設定の文書 / Claude Codeの権限の文書
この記事の要点
- Apiiroは公開GitHubの
.claude/settings.local.jsonを104,185件調べ、1,122件(1.08%)に1,379件の秘密情報を見つけた。36.3%はデータベースを直接開けるパスワードや鍵だった。8KBを超えるファイルは全体の2.6%だが、秘密情報を含むファイルの24.3%を占める。承認が積み上がったファイルほど、秘密情報を含む割合が高い。 - 検出ツールのgitleaksは1,122件の50.3%、TruffleHogは57.3%を検出した。2つを併用しても19.2%にあたる215件を見逃した。コマンドの中に書かれたパスワードは、鍵の形式を探す検出ツールに引っかかりにくい。
- Claude Codeはこのファイルを初めて書くときに、そのマシンのgitの除外の設定に登録する。別のマシンやコンテナ、コピーしたフォルダ、すでに追跡しているファイルには、この登録が効かない。秘密情報を含むリポジトリの48.8%では、Claudeが共同作成者として記録されたコミットがこのファイルを変えていた。過去のコミットにだけ残る秘密情報も734件あり、対処は鍵の交換が先になる。
Apiiroの調査の方法と数字
報告の著者はApiiroのShmulik Cohen氏とMatan Giladi氏だ。Apiiroは2026年11月1日から3日に、GitHubのコード検索とコミットの検索で公開リポジトリの既定のブランチを読み取った。対象は.claude/settings.local.jsonの104,185件(103,617リポジトリ)と、共有用の.claude/settings.jsonの76,011件で、全件を取得した。43,120リポジトリではファイルの履歴も調べた。
秘密情報は2種類に分けて数えた。1つはOpenAI、Anthropic、AWS、GitHub、Supabaseなど、提供元の形式に合う鍵だ。もう1つは形式のないパスワードやトークンで、同じ行に公開のホストがあるときだけ数えた。プレースホルダー、よくある既定のパスワード、ローカルのホスト、公開を前提にした鍵は除いた。Apiiroは残った別々の値2,774件を伏せ字にしてLLMの審査役にも判定させ、規則と審査の両方が本物とした値だけを数えた。Apiiroは公開の前に研究をAnthropicに共有し、秘密情報が見つかった組織には11月2日と3日に連絡したと書いている。
報道に出た数字は、数えた対象がそれぞれ違う。表1にまとめた。
| 数字 | 数えた対象 |
|---|---|
| 104,185 | 公開GitHubの.claude/settings.local.jsonの数 |
| 1,122 | そのうち本物の秘密情報を1つ以上含むファイルの数(1.08%) |
| 1,379 | その1,122ファイルの中の別々の秘密情報の数 |
| 734 | 過去のコミットのファイルにだけあり、今のファイルにない秘密情報の数(509リポジトリ) |
| 1,160 | 履歴、共有の設定ファイル、会話記録で見つかった追加の秘密情報 |
| 2,539 | すべての調査対象を合わせた別々の秘密情報の数(1,994リポジトリ) |
2,539から1,379を引くと1,160で、報告の値と合う。1,160から履歴の734を引いた426件は、共有の設定ファイルと会話記録の分とみられるが、内訳は公表されていない。1ファイルあたりの秘密情報は平均1.23件だ。
承認したコマンドが設定ファイルに残る仕組み
Claude Codeの権限の文書によると、Bashのコマンドの承認で「Yes, and don't ask again」を選ぶと、その承認はリポジトリとコマンドの単位で恒久的に残る。保存先はリポジトリのルートの.claude/settings.local.jsonで、permissions.allowの規則として書かれる。確認の画面には「Yes, and don't ask again for: npm test *」のように、保存される規則の形が表示される。&&でつないだコマンドでは、承認の要る部分ごとに最大5つの規則が保存される。
ファイルの編集の承認は、会話が終わるまでしか残らない。恒久的に残るのは、Bashのコマンド、WebFetchのドメイン、ウェブ検索の承認だ。
Apiiroの報告の図には、漏れていた規則の形が載っている。環境変数でパスワードを渡すpsqlのコマンド、sshpassに-pでパスワードを渡すsshのコマンド、Authorizationヘッダーにトークンを書いたcurlのコマンド、接続文字列にユーザー名とパスワードを含むpsqlのコマンドだ。安全な規則の例はnpm runのように引数を*で受ける形で、秘密情報を含まない。
Apiiroはこの動作をOpus 5.5とFable 5.1で再現し、モデルではなくClaude Codeの動作だとした。16のコーディングエージェントの文書も比べ、承認したコマンドの全文を既定でプロジェクトのファイルに書くと確認できたのはClaude Codeだけだったと書いている。16のツールの名前と比較の表は、報告に載っていない。
保存先は利用の場所によって違う。設定の文書によると、CLIは自分用の.claude/settings.local.jsonにだけ書く。VS Codeの拡張機能では、承認の画面で保存先のファイルを選べ、チームで共有する.claude/settings.jsonも選べる。2026年7月の#77530と9月の#91270では、VS Codeの拡張機能で承認が共有の設定ファイルに書かれたと報告されている。
Claude Codeの権限の文書 / Claude Codeの設定の文書 / issue #77530 / issue #91270
gitの除外の登録が効かない場合
設定の文書によると、Claude Codeはgitのリポジトリで初めてこのファイルを書くとき、**/.claude/settings.local.jsonをグローバルなgitの除外のファイルに加える。このファイルはcore.excludesFileで指定した場所か、指定がなければ~/.config/git/ignoreだ。この登録で、そのマシンのすべてのリポジトリでファイルがコミットから外れる。手で作ったファイルは対象外で、文書は自分で.gitignoreに加えるよう書いている。
登録はそのマシンの設定に入り、リポジトリの.gitignoreには入らない。Apiiroの著者はHacker Newsで、登録が効かない場合を3つ挙げた。グローバルな除外の無い新しいマシンやコンテナ、コピーしたプロジェクトのフォルダ、すでにコミットしたファイルだ。gitは追跡中のファイルに除外の規則を当てないので、一度コミットしたファイルはその後も変更が記録される。Apiiroの報告は後からgitのリポジトリになったフォルダも挙げている。
Claude Codeの変更履歴にも、関係する修正がある。2.1.307では、自前の実行環境で前の作業が残した.claude/settings.local.jsonをコミットしてしまう問題を直した。2.1.271では、VS Codeの拡張機能のフックの設定画面で、保存が終わる前にファイルを除外に登録するよう直した。GitHubのissueでは、2025年11月の#11982が2.0.46でファイルを作っても除外に加わらないと報告している。
Apiiroが追跡した、秘密情報を含む1,105リポジトリのうち539(48.8%)では、Claudeが共同作成者として記録されたコミットがこのファイルを変えていた。記録されたモデルはSonnet 4.5からOpus 5.5まであった。
Claude Codeの設定の文書 / Claude Codeの変更履歴 / Hacker NewsのApiiroの著者の発言 / issue #11982
1,379件の秘密情報の種類
1,379件の内訳は表2のとおりだ。提供元の形式に合う鍵が636件、公開のホストに使うパスワードやトークンが743件ある。
| 種類 | 件数 |
|---|---|
| サービスのAPIトークン | 398 |
| データベースのパスワード | 379 |
| AIのモデルのAPIキー | 149 |
| Supabaseのservice-roleキー | 122 |
| GoogleのAPIキー | 110 |
| Supabaseのアカウントのトークン | 103 |
| 公開サーバーのSSHのログイン | 43 |
| GitHub、GitLab、npmのトークン | 42 |
| AWSの鍵 | 23 |
| アプリやアカウントのパスワード | 9 |
| 秘密鍵 | 6 |
.claude/settings.local.jsonにあった秘密情報の種類。出典はApiiroの報告の図データベースのパスワードとSupabaseのservice-roleキーを合わせた501件は、データベースを直接開ける。1,379件の36.3%にあたる。Supabaseのアカウントのトークンはアカウント内のすべてのプロジェクトを操作できるので、これを足すと604件、43.8%になる。AIのモデルのAPIキーは149件で10.8%だ。11の種類の合計は1,384件で、総数より5件多い。差の理由は報告に書かれていない。
Apiiroは、秘密情報が公開の許可リストにあった組織を63と数えた。そのうち1社は、鍵が有効だったと認めた。例にはデータベースを提供する企業の管理権限のAPIキー、B2Bのスタートアップの本番のAzure Postgresのパスワード、医療記録のアプリを作るIT企業のデータベースの所有者のパスワードがある。公開サーバーのSSHの認証情報は43件で、一部はsshpassで渡すrootのパスワードだった。
ファイルの大きさと秘密情報の割合
Apiiroはファイルの大きさごとに秘密情報を含む割合も示した(表3)。承認を重ねるたびに規則が増え、ファイルは大きくなる。
| ファイルの大きさ | ファイル数 | 秘密情報を含む割合 | 該当するファイルの推計 |
|---|---|---|---|
| 500B未満 | 55,453 | 0.17% | 約94 |
| 500B〜1KB | 19,770 | 0.51% | 約101 |
| 1〜2KB | 13,474 | 1.3% | 約175 |
| 2〜4KB | 8,449 | 2.8% | 約237 |
| 4〜8KB | 4,284 | 5.6% | 約240 |
| 8KB超 | 2,755 | 9.9% | 約273 |
推計の列はファイル数に割合を掛けたLATENTの計算だ。合計は約1,120件で、報告の1,122件とほぼ合う。
8KB超のファイルの割合は9.9%で、500B未満の0.17%の約58倍だ。ファイル数で見ると、1KB未満のファイルは全体の72.2%を占めるが、秘密情報を含むファイルでは17.4%にとどまる。8KB超のファイルは全体の2.6%なのに、秘密情報を含むファイルの24.3%を占める。
承認の数が増えるほど、秘密情報を含むコマンドを承認した回数も増える。点検は、規則の多い大きなファイルから始めるのが効率的だ。
2つの検出ツールが見逃した215件
Apiiroは1,122件のファイルに、オープンソースの検出ツールgitleaksとTruffleHogを当てた。gitleaksは564件、TruffleHogは643件を検出し、どちらも検出しなかったのは215件だった。ここから、両方が検出したのは300件、gitleaksだけが264件、TruffleHogだけが343件と計算できる(図3)。
検出率はgitleaksが50.3%、TruffleHogが57.3%だ。2つを併用すると80.8%になるが、19.2%は残る。約5件に1件は2つの検出ツールを両方使っても見つからない。
Apiiroによると、見逃しの原因はコマンドの中のパスワードだ。2つの検出ツールは提供元の接頭辞や長いランダムな文字列といった鍵の形式を探す。PGPASSWORD=やsshpass -p、mysql -pのあとのパスワードや、curlのBearerのヘッダーは、ふつうのコマンドの単語に見える。gitleaksは規則ごとの正規表現とエントロピーで、TruffleHogは検出器ごとの正規表現とキーワードで探す。Apiiroはコマンドの中のパスワードも検出できるように検査の規則を広げることを勧めている。なお2つのツールは検証の機能を使わずに動かしたもので、バージョンと設定は書かれていない。
GitHubのpush protectionは、pushの時点で秘密情報を止める仕組みだ。GitHubによると、2026年4〜6月には公開のpushの0.47%が秘密情報を含んでいた。push protectionが履歴に入る前に止めるのは、新しい秘密情報の約30%だという。10月13日からは、無料の公開リポジトリでもAnthropicのAPIキーを既定で止めている。この仕組みも提供元の形式に合う鍵を主な対象にしている。
GitHubは10月28日に、形式のない秘密情報を判定する分類器をpush protectionに足し、公開プレビューを始めた。初期の結果では、秘密情報を止めたpushが2倍を超えたという。既定では無効で、有料のGitHub Secret ProtectionかAdvanced Securityが要る。この分類器がコマンドの中のパスワードをどこまで拾うかは、まだ公表されていない。
gitleaks / TruffleHog / GitHubの変更履歴
削除しても残る履歴とフォーク
秘密情報を含むリポジトリの中央値で、ファイルは2026年11月2日の時点で217日前からあった。118のリポジトリでは、最初のコミットが1年以上前だった。過去のコミットのファイルにだけあり、今のファイルにない秘密情報は734件(509リポジトリ)ある。ファイルから規則を消しても、gitの履歴には残る。同じ秘密情報を持つフォークも211件あり、元のリポジトリは74だった。
公開された鍵が使われるまでの時間は短い。Palo Alto NetworksのUnit 42は2023年の実験で、GitHubに出したAWSの認証情報を攻撃者が5分以内に見つけて使ったと報告した。Comparitechのハニーポットでは、AWSの鍵の悪用は1分で始まった。中央値の217日は約31万分で、5分の6万倍を超える。公開されていた期間の長さを考えると、今は消えた秘密情報も交換の対象になる。
交換しない鍵は長く有効なまま残る。GitGuardianの2026年の報告によると、2022年に有効と確認した秘密情報の64%は、2026年1月にもまだ有効だった。GitHubは手作業での失効に平均約40日かかり、5件に1件は90日を超えると書いている。
GitHubの文書は履歴から秘密情報を消す前に、まず鍵を失効させるか交換するよう書いている。git-filter-repoで履歴を書き換えても、他人のクローンとフォークからは消せない。GitHubがキャッシュした表示では、コミットのハッシュで見られる場合もある。
Unit 42 / Comparitech / GitGuardian「The State of Secrets Sprawl 2026」 / GitHubのブログ / GitHubの文書
GitHubに上がらないファイルの扱い
Apiiroによると、このファイルの大半はGitHubに上がらず、開発者の端末に残る。中身はプロジェクトのフォルダの中の平文のJSONだ。公開リポジトリで見つかった1,122件は、端末にある同じ種類のファイルの一部にすぎない。
端末のファイルを狙う例も報告されている。2025年9月に広がったnpmのワームShai-Huludは、感染した端末にTruffleHogを取ってきて、ファイルの秘密情報を探した。Apiiroの調査では、TruffleHogは1,122件の57.3%を検出している。その約3週間前には、悪意のあるNxのパッケージが、開発者の端末のClaude CodeとGemini CLIにディスクの秘密情報を探させた。
gitを通らない経路もある。Apiiroは公開したnpmのパッケージ、フォルダごとコピーして作ったDockerのイメージ、zipのファイル、同期のフォルダを挙げた。Claude Codeが登録するグローバルなgitの除外は、gitの外の経路には効かない。npmのパッケージならfilesか.npmignore、Dockerなら.dockerignoreで.claude/を除外する必要がある。
ほかのファイルとの比較
Apiiroは、エージェントが記録を残すほかのファイルも調べた。ファイルの数で割合を出せるものを表4にまとめた。
| ファイル | 調べた数 | 秘密情報を含むファイル | 割合 |
|---|---|---|---|
| 会話記録(.specstory、aider、Cursorの書き出し) | 2,523 | 120 | 4.8% |
| 引き継ぎや配備のメモ | 2,095 | 33 | 1.6% |
.claude/settings.local.json |
104,185 | 1,122 | 1.08% |
共有の.claude/settings.json |
76,011 | 298 | 0.39% |
自分用の設定ファイルの割合は共有の設定ファイルの約2.7倍だ。共有の設定ファイルの秘密情報も、大半はコマンドの全文の許可の規則に入っていた。会話記録の割合は4.8%で、設定ファイルより高い。秘密情報を含む引き継ぎのメモの3分の1は、エージェント自身が書いたものだった。
公開リポジトリ全体と比べると、今回の件は一部だ。GitGuardianは2025年に公開GitHubのコミットで28,649,024件の秘密情報を検出した。Apiiroの2,539件はその0.009%にあたる。GitGuardianはClaude Codeが関わったコミットの漏えいの割合を3.2%、公開のコミット全体を1.5%としている。ただしこの比較の分母は報告から確かめられなかった。同じ報告のグラフでは、Claude Codeが関わったコミットの漏えいは2025年8月に1,000コミットあたり31件の最大になり、12月には13件まで下がって、人のコミットとほぼ同じになった。
エージェントの設定を書き換えたPostman Desktop
同じ時期に、別の会社のアプリがエージェントの設定ファイルを書き換えた件も表に出た。API開発のツールPostman Desktopの利用者が10月25日に、GitHubで報告した。バージョン12.33.4で、既存の利用者向けの更新のときに、Codex用とClaude Code用のPostmanのプラグインが確認なしに入ったという。
報告によると、Codexの~/.codex/config.tomlには、プラグインの有効化と、起動時に動くフックの信頼の記録が足された。Claude Codeの~/.claude/settings.jsonでは、Postmanのプラグインが有効になった。インストーラーには、自分のフックを承認済みにしようとする処理があった。報告者は、信頼の記録を誰が作ったかまでは証明できないと断っている。
11月5日に、Postmanの組織のメンバーが変更を当面元に戻すと書き、創業者のアカウントがissueを閉じてロックした。デスクトップアプリのリリースノートで、取り消しを明記したバージョンは見つからなかった。11月6日の12.35.5は「Some critical bug fixes」とだけ書いている。
この件は、Apiiroの件と原因が違う。共通するのは、エージェントの設定ファイルが権限や起動時の動作を決めることだ。開発者は、ほかのアプリが書き込む前提でこれらのファイルを点検する必要がある。
Anthropicの対応
Claude CodeのチームのBoris Cherny氏は11月7日に、Hacker Newsのスレッドで答えた。同氏は、Claude Codeはこれまで秘密情報の除去をしてこなかったが、防ぐ方法を調べていると書いた。.claude/settings.local.jsonはローカルに置くファイルで、Claudeが作るときは自動で除外に登録すると説明し、今回のファイルは手で作られてコミットされたと書いた。Apiiroの著者はこれに対し、1,105リポジトリ中539でClaudeが共同作成者として記録されたコミットがファイルを変えていたと返した。
同氏は、許可の規則は古いやり方で、auto modeを使うべきだとも書いた。auto modeは既定で有効で、全プランに含まれるという。どのエージェントを使う場合も、秘密情報の検査を有効にすべきだと勧めた。続くコメントでは、auto modeで検出させる案や、基本的な秘密情報の検査を組み込む案を挙げ、出す前に試作するとした。auto modeでも機微なコマンドでは確認の画面が出て、既定の選択が「always allow」なので承認が保存されるという指摘には、改善を考えていると返した。
11月8日の時点で、Claude Codeの変更履歴の最新は2.1.319だ。承認したコマンドの秘密情報を保存の前に伏せる変更は、変更履歴を検索した範囲では見つからなかった。
この問題は以前からGitHubで報告されていた。主なissueは表5のとおりで、Anthropicの社員の返信はどれにもない。
| issue | 作成日 | 内容 | 閉じた日と理由 |
|---|---|---|---|
| #5544 | 2025年8月11日 | 資格情報を含む承認済みのコマンドが平文で保存される | 2026年1月3日、60日の無活動でボットが閉じた |
| #11982 | 2025年11月19日 | 2.0.46でファイルを作っても除外に加わらない | 2026年3月5日、無活動でボットが閉じた |
| #13106 | 2025年12月4日 | ファイルの鍵が公開リポジトリにpushされた | 2025年12月8日、#11982の重複としてボットが閉じた |
| #77530 | 2026年7月14日 | VS Codeで承認が共有の設定ファイルに書かれる | 2026年9月3日、無活動でボットが閉じた |
| #91270 | 2026年9月1日 | VS Codeで承認が追跡中の共有の設定ファイルに書かれる | 2026年11月5日、無活動でボットが閉じた |
#91270が閉じられたのは、Apiiroが報告を公開した当日だった。issueの外にも先行の調査がある。セキュリティ企業のironPeakは2026年2月に、自社のリポジトリで同じファイルを見つけたと公表した。AIの設定のフォルダを持つリポジトリを調べ、2.4%で履歴に秘密情報があったという。数えたのはTruffleHogで有効と確かめた秘密情報だけで、標本は100件と小さい。
Hacker NewsのBoris Cherny氏の発言 / 続くコメント / issue #5544 / Claude Codeの変更履歴 / ironPeakの調査
自分のリポジトリの点検と対処
Apiiroの推奨とGitHubの文書をもとに、自分のリポジトリでの点検の手順をまとめた。プロジェクトのルートで次のコマンドを実行すると、設定ファイルの状態が分かる。
git ls-files .claude
git check-ignore -v .claude/settings.local.json
git log --all --oneline -- .claude/settings.local.json .claude/settings.json
git config --global core.excludesFile
1行目は.claudeの中で追跡しているファイルを一覧する。settings.local.jsonが出たら、ファイルはコミットされている。2行目はファイルがどの除外の設定で外れているかを表示する。何も出なければ、除外されていないか、すでに追跡されている。3行目は2つの設定ファイルを変えた過去のコミットを一覧する。4行目はグローバルな除外のファイルの場所を表示する。
許可の規則にパスワードが入っていないかは、ファイルを開いて読むのが確実だ。Apiiroが挙げたコマンドの形は、次のコマンドで探せる。
grep -nE 'PGPASSWORD=|sshpass -p|mysql .*-p|[Bb]earer |://[^/:@ ]+:[^@ ]+@' .claude/settings.local.json .claude/settings.json
最後の形はpostgres://ユーザー:パスワード@ホストのように、接続文字列に入ったパスワードを探す。このコマンドで何も出なくても、形式のない秘密情報が残っている場合はある。
見つけたら、次の順で対処する。最初に、その鍵やパスワードを各サービスで失効させるか交換する。ファイルが一度でも公開されていたら、今は消えていても交換の対象だ。次に、規則の行をファイルから消す。追跡中ならgit rm --cached .claude/settings.local.jsonで追跡を外し、リポジトリの.gitignoreに.claude/settings.local.jsonを加える。履歴から消すときは、GitHubの文書が勧めるgit-filter-repoを使う。ただし、フォークと他人のクローンには残る。
主なサービスの交換の手順は表6のとおりだ。
| サービス | 手順の要点 |
|---|---|
| AWS | 2つ目のアクセスキーを作ってアプリを切り替え、古いキーを無効にしてから削除する |
| GitHub | 公開リポジトリにpushされた個人アクセストークンなどは自動で失効する |
| OpenAI | APIキーのページで鍵を交換し、本番の値を更新する |
| Anthropic | Consoleで鍵を削除する。GitHubの検査の提携先で、公開リポジトリで見つかった鍵は自動で無効になる |
| Stripe | 「Rotate key」で新しい鍵を作り、古い鍵に期限を設定して削除する |
| Supabase | service_roleキーなどが漏れたら、原因を直してから交換の手引きに従う |
| npm | Access Tokensのページかnpm token deleteで削除する。失効まで最大1時間かかる |
データベースのパスワードやSSHのパスワードは、公開されても自動では失効しない。Apiiroが数えた秘密情報の36.3%はデータベースを直接開けるもので、交換は運用者の手作業になる。
再発を防ぐ方法もApiiroの推奨と公式の文書にある。秘密情報をコマンドに直接書かず、環境変数で$DB_URLのように参照させると、規則には変数の名前だけが残る。承認は文字どおりのコマンドよりBash(npm run test *)のような形で出す。コミット前とCIの秘密情報の検査には、PGPASSWORD=やsshpass -pのようなコマンドの中のパスワードの規則を足す。.claude/や会話記録のフォルダは.envと同じく秘密情報を含むものとして扱う。Claudeに.envを読ませないときは、設定のpermissions.denyにRead(./.env)を加える。
GitHub:リポジトリからの機微なデータの削除 / AWS / GitHub:トークンの失効 / OpenAI / Anthropic / Stripe / Supabase / npm
これから確かめる点
LATENTがこのあと確かめる点は3つある。
1つ目はClaude Codeの修正だ。Cherny氏が挙げた秘密情報の検査が入ったバージョンが出れば、どの形のパスワードを保存の前に伏せるかを確かめる。共有の設定ファイルに書く選択肢がVS Codeの拡張機能に残るかも確かめる。
2つ目はApiiroの16のツールの比較だ。ほかのエージェントが承認をどの形で、どこに保存するかが分かれば、今回の型の問題がClaude Codeに限られるかを確かめられる。
3つ目はGitHubの新しい分類器だ。公開プレビューの結果が出れば、コマンドの中のパスワードの見逃しがどこまで減るかを、Apiiroの19.2%と比べられる。
出典と確認範囲
Apiiroの報告は11月8日に原文を読んだ。報告は11月8日に更新されているが、どこを変えたかは示されていない。Apiiroが研究をAnthropicに共有した日付は、報告に書かれていない。種類別の合計が総数より5件多い理由と、426件の内訳は確かめられなかった。gitleaksとTruffleHogのバージョンと設定は書かれていない。
Claude Codeの仕組みは11月8日に設定と権限の公式文書、変更履歴で確かめた。Anthropicの対応はHacker NewsのBoris Cherny氏の発言をAPIで原文から確かめた。報道向けの声明は見つからなかった。GitHubのissueは作成日、状態、閉じた理由を確かめた。
Postmanの件はGitHubのissueと、Postmanのプラグインのリポジトリとリリースノートで確かめた。GitGuardianの3.2%と1.5%は、報告の分母を確かめられなかった。鍵が使われるまでの時間は、Unit 42とComparitechの公表値を使った。
比率、検出ツールの内訳、ファイルの大きさ別の構成比と推計、分の換算は、LATENTが資料の数字から計算した。点検のコマンドは見本のファイルで動作を確かめた。
- Apiiro「Coding Agents Copy Your Secrets to a Hidden File. Thousands Are on GitHub」
- Claude Code「Settings files and precedence」
- Claude Code「Configure permissions」
- Claude Codeの変更履歴
- Hacker Newsのスレッド
- anthropics/claude-code issue #5544
- postmanlabs/postman-app-support issue #14370
- GitGuardian「The State of Secrets Sprawl 2026」
- GitHub「Secret protection must scale with software」
- GitHub「Push protection beyond predefined secret patterns」
- GitHub「Removing sensitive data from a repository」
- Unit 42「EleKtra-Leak」