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タグでリダイレクト型の誘導にする
✅ 攻撃成功の流れ(まとめ)
- 区切り文字を使って拡張子付きURLを生成(例:
/settings/users/list;abc.js) - オリジンは
/settings/users/listとして解釈 → 機密レスポンスを返す - キャッシュは
.js付きURL全体を静的と判断 → そのレスポンスを保存 - 攻撃者が同じURLにアクセス → 被害者の情報を取得
✅ まとめ
| 攻撃要素 | ポイント |
|---|---|
| 区切り文字の選定 | ;, ., %00 などを試す |
| 拡張子の選定 | .js, .css, .ico, .exeなど |
| ブラウザの影響を回避 | URLエンコード・Burp使用・JavaScript遷移型 |
Best regards, (^^ゞ