📌 Resumen
- Proyecto: QloApps
- Repositorio: https://github.com/Qloapps/QloApps
- Versión(es) afectada(s): <= 1.7.0
- Clase de vulnerabilidad: Ejecución remota de código no autenticada
- Gravedad: Crítica
- CVSS v3.1: (Crítica) 9.8 CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- ID CVE: CVE-2025-67325
- Descubierto por: Neakk Pornlur
- Fecha de divulgación: 2026-01-09
🧩 Descripción
La carga de archivos sin restricciones en la función de reseñas de hoteles en QloApps versiones 1.7.0 y anteriores permite a atacantes remotos no autenticados lograr ejecución remota de código.
🎯 Punto final afectado
/module/qlohotelreview/default
⚠️ Causa raíz
La vulnerabilidad existe debido a:
- Falta de validación de extensiones de archivo.
- Los archivos cargados son ejecutados directamente por el servidor.
- No se exigen controles de autenticación ni autorización en el punto final.
🔥 Impacto
Una explotación exitosa permite a un atacante:
- Ejecutar comandos arbitrarios del sistema operativo.
- Leer/escribir/eliminar archivos sensibles del servidor.
- Acceder a credenciales de base de datos.
- Moverse lateralmente hacia servicios internos de la red.
- Comprometer completamente el servidor de alojamiento.
Esta vulnerabilidad conduce a una pérdida total de Confidencialidad, Integridad y Disponibilidad (Tríada CIA).
🛠️ Prueba de concepto (PoC) en QloApps versión 1.7.0
Necesitamos un id_order válido y un token Ajax para solicitar el punto final vulnerable. Para id_order, realizamos fuerza bruta manual comenzando desde 1 o creamos una cuenta de invitado y reservamos una habitación para obtener este id_order. Para el token Ajax, podemos obtenerlo desde cualquier página de habitación del hotel.
1. Obtención del token Ajax
2. Reseñar un hotel y cargar nuestra imagen+shell web PHP manipulada.
3. Desencadenar la ejecución remota de código
Podemos encontrar nuestra shell web cargada en https://target.com/modules/qlohotelreview/views/img/review/<id_order>/1.php
