⭐️Web キャッシュポイズニング

偽装した結果をキャッシュに載せ、他人に配信させる攻撃。

  1. 攻撃者が X-Forwarded-Host: evil.com を付けてリクエストする
  2. アプリが <script src="https://evil.com/app.js"> を含む HTML を返す
  3. キャッシュは Host と URL だけをキーにしているので、このレスポンスを通常のページとして保存する
  4. 以降、普通にアクセスした人全員に evil.com のスクリプトが配られる

レスポンスを変えるヘッダーがキャッシュキーに入っていないことが原因。

  • キャッシュキー: キャッシュが保存済みのレスポンスを探すための値。普通は Host と URL だけ
  • アプリは X-Forwarded-Host でレスポンスを変えるのに、キャッシュはそれを見ないので、ヘッダーあり / なしを同じリクエストとして扱う

対策: そのヘッダーをキーに入れる(Vary: X-Forwarded-Host。ヘッダーの値ごとに別々にキャッシュさせる)か、CDN でそのヘッダーを消してアプリに使わせない。