1. Descripción técnica
CVE-2020-7246 permite que un usuario autenticado cargue un archivo PHP mediante la función asociada a la fotografía de perfil en qdPM 9.1. La validación insuficiente permite que contenido ejecutable llegue a una ruta accesible desde la web, convirtiendo la carga en Remote Code Execution.
2. Mecanismo e impacto
La sesión autenticada controla el archivo del perfil. Si la aplicación no rechaza de forma efectiva una extensión o contenido PHP y el servidor guarda el resultado dentro del document root, una petición posterior ejecuta el archivo bajo la cuenta del servicio web. Es una variante específica de Unrestricted File Upload RCE.
3. Condiciones necesarias
- Acceso autenticado a una cuenta de qdPM con capacidad de modificar el perfil.
- Una versión y ruta de carga afectadas.
- Almacenamiento del archivo en una ubicación servida por PHP.
- Conocimiento o descubrimiento de la ruta final asignada al archivo.
4. Validación y detección
Revisar cargas de perfil con extensiones ejecutables, archivos PHP bajo directorios de uploads/users y solicitudes que incluyan parámetros de comando hacia esos archivos. Una versión coincidente no sustituye la prueba de que la carga peligrosa fue aceptada y ejecutada.
5. Explotación documentada
5.1. DoubleTrouble
Las credenciales extraídas de una imagen permitieron iniciar sesión en qdPM 9.1. El exploit cargó una puerta trasera bajo uploads/users y la petición al parámetro cmd confirmó ejecución como el usuario del servidor web.
6. Mitigación
- Actualizar qdPM a una versión corregida o retirar la instancia obsoleta.
- Validar el tipo real del archivo y generar el nombre de destino en el servidor.
- Guardar cargas fuera del document root y deshabilitar ejecución en esos directorios.
- Aplicar mínimos privilegios a la cuenta del servicio web y revisar archivos ya cargados.