
Prova de conceito para uma vulnerabilidade de XSS armazenado no Hotel and Tourism Reservation System 1.0, demonstrando injeção não autenticada e sequestro de sessão de administrador.
| Campo | Detalhes |
|---|
| Título | Sistema de Reserva de Hotel e Turismo - Cross-Site Scripting (XSS) Armazenado |
| ID CVE | Atribuição Pendente |
| Fornecedor | code-projects.org |
| URL do Fornecedor | https://code-projects.org/hotel-and-tourism-reservation-in-php-with-source-code/ |
| Produto | Sistema de Reserva de Hotel e Turismo |
| Versão | 1.0 |
| Tipo de Vulnerabilidade | Cross-Site Scripting Armazenado |
| CWE | CWE-79 |
| Pontuação CVSS | 8.3 (Alta) |
| Vetor CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:L |
| Endpoint Afetado (Injeção) | /ht/tour.php |
| Endpoint Afetado (Gatilho) | /ht/admin/tour_reserves.php |
| Autenticação Necessária | Não (injeção) / Sim (gatilho) |
| Explorável Remotamente | Sim |
| Pesquisador | Syed Imad Uddin Alvi |
Existe uma vulnerabilidade de Cross-Site Scripting (XSS) Armazenado na funcionalidade de reserva de passeios do Sistema de Reserva de Hotel e Turismo 1.0. Um atacante não autenticado pode injetar JavaScript arbitrário nos campos do formulário de reserva em /ht/tour.php. O payload malicioso é armazenado no banco de dados sem sanitização. Quando um administrador visita a página de gerenciamento de reservas de passeios em /ht/admin/tour_reserves.php, o payload armazenado é executado no contexto do navegador do administrador — permitindo sequestro de sessão, roubo de credenciais ou comprometimento total da conta de administrador.
Arquivo: tour.php (ponto de injeção)
Arquivo: admin/tour_reserves.php (ponto de execução)
Parâmetro: name , email , people , number / campos de contato (POST)
Armazenamento: hotel_db — tabela de reservas de passeios
Configuração: Instale o Sistema de Reserva de Hotel e Turismo 1.0 no XAMPP e acesse em http://<target>/ht/
Passo 1 — Navegue até a página de reserva de passeios como usuário não autenticado:
http://<target>/ht/tour.php?tour=4
Passo 2 — Insira o payload XSS no campo de nome ou em qualquer campo, pois todos são vulneráveis a XSS, e clique em Reservar Agora:
<script>alert(1)</script>
Resultado: "Reserva feita com sucesso!" — o payload agora está armazenado no banco de dados.

Passo 3 — Faça login como administrador e navegue até o painel de reservas de passeios:
http://<target>/ht/admin/tour_reserves.php
Resultado: O payload XSS armazenado é executado imediatamente no contexto do navegador do administrador.

Um atacante não autenticado pode:
O formulário de reserva em tour.php armazena a entrada do usuário diretamente no banco de dados sem sanitização. O painel administrativo em tour_reserves.php exibe o valor armazenado cru na resposta HTML sem codificação de saída, permitindo que scripts injetados sejam executados.
// Na saída — sempre codifique antes de renderizar
echo htmlspecialchars($reservation['name'], ENT_QUOTES, 'UTF-8');
** Imad Alvi** — Pesquisador Independente de Segurança GitHub: Xmyronn