以下の内容はhttps://cysec148.hatenablog.com/entry/2025/07/15/075209より取得しました。


【有料メンバー限定試作中】キャッシュポイズニングからStored XSSへの攻撃チェーン実践ガイド

Hello there, ('ω')ノ

1. 攻撃チェーン全体像

ステップ1: キャッシュポイズニング

  • 目的: Webキャッシュサーバ(CDNやリバースプロキシ)に 攻撃者が細工したレスポンスを保存させる

ステップ2: Stored XSS

  • 目的: キャッシュされたレスポンスの中に 悪意のあるスクリプトを含めることで、 不特定多数のユーザにXSSを仕掛ける。

2. 実際の流れと具体的テクニック

① 脆弱なキャッシュ条件を探す

調査項目:

  • Hostヘッダー がキャッシュキーに含まれているか
  • X-Forwarded-Host などのヘッダーが影響しているか
  • クエリパラメータ の有無によるキャッシュ動作確認

具体例:

Host: victim.com
X-Forwarded-Host: attacker.com

観察ポイント:

  • リダイレクトURLやレスポンス本文にヘッダーの値が反映されるか
  • 異なるヘッダー値でキャッシュが分離されないか

② キャッシュポイズニング実行

  1. 細工したリクエストを送る

    • 例:

      GET /somepage HTTP/1.1
      Host: victim.com
      X-Forwarded-Host: attacker.com
      
  2. そのリクエスト結果が他のユーザに返ることを確認

    • キャッシュサーバのレスポンスを見る
    • Cache-Control ヘッダーなども観察

③ Stored XSSへの展開

条件:

  • キャッシュされたレスポンス内に HTMLやJavaScriptコードがそのまま挿入される場所があること

例:

  • ログインページのリダイレクト先
  • エラーページのメッセージ内容

実際の攻撃手順:

  • X-Forwarded-Host などに以下のような値を入れる:
  "><script>alert(1)</script>
  • それを含んだレスポンスがキャッシュされると すべてのユーザに対してStored XSSが成立

3. 攻撃成立条件まとめ

  • キャッシュ分離ミス → HostヘッダーやX-Forwarded-Hostがキャッシュキーに含まれない
  • レスポンスリフレクション → 攻撃者入力がレスポンスにそのまま含まれる
  • キャッシュ可能設定 → Cache-Control: public など

4. 実務での確認ポイントチェックリスト


✅ キャッシュポイズニング関連

  • [ ] Host ヘッダーがキャッシュキーに含まれているか確認
  • [ ] X-Forwarded-Host や X-Forwarded-For が影響するか確認
  • [ ] クエリパラメータ付きURLのキャッシュ動作確認
  • [ ] Cache-Control ヘッダーの内容チェック
  • [ ] エラーページやリダイレクトページのキャッシュ確認

✅ XSS関連

  • [ ] レスポンス内に動的に生成されるHTMLやJSが含まれるか
  • [ ] X-Forwarded-Host や Referer がHTMLに埋め込まれていないか確認
  • [ ] HTMLエスケープやContent-Security-Policy (CSP)が設定されているか確認

✅ 総合

  • [ ] キャッシュ+XSS成立までを一通り手順化
  • [ ] 複数回再現できるか検証
  • [ ] 自社サービスや運用中システムで同様の条件がないか確認

おわりに

キャッシュポイズニング単体やStored XSS単体は知られていても、 両者を組み合わせた攻撃チェーンは見逃されがちです。

このガイドをベースに、実際のペネトレーションテストや脆弱性診断業務で 応用・チェックを行うことをおすすめします。

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/07/15/075209より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14