Session Fixation(セッション固定)とは?
Session Fixation(セッション固定)とは、攻撃者が予め指定したセッションIDをユーザーに使わせることで、
ユーザーのログイン後もそのセッションIDを通じて認証された状態を維持させ、不正アクセスを行うセッションハイジャックの一種です。
ログイン脆弱性や同時セッション管理の不備が原因で、重大なデータ漏洩へと繋がる可能性があります。
実際のデータ漏洩事例
某金融系ウェブアプリにおいて、ログイン後もセッションIDが変更されない不具合がありました。
攻撃者は事前に発行したセッションIDをURLに埋め込んで送信し、ユーザーがそのリンクからログインしたことで、
攻撃者がユーザーと同じセッションでダッシュボードにアクセス可能となり、財務データを閲覧・改ざんされる被害が発生しました。
攻撃者による悪用方法
セッション固定攻撃は次のような流れで実行されます:
- 攻撃者が任意のセッションIDを作成
- そのIDを埋め込んだリンクやCookieをターゲットに送付
- ユーザーがそのIDでログインすると、セッションが攻撃者と共有される
- 攻撃者が同じセッションIDを使ってログイン済み状態でアクセス可能になる
なぜ危険なのか?
- ユーザー認証後でもセッションIDが変更されなければ、誰でもログイン状態を再利用できる
- 攻撃はスクリプトやフィッシングと組み合わさることで大規模化する
- 複数端末からの同時セッション乗っ取りが発生しやすく、追跡が困難
脆弱なコードの例
// ログイン後にセッションIDを再生成していない String username = request.getParameter("username"); String password = request.getParameter("password"); if (authService.authenticate(username, password)) { session.setAttribute("user", username); response.sendRedirect("/dashboard"); }
安全な実装例
// 認証後にセッションIDを再生成(固定化対策) String username = request.getParameter("username"); String password = request.getParameter("password"); if (authService.authenticate(username, password)) { HttpSession oldSession = request.getSession(false); if (oldSession != null) { oldSession.invalidate(); // 旧セッション破棄 } HttpSession newSession = request.getSession(true); // 新セッション作成 newSession.setAttribute("user", username); response.sendRedirect("/dashboard"); }
Session Fixation を防ぐ方法
- ログイン成功時にセッションIDを必ず再生成する
- CookieにSecure, HttpOnly, SameSite 属性を設定してセッション保護を強化
- URLにセッションIDを含めないように設定(URL Rewritingの禁止)
- セッションに有効期限を設定し、自動的にタイムアウトさせる
- 複数端末・IPからの同時セッション検知機能を実装
企業への影響とリスク
セッション固定攻撃により、ユーザーのアカウント情報や財務データ、医療記録などの個人情報が不正に取得されると、
企業は重大なデータ漏洩インシデントとして法的制裁、賠償責任、信用失墜のリスクを負います。
特に金融・医療業界では、規制違反による罰金が数千万〜数億円に達する可能性もあります。
まとめ
Session Fixationは非常に基本的な実装ミスでありながら、その被害は致命的です。
セッションIDの再生成はWebアプリケーションにおけるサイバーセキュリティの基本中の基本であり、
セッション管理、ログイン脆弱性、同時セッション保護を含めた統合的な対策が必要です。
小さな見落としが大きな損害へとつながることを忘れてはなりません。
キーワード: Session Fixation, セッション固定, セッションID, サイバーセキュリティ, 同時セッション, セッションハイジャック, ログイン脆弱性, セッション管理, Webアプリケーションセキュリティ, セッションタイムアウト, セキュリティ脆弱性, データ漏洩, フィッシング対策