HTTP X ヘッダーによるキャッシュポイズニングの防止

Fastly のサービス設定は、HTTP「X」ヘッダー間のインタラクションを考慮せずに、バックエンドがコンテンツを選択するように設定されている場合、キャッシュポイズニング攻撃に対して脆弱な場合があります。この脆弱性は、VCL パッチを適用するか、またはバックエンドの設定を変更することによって軽減できます。

キャッシュポイズニングが発生する状況

1つまたは複数のバックエンドで、HTTP レスポンスの送信先となるユーザー (またはセキュリティドメイン) を判断するのに X-Forwarded-Host、X-Rewrite-URL、または X-Original-URL の HTTP リクエストヘッダーのコンテンツが使用される場合に、この種の脆弱性の影響を受ける可能性があります。サイトの Fastly の設定によってこれらのヘッダーのいずれかがバックエンドに渡され、そのヘッダーのコンテンツが (例えば明示的に、または Vary HTTP レスポンスヘッダーによって) 有効なエッジキャッシュキーに含まれない場合、攻撃対象のキャッシュに挿入された任意のコンテンツを含むレスポンスがエッジに保存される可能性があります。

攻撃者は、HTTP リクエストをサイトに送信し、影響を受けたバックエンドが攻撃者によってコントロールされたレスポンスを使用して応答するように仕掛けて Fastly のお客様の URL をポイズニングすることが可能です。その結果、悪意のあるレスポンスオブジェクトが、サイトのキャッシュ内のポイズニングされた URL に保存されます。これにより、攻撃者は攻撃対象サイトのユーザーがポイズニングされた URLにアクセスするよう誘導し、悪意のあるコンテンツを配信することができます。

キャッシュポイズニング攻撃に対する対策

オリジンが特殊な値を使用してユーザーに配信するコンテンツを選択したり、複数のセキュリティドメインから選択する場合は、セキュリティアドバイザリーで提案されているように、オリジンサーバーの再設定と、対応するセキュリティアップデートの適用をご検討ください。また、VCL で X-Forwarded-Host、X-Rewrite-URL、X-Original-URL の値を削除または正規化してください。

そのためには、脆弱性のあるヘッダーを既知の安全な値に設定するか、ヘッダーの設定を解除する必要があります。例えば、以下の VCL スニペットを使用して、X-Forwarded-Host ヘッダーを Host ヘッダーの値に設定できます。

set req.http.x-forwarded-host = req.http.host;

以下のスニペットを使用して X-Original-URL ヘッダーの設定を解除できます。

unset req.http.x-original-url;

また、以下のスニペットを使用して X-Rewrite-URL の設定を解除できます。

unset req.http.x-rewrite-url;

さらに、これらの値をキャッシュキーや Vary ヘッダーに含めてセキュリティドメインでコンテンツがキャッシュされないように設定することもできます。。詳しくは、キャッシュキーの活用に関するガイドをご参照ください。

Back to Top