.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 –
.htaccessでFilesMatchディレクティブを使用し、ドットで始まるファイルに対して 403 を返すように設定します。
2. Dockerワークフローを強化する
.envを.dockerignoreに追加し、ファイルがイメージにコピーされないようにします。- シークレットを含むファイルに対して
COPY命令を使用しないでください。
3. 流出したすべてのキーをローテーションする
- Stripe Dashboard → Developers → API keys にログインします。
- 新しいシークレットキーを生成し、古いキーを直ちに無効化(revoke)してください。
4. 最小権限のキーを採用する
- すべての操作に単一のシークレットキーを使用するのをやめます。
- 必要なアクションのみを許可する制限付きキー(restricted keys)を作成します。例えば、チェックアウトサービスには決済インテント(payment intents)を作成する権限は必要ですが、返金や支払い情報の閲覧権限は不要です。
5. 古いキーのすべてのコピーを消去する
- CI/CD ログ、ビルド成果物、バックアップアーカイブをスキャンします。
- Git の履歴に対して、Gitleaks や TruffleHog などのシークレットスキャンツールを実行します。
サーバーからファイルを削除しても、流出したキーが消えるわけではありません。ダウンロードした者の手元に永遠に残ります。ローテーションこそが、盗まれたデータを無効化する唯一の方法です。
修正の先へ:より安全なパイプラインの構築
- 自動スキャン – すべてのプルリクエストや CI ジョブにシークレット検出を統合します。
- 構成管理 – シークレットを専用の Vault(例:HashiCorp Vault、AWS Secrets Manager)に保存し、静的なファイルに頼るのではなく、実行時に注入(inject)するようにします。
- アクセスレビュー – どの Stripe キーがアクティブであり、どのような権限を持っているかを定期的に監査します。
これらのプラクティスを導入することで、単一の設定ミスのあるサーバーが決済インフラ全体を危険にさらす可能性を低減できます。
今後の動向
セキュリティコミュニティは、すでに同様の手法を用いて、追加の露出したキーを探索しています。自動スキャナーが Stripe トークンを含む 「/.env」 ファイルを求めてウェブを巡回するため、さらなる流出報告が予想されます。Stripe は、キーのローテーション周期に関する追加のガイダンスを発行したり、リスクの高い操作に対して制限付きキーを推奨したりする可能性があります。
まとめ
ブラウザからドットファイルが取得できる状態にあるなら、決済システムはすでに侵害されています。不正が台帳に記録されてしまう前に、ファイルをブロックし、キーをローテーションさせ、シークレット管理のワークフローを再設計してください。
