API キーはどこから漏れるのか — 7 つの経路
4 分で読む
API キーとは何かでは、キーを持っている相手はその API でできることを全部できると見ました。では、その鍵はどこから漏れるのでしょうか。
公開されている報告と事例、私たちのサイトに届いたアクセスの記録から、漏れる経路を 7 つに分けました。
まず、言葉をそろえる
| 言葉 | 意味 |
|---|---|
| 鍵 | システムが「使ってよい相手か」を確かめるための、秘密の文字列。パスワード、API キー、アクセストークンなどがある。ここでは、これらをまとめて「鍵」と呼ぶ |
| API キー | 鍵の一種。プログラムが別のシステムの API を呼ぶときに、自分が誰かを示すために送る文字列。API キーを持っている人は、持ち主と同じ操作ができる |
| リポジトリ | GitHub などの上の、開発ごとのコードの置き場所。公開にすると、誰でも読める |
| コミット | コードの変更を、1 回分の記録として残すこと。後で消した行も、前の記録には残る |
| .env | API キーやパスワードなど、秘密の設定を書いておくファイル |
| .git | コードの変更の記録が入ったフォルダ。過去の記録も丸ごと入っている |
| コンテナイメージ | アプリを動かすための部品一式を、1 つにまとめて配る形 |
| ログ | プログラムが動いた記録。動作を確かめるために書き出す |
| MCP | AI に外のサービスや道具をつなぐための決まり |
漏れる経路は 7 つ
漏れる場所で分けると、サーバーや公開の置き場が 3 つ、AI が 3 つ、利用者の画面(ブラウザ)が 1 つです。どれも、鍵を置いた場所が思ったより広く見えていた、というもので、悪意より置き場所の取り違えから起きます。
公開リポジトリは、件数が最も多い
| 何が | 分かっていること |
|---|---|
| 公開 GitHub のコミット | 2025 年の 1 年で、新しく置かれた鍵は 2,865 万件。前年より 34% 増えた GitGuardian(State of Secrets Sprawl 2026)原文28.65 million new hardcoded secrets were added to public GitHub commits in 2025 alone, a 34% increase year over year and the largest single-year jump we’ve recorded.出典を開く確認 2026-10-04 |
| トヨタ自動車(2022 年) | 委託先が公開したプログラムの文章(ソースコード)に、データサーバーへのアクセスキーが入っていた。トヨタ自動車(お客様のメールアドレス等の漏洩可能性に関するお詫びとお知らせについて・2022-10-07)原文公開されていたソースコードには、データサーバーへのアクセスキーが含まれており出典を開く確認 2026-10-04 トヨタ自動車(お客様のメールアドレス等の漏洩可能性に関するお詫びとお知らせについて・2022-10-07)原文2017年12月~2022年9月15日まで、第三者がGitHub上にあるソースコードの一部にアクセス可能な状態になっていたことが判明致しました。出典を開く確認 2026-10-04 |
設定ファイルに書いたまま公開する、サンプルに本物の鍵を入れたまま共有する、といった手違いで起きます。
Web サイトの公開フォルダは、常に探されている
公開フォルダは、Web サイトとして誰でも読める場所です。そこに .env を置くと、名前を当てられただけで中身が返ります。探す側は、ファイルの名前と置き場所の候補を順に試します。
届いた要求の内訳
私たちのサイトに 22 日分の記録で届いた、攻撃に使われる形の要求 8,219 件のうち、.env を探す要求は 1,566 件以上、.git を探す要求も 108 件以上ありました。多かったのは /.env(120 件)と /ci/.env(84 件)です。中身を返したものは 0 件でした。守り方の順番は .env の名前を変えれば安全か にまとめてあります。
配るものと記録に、鍵が紛れ込む
| 経路 | 起きたこと |
|---|---|
| コンテナイメージ | 公開していた Docker イメージの途中の層から、クラウドの鍵が抜き取られた(Codecov) Codecov(April 2021 Post-Mortem)原文The attacker was able to extract an HMAC key for a Google Cloud Storage service account from an intermediate layer in our public Codecov Self-Hosted Docker image.出典を開く確認 2026-10-04 |
| AI エージェントのログ | AI エージェントの部品の弱点(脆弱性)の 73.5% は、動作を確かめるための出力(デバッグの出力)が AI の会話に流れ込むことが原因だった Chen et al.(arXiv 2604.03070・2026-04-03)原文debug logging accounts for 73.5% of vulnerabilities because agent frameworks feed stdout into the LLM context window出典を開く確認 2026-10-04 |
ログや AI の会話の記録は、手元に残ります。AI の道具がどこに記録を残すかは AI エージェントに鍵を渡しても大丈夫か にまとめてあります。
AI の設定と学習データにも残る
| どこに | 見つかった鍵 |
|---|---|
| 公開 GitHub の MCP の設定ファイル | 2 万 4,008 件。うち 2,117 件はまだ使えた GitGuardian(State of Secrets Sprawl 2026)原文we identified 24,008 unique secrets exposed in MCP-related configuration files across public GitHub, including 2,117 unique valid credentials.出典を開く確認 2026-10-04 |
| Web の公開データ(AI の学習にも使われる) | まだ使える鍵が 1 万 1,908 件 Truffle Security(2025-02-27)原文11,908 Live Secrets were detected using TruffleHog in 400TB of web data.出典を開く確認 2026-10-04 |
| AI の学習に使われる公開リポジトリ | まだ使える鍵が 54 万 3,699 件 Truffle Security(2026-10-01)原文we found 543,699 credentials that still authenticated.出典を開く確認 2026-10-04 |
MCP の設定ファイルから見つかった鍵のうち、まだ使えたのは 1 割弱でしたが、それでも 2,117 件です。一度公開されて集められたデータからは、元のリポジトリを消しても鍵は消えません。
公開してよかった鍵の権限変更
| 何が | 起きたこと |
|---|---|
| きっかけ | 地図の表示用の鍵と同じプロジェクトで、Gemini の API が有効になる。鍵の持ち主には、鍵の権限が変わったことが知らされない Truffle Security(2026-02-25)原文The developer is never warned that the keys' privileges changed underneath it.出典を開く確認 2026-10-04 |
| 地図の表示などのために公開していた Google の鍵 | 2,863 件が、生成 AI の Gemini にも使える状態だった Truffle Security(2026-02-25)原文We identified 2,863 live Google API keys vulnerable to this privilege-escalation vector.出典を開く確認 2026-10-04 |
| その鍵でできること | アップロードされたファイルを見たり、AI の利用料を持ち主に請求させたりできる Truffle Security(2026-02-25)原文With a valid key, an attacker can access uploaded files, cached data, and charge LLM-usage to your account.出典を開く確認 2026-10-04 |
Web ページに載せる前提の鍵でも、同じ鍵に別の API が有効になると、漏らしてはいけない鍵に変わります。
経路ごとに、先に塞ぐところ
| 経路 | 先にすること |
|---|---|
| 公開リポジトリ | 漏れた鍵を取り消す。プッシュ保護とシークレットスキャンも使う(シークレットスキャンとは) |
| Web サイトの公開フォルダ | .env や .git を公開フォルダに置かない |
| パッケージとイメージ | 配る前に、途中の層まで含めて鍵が無いかを確かめる |
| ログと AI の会話 | 鍵を出力させない。AI に .env を表示させない |
| AI の設定と MCP | 設定ファイルを公開しない。権限を絞った鍵を使う |
| 学習データ | 漏れた鍵を取り消す |
| 公開してよかった鍵の権限変更 | 使う API と、使えるサイトを絞っておく |
ここから先は調査の詳細です(約 2 分)。上のカードだけで決められます。調べた 1 件ずつの記録は IT連携マップ に、出典 URL と調査日つきで公開しています。
調査の詳細
経路は、GitGuardian の年次報告(State of Secrets Sprawl 2026)、Truffle Security の 3 本の調査、Codecov の事後報告、AI エージェントの部品を調べた論文(arXiv 2604.03070)、トヨタ自動車の発表をもとに分けました。調べた範囲は、これらの公開された報告と事例、私たちのサイトに届いた要求の記録(2026 年 9 月 8 日〜10 月 4 日の 22 日分)です。引用はすべて、保存した原本に原文のまま在ることを確かめています。
私たちのサイトに届いた要求
2026 年 9 月 8 日から 10 月 4 日までに記録した 22 日分(1 日はその前の 24 時間)を、Cloudflare の統計から数えました。外から届いた、攻撃に使われる形の要求は 8,219 件で、中身を返したもの(成功の応答)は 0 件です。記録しているのは日ごとに多かった場所だけなので、.env を探す要求の 1,566 件と .git を探す要求の 108 件は、少なく見積もった数です。
| 狙われた場所(多い順) | 件数 |
|---|---|
| /.env | 120 件 |
| /ci/.env | 84 件 |
| /kafka/.env | 82 件 |
| /travis/.env | 78 件 |
| /sitemaps/.env | 77 件 |
| /elasticsearch/.env | 74 件 |
| /mail/.env | 72 件 |
| /.git/HEAD | 69 件 |
| /v3/.env | 64 件 |
| /job/.env | 56 件 |
言えないこと
- 件数の多くは、報告した会社が自社の方法で数えたものです。私たちは数え方を検証していません
- 公開されていないリポジトリや、社内の機械に置かれた鍵は、どの報告にも入っていません。GitGuardian は、開発者の手元の機械が鍵を盗む主な標的になってきたと書いています
GitGuardian(State of Secrets Sprawl 2026・報告の紹介ページ)原文
Developer workstations are now a prime target for secrets theft
出典を開く確認 2026-10-04
- 私たちのサイトの数は 1 つのサイトの記録で、ほかのサイトに同じだけ届くとは限りません