キャッシュポイズニング攻撃は、HTTP リクエストを使い、正規のリクエストと同じキャッシュキーを持つ有害なリソースをオリジン Web サーバーに返させます。その結果、汚染されたリソースがキャッシュされ、ほかのユーザーにも配信されます。
Cloudflare のような CDN(Content Delivery Network)は、キャッシュキーで新しいリクエストとキャッシュ済みリソースを比較します。その結果、キャッシュから配信するか、オリジン Web サーバーへ直接取りに行くかを決めます。
キャッシュポイズニングのリスクと脆弱性を深く知るには、次の資料を参照してください。
オリジン Web サーバーのキャッシュ設定を確認し、ユーザー入力に依存しない静的ファイルだけをキャッシュしていることを確かめます。Cloudflare のキャッシュについて詳しくは、次を参照してください。
攻撃者は HTTP ヘッダーを悪用し、キャッシュされた応答に悪意のあるコンテンツを注入できます。たとえば、信頼できないヘッダー値を応答ボディにそのまま出すと、攻撃者はキャッシュ経由でクロスサイトスクリプティング(XSS)を実行できます。このリスクを下げるには、次を守ります。
- キャッシュキー に含まれない HTTP ヘッダーの値に依存しないでください。
- 信頼できないヘッダー値を応答ボディに含めないでください。
Cloudflare は GET リクエストボディの内容をキャッシュしますが、キャッシュキーには含めません。GET リクエストボディは信頼できないものとして扱い、応答内容を変えてはいけません。GET ボディで応答内容が変わる場合は、キャッシュをバイパスするか、POST リクエストの利用を検討してください。
インターネット上のセキュリティ脅威を把握するため、Web セキュリティアドバイザリを定期的に確認することを推奨します。よく参照されるアドバイザリには次があります。