露出した .env ファイル:攻撃者はどうやってシークレットを見つけるか
.env ファイルには、データベースのパスワード、APIキー、署名用のシークレットが入っています。これがWeb経由で到達可能だと——/.env、/.env.production、あるいは /.env.backup のようなバックアップで——誰でもダウンロードして、あなたのサービスを乗っ取れてしまいます。
これは何か
環境ファイルはサーバー上にとどめ、クライアントには決して配信しないためのものです。設定を誤った静的ファイルのハンドラー、Webルートに紛れ込んだコピー、あるいはドットファイルを配信してしまうフレームワークが、これらを露出させることがあります。
攻撃者は推測しません。/.env と数十種類の亜種を、何百万ものホストに対して自動スキャンで絶えず要求します。到達可能なファイルは数時間以内に見つかります。
なぜ重要か
これらのファイルには、本番のデータベースURL、Stripeのシークレットキー、JWTの署名用シークレット、クラウドの認証情報が日常的に含まれています。1回の漏洩が、全データの窃取、不正な請求、アカウント乗っ取りにつながりかねません。
シークレットはローテーションするまで有効なままなので、ファイルを削除しても、中身をすべてローテーションしない限り被害は続きます。
直し方
Webサーバーまたはプロキシの設定で、.env をはじめとするドットファイルへのアクセスを拒否してください。
location ~ /\.(?!well-known).* {
deny all;
return 404;
}サーバーが静的配信するディレクトリの外に設定を保管し、ビルドが .env ファイルを公開成果物にコピーしないことを確認してください。
ファイルが一度でも到達可能だった場合は、その中のすべてのシークレットを漏洩したものとみなし、データベースのパスワード、APIキー、トークンを直ちにローテーションしてください。
FAQ
ファイルを削除しました。もう安全ですか?
シークレットをローテーションするまでは安全ではありません。ダウンロードした人は、あなたが変更するまで有効な認証情報を持ち続けます。
自分のものが露出しているかどうか、どうやって分かりますか?
ブラウザで https://yourdomain.com/.env にアクセスしてみてください。404ではなく KEY=value の行が表示されたら、露出しています。AppSafeはこれを自動でチェックします。