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.