.env ファイルとデバッグログがインターネット上に公開された状態になっていたため、669のベンダーから1,033個の本番環境用Stripeシークレットキーが流出しました。これらのキーを使用すれば、誰でも決済を実行し、請求書を取得し、顧客の詳細情報を収集できてしまいます。これは、わずか数分で資産を流出させ、企業の評判を失墜させかねない重大な侵害です。

流出の原因

開発者は通常、データベースのパスワード、APIトークン、Stripeシークレットキーなどの設定データを .env という名前のファイルに保存します。このファイルはソースコードと同じ場所に配置され、機密情報をコードベースから分離するために実行時に読み込まれます。この手法が有効なのは、サーバーがドット(.)で始まるファイルを一切公開しない場合に限られます。今回のケースでは、設定ミスのあるウェブサーバー(NginxおよびApacheの両方)により、「/.env」、「/.env.example」、「/.git/HEAD」、およびカスタムの「/debug」エンドポイントへのリクエストに対して、200 OK ステータスと共にファイルの内容がそのまま返されてしまいました。

この流出は、Stripeのプラットフォームの脆弱性や、特定のeコマースプラグインの欠陥によって引き起こされたものではありません。本来、世界から見えないはずのファイルが、単に露出してしまったことによるものです。

なぜこの露出が重大なのか

Stripeのシークレットキーは、実質的に加盟店の決済インフラにおけるマスターパスワードのようなものです。これを保持している者は、以下のことが可能です:

  • 保存されたカードに対して任意の決済を行う
  • 請求書や支払い履歴を取得する
  • 個人データ(氏名、メールアドレス、電話番号、住所、IPアドレス)を抽出する
  • プロモーションコードを使用して、無料または割引価格で購入する

流出したデータセットには、上記のすべてに加え、各ベンダーの収益額がわかる支払い詳細も含まれていました。企業にとっての直接的なリスクは、チャージバックを発生させる不正取引、顧客の信頼喪失、およびPCI-DSS、GDPR、その他のデータプライバシー規制に基づく罰金の可能性があります。長期的なコストはさらに高額になる可能性があります。法的費用、修復費用、そして二度と回復できないかもしれないブランドの毀損などです。

クイックテスト:あなたの .env は露出していますか?

ターミナルを開き、yourdomain.com を自身のホスト名に置き換えて実行してください:

for p in "/.env" "/.env.example" "/.git/HEAD" "/debug"; do
  echo -n "$p -> "
  curl -s -o /dev/null -w "%{http_code}\n" "https://yourdomain.com$p"
done

すべての行が 403 (Forbidden) または 404 (Not Found) を返す必要があります。200 のレスポンスが返される場合は、そのファイルが公開状態で読み取れることを意味しており、即座に対応が必要な重大なセキュリティインシデントです。

即時の修復手順

1. ウェブサーバーでドットファイル(dotfiles)をブロックする

  • Nginx – ドットで始まるファイルへのリクエストを拒否する location ブロックを追加します。
  • Apache.htaccessFilesMatch ディレクティブを使用し、ドットで始まるファイルに対して 403 を返すように設定します。

2. Dockerワークフローを強化する

  • .env.dockerignore に追加し、ファイルがイメージにコピーされないようにします。
  • シークレットを含むファイルに対して COPY 命令を使用しないでください。

3. 流出したすべてのキーをローテーションする

  • Stripe Dashboard → Developers → API keys にログインします。
  • 新しいシークレットキーを生成し、古いキーを直ちに無効化(revoke)してください。

4. 最小権限のキーを採用する

  • すべての操作に単一のシークレットキーを使用するのをやめます。
  • 必要なアクションのみを許可する制限付きキー(restricted keys)を作成します。例えば、チェックアウトサービスには決済インテント(payment intents)を作成する権限は必要ですが、返金や支払い情報の閲覧権限は不要です。

5. 古いキーのすべてのコピーを消去する

  • CI/CD ログ、ビルド成果物、バックアップアーカイブをスキャンします。
  • Git の履歴に対して、GitleaksTruffleHog などのシークレットスキャンツールを実行します。

サーバーからファイルを削除しても、流出したキーが消えるわけではありません。ダウンロードした者の手元に永遠に残ります。ローテーションこそが、盗まれたデータを無効化する唯一の方法です。

修正の先へ:より安全なパイプラインの構築

  • 自動スキャン – すべてのプルリクエストや CI ジョブにシークレット検出を統合します。
  • 構成管理 – シークレットを専用の Vault(例:HashiCorp Vault、AWS Secrets Manager)に保存し、静的なファイルに頼るのではなく、実行時に注入(inject)するようにします。
  • アクセスレビュー – どの Stripe キーがアクティブであり、どのような権限を持っているかを定期的に監査します。

これらのプラクティスを導入することで、単一の設定ミスのあるサーバーが決済インフラ全体を危険にさらす可能性を低減できます。

今後の動向

セキュリティコミュニティは、すでに同様の手法を用いて、追加の露出したキーを探索しています。自動スキャナーが Stripe トークンを含む 「/.env」 ファイルを求めてウェブを巡回するため、さらなる流出報告が予想されます。Stripe は、キーのローテーション周期に関する追加のガイダンスを発行したり、リスクの高い操作に対して制限付きキーを推奨したりする可能性があります。

まとめ

ブラウザからドットファイルが取得できる状態にあるなら、決済システムはすでに侵害されています。不正が台帳に記録されてしまう前に、ファイルをブロックし、キーをローテーションさせ、シークレット管理のワークフローを再設計してください。