Shikata Ga Nai

Private? There is no such things.

二要素認証のバイパス:ステップ間の検証ミスを突いた攻撃手法

Hello there, ('ω')ノ

🔐 2段階認証とは?

一般的に、ログインには以下の2ステップを設けることでセキュリティを高めます:

  1. パスワードの入力(第1要素)
  2. 確認コード(SMSやアプリなど)の入力(第2要素)

これにより、仮にパスワードが漏れても、コードがなければログインできないようになっています。


❗ 実装ミスによるバイパスの可能性

⚠️ よくある構成ミス:

  • パスワード入力後に一時セッションが開始され、次のページでコード入力を要求
  • ところがこの状態で、保護されたページに直接アクセスできてしまうことがある

🎯 攻撃シナリオ(例)

  1. 攻撃者が被害者のパスワードを何らかの手段で入手
  2. ログインフォームでパスワードを入力し、認証ステップ1は通過
  3. 通常はここで2FAコード入力が求められるが、
  4. 直接 /my-account のような保護ページにアクセス
  5. サーバー側が2FAステータスを確認していなければログイン成功

🧪 テスト手順(Burp Suite活用)

  1. パスワード入力後の レスポンス内容とCookieの変化を確認
  2. 2FAコードの入力をスキップして、保護ページへの直接アクセスを試行
  3. そのリクエストをBurp Repeaterに送り、何が返るかを確認

✅ 防御策

対策内容 詳細
🔐 セッションの状態管理 2FA未完了のセッションは「制限付き」にする
✅ 各ページで2FA完了状態を検証 すべての保護ページで2FAフラグを確認する
🧪 ロジックテストの自動化 QAやペネトレーションテストで 2FA ステータス確認を自動化

✅ まとめ

  • 2FAを導入しても「実装が甘ければ意味がない
  • ステップ1とステップ2の間の状態管理の甘さがバイパスのカギ
  • 保護ページは常に「2FA済みセッション」かどうかを確認すべき

Best regards, (^^ゞ