Hello there, ('ω')ノ
🎯 ラボの目的
このラボでは、2要素認証(2FA)の実装ミスを突いて、被害者ユーザー(carlos)のアカウントページにアクセスすることが目的です。2FAコードが不要な状態でアクセスできれば、ラボは成功となります。
🧪 攻略手順(非エンジニア向け)
1. 自分のアカウントでログインしてURLを確認
- 提供された資格情報
wiener:peter
を使用してログインします。 - ログイン後、2FAコードの入力が求められます。
- 画面上部の「Email client」ボタンをクリックし、メールクライアントを開きます。
- 受信したメールから2FAコードを取得し、入力してログインを完了します。
- ログイン後、自分のアカウントページ(例:
/my-account
)のURLをメモしておきます。
2. 被害者アカウントでログインし、2FAをバイパス
- 提供された被害者の資格情報
carlos:montoya
を使用してログインします。 - 2FAコードの入力が求められますが、ここでコードを入力せずに、先ほどメモした自分のアカウントページのURL(例:
/my-account
)に直接アクセスします。 - もしアカウントページが表示されれば、2FAをバイパスして被害者のアカウントにアクセスできたことになります。([Medium][1])
🧠 解説:なぜバイパスできるのか?
このラボのアプリケーションでは、パスワード認証後にセッションが確立され、2FAコードの入力前でもセッションが有効となっています。
通常、2FAコードの入力が完了するまで保護されたページへのアクセスは制限されるべきですが、この実装ではそれが行われていません。
そのため、2FAコードの入力をスキップしても、既に有効なセッションを利用して保護されたページ(/my-account
)にアクセスできてしまいます。
✅ ポイントまとめ
- セッション管理の不備:2FAコードの入力前にセッションが有効になっている。
- アクセス制御の欠如:保護されたページで2FAの完了を確認していない。
- UI依存のセキュリティ:2FAの確認がユーザーインターフェースレベルでしか行われていない。
🛡️ 防御策
- セッションの段階管理:2FA完了前のセッションは制限付きとし、保護されたリソースへのアクセスを禁止する。
- サーバーサイドでの2FA確認:すべての保護されたエンドポイントで、2FAの完了をサーバー側で検証する。
- セッションの再発行:2FA完了後に新たなセッションを発行し、2FA前のセッションを無効化する。
Best regards, (^^ゞ