Shikata Ga Nai

Private? There is no such things.

区切り文字のズレを利用したWeb Cache Deception攻撃の構築(実例と注意点)

Hello there, ('ω')ノ

✅ 攻撃の基本構造

次のようなURLを使って、キャッシュとオリジンサーバーの解釈の違いを狙います:

/settings/users/list;aaa.js

🧩 解釈のズレ

システム 解釈
キャッシュ /settings/users/list;aaa.js.jsで終わる静的ファイルと判断し、キャッシュ対象
オリジンサーバー(例:Spring) ;を区切り文字と認識 → /settings/users/list として処理し、動的レスポンス(例:ユーザー一覧)を返す

→ 結果:動的情報が静的ファイルとしてキャッシュされ、他ユーザーにも公開される


🧠 攻撃の応用性

多くのアプリケーションはサーバー全体で一貫したデリミタの扱い方をしているため:

  • /settings/users/list;xxx.js
  • /profile;xxx.css
  • /account/info;zzz.exe

など、異なるエンドポイントに対しても同様の攻撃が可能です。


⚠️ ブラウザによる前処理の注意点

一部の文字はブラウザ側で自動的に処理・エンコードされるため、意図したリクエストにならない場合があります:

文字 ブラウザの扱い
{, }, <, > 自動で %7B, %7D, %3C, %3E にエンコード
# パスの終了を意味する → 以降の文字列は送信されない

✅ 対策方法

  • URLエンコード形式(例:%3B, %00)を試す
  • ブラウザ以外(Burp Repeaterなど)でテストする
  • 必要ならiframeやscriptタグでリダイレクト型の誘導にする

✅ 攻撃成功の流れ(まとめ)

  1. 区切り文字を使って拡張子付きURLを生成(例:/settings/users/list;abc.js
  2. オリジンは/settings/users/listとして解釈 → 機密レスポンスを返す
  3. キャッシュは.js付きURL全体を静的と判断 → そのレスポンスを保存
  4. 攻撃者が同じURLにアクセス → 被害者の情報を取得

✅ まとめ

攻撃要素 ポイント
区切り文字の選定 ;, ., %00 などを試す
拡張子の選定 .js, .css, .ico, .exeなど
ブラウザの影響を回避 URLエンコード・Burp使用・JavaScript遷移型

Best regards, (^^ゞ