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, (^^ゞ