CVE-2025-9074 (PoC éducatif / Preuve de concept)
Ce dépôt contient un PoC à des fins éducatives démontrant le risque de pouvoir créer un conteneur privilégié avec accès en lecture/écriture au système de fichiers hôte en exploitant les API distantes non authentifiées de Docker Engine. Le fichier exécutable est poc.go.
Important : Ce PoC est destiné uniquement à des fins éducatives et défensives. Son exécution dans des environnements tiers ou sur des systèmes non autorisés est interdite.
Évaluation des risques
- Évaluation globale : Critique
- Valeur de base CVSS v3.1 estimée : 9.8 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
- Justification :
- Accessible sans authentification sur TCP/2375 → PR:N, UI:N, AV:N
- Conteneur privilégié + bind mount hôte entraîne un changement de portée et un impact élevé sur la confidentialité/intégrité/disponibilité → S:C, C/I/A:H
- La procédure d'attaque s'effectue avec quelques requêtes HTTP vers l'API Docker Engine → AC:L
- Périmètre d'impact :
- Système hôte entier, autres conteneurs, actifs sur le même réseau (incluant le vol d'identifiants et le mouvement latéral)
- Privilèges requis :
- Non authentifié (PR:N). Aucun privilège administrateur requis.
Contexte
- Docker Engine fournit des API distantes permettant des opérations via des points de terminaison comme
/version, /info, /containers/create, etc.
- Si un conteneur est accessible depuis l'extérieur, il est possible dans certains cas de créer des conteneurs, d'attribuer des privilèges et d'effectuer des bind mounts de répertoires hôtes sans authentification.
- Sur les environnements Windows + Docker Desktop, il existe des chemins de montage permettant d'accéder aux lecteurs hôtes Windows via
/run/desktop/mnt/host/<drive> ou /host_mnt/<drive>. Ce PoC utilise ces chemins pour visualiser l'impact en créant un fichier sur l'hôte.
Aperçu du fonctionnement
poc.go effectue les opérations suivantes :
- Appelle l'API Docker Engine sur
http://192.168.65.7:2375 pour vérifier la connectivité (/version)
- Vérifie la liste des images disponibles (
/images/json), et si aucune n'est trouvée, tente de tirer alpine:latest
- Crée un conteneur privilégié et effectue un bind mount des lecteurs hôtes (ex. C:, N:) vers
/host_root
- Depuis le conteneur, écrit un fichier de validation (ex.
cve_2025_9074_poc.txt) directement dans /host_root pour visualiser l'impact
- Supprime le conteneur après exécution
Risques (utilisation abusive envisagée)
- Lecture/écriture du système de fichiers hôte (dans la limite des privilèges d'exécution de Docker Engine)
- Vol d'informations sensibles (mots de passe, clés SSH, etc.)
- Altération des fichiers de configuration système
- Installation de logiciels malveillants, persistance
- Mouvement latéral vers d'autres conteneurs et réseaux
- Élévation de privilèges
Prérequis
- Go 1.20+ environ (fonctionne avec
go run)
- Docker Desktop/Engine (vulnérable) en cours d'exécution
- Exécuter ce code à l'intérieur d'un conteneur Docker qui s'exécute sur Docker Desktop/Engine (vulnérable)
- L'API Docker Engine doit répondre sur
http://192.168.65.7:2375 (valeur par défaut du PoC)
Utilisation
-
Récupération du dépôt
git clone <this-repo>
cd cve-2025-9074
-
Exécution du PoC
-
Exemple de sortie
- Affichage de la réussite de la connectivité à
/version
- Détection d'une image existante ou tirage de
alpine:latest
- Création du conteneur privilégié, résultat de la création du fichier sur l'hôte
- Affichage d'extraits d'informations système basées sur
/info
-
Exemple de curl de démonstration (affiché à l'écran)
- Exemple JSON pour
/containers/create, exemple de démarrage avec /containers/{id}/start
Personnalisation de la configuration
- Le tableau de candidats dans
attemptHostWrite (/run/desktop/mnt/host/<drive>, /host_mnt/<drive>, C:/, etc.) peut être ajusté selon l'environnement.
- Image utilisée
- Priorité aux images existantes. Sinon, tirage automatique de
alpine:latest.
Précautions sur l'environnement de test
- Inclut des exemples de chemins de montage basés sur le comportement sous Windows + Docker Desktop.
- Sous macOS, les chemins hôtes diffèrent, une modification appropriée est nécessaire.
- Selon la version et la configuration de Docker Desktop, le PoC peut ne pas fonctionner (= sécurité).
Avertissement
- Ce dépôt est destiné uniquement à des fins de recherche et d'éducation. Il n'encourage pas les attaques, les intrusions ou les actes de destruction.
- L'auteur décline toute responsabilité pour tout dommage résultant de l'utilisation de ce PoC.
- Ne l'exécutez pas en dehors d'un environnement isolé sur lequel vous détenez des droits d'administration légitimes.
Licence