Shikata Ga Nai

Private? There is no such things.

セッション管理に失敗したリダイレクトレスポンスによる情報漏洩

Hello there, ('ω')ノ

🎯 脆弱性の概要

Webアプリケーションは、不正なアクセスを検出すると以下のような動作をします:

HTTP/1.1 302 Found
Location: /login

→ これは「ログインページへのリダイレクト」で、未認証または不正ユーザーに対してアクセスを拒否する仕組みです。

しかし、このレスポンス本文に注意してください。


🕵️‍♂️ 問題の本質:レスポンス本文に機密情報が含まれている

例として、以下のようなレスポンスが返ってきたとします:

HTTP/1.1 302 Found
Location: /login

<html>
  <body>
    <p>You are being redirected...</p>
    <div>User info: carlos@example.com, API Key: abc123xyz</div>
  </body>
</html>

→ この場合、たとえリダイレクトされていても、攻撃者はレスポンス本文を通じてターゲットの機密情報を得ることができます。


🧪 典型的な攻撃シナリオ

  1. 攻撃者が自分のアカウントでログイン。
  2. Burp Repeater などで GET /account?id=carlos を実行。
  3. レスポンスはリダイレクト(302)だが、本文に carlos の情報が含まれている
  4. ブラウザではリダイレクトされて見えないが、Burp上では情報が見えてしまう。
  5. → 攻撃成功!

🛡 開発側の対策

対策 解説
レスポンス前に認可チェック ユーザーがアクセス権を持つかどうかを最初に確認すること
リダイレクト時は本文を空にする ヘッダーだけ返す(例:204 No Content など)
セッションベースでデータ取得 パラメータを信用せず、セッションからユーザー情報を特定する

✅ まとめ

  • 表面的にリダイレクトされているからといって安全とは限らない
  • 機密情報は常に「レスポンス本文に含まれていないか」チェックすべし。
  • レスポンスの構造をよく観察することがペンテスト成功の鍵

💡 セキュリティは「見た目」ではなく「挙動」で判断せよ。リダイレクトが起きていても、レスポンスの中身に騙されないことがペネトレーションテスターとしての重要な視点です。

Best regards, (^^ゞ