
Reproduction en laboratoire de la CVE-2026-34040 : contournement des plugins AuthZ de Docker/Moby en utilisant des corps de requêtes surdimensionnés (>1 Mo) pour créer des conteneurs privilégiés avec accès à l'hôte.
KO: Projet de reproduction pratique d'une vulnérabilité qui contourne les plugins d'autorisation (AuthZ) de Docker (Moby) en utilisant un corps de requête dépassant 1 Mo. EN: Une reproduction en laboratoire d'une vulnérabilité qui contourne les plugins d'autorisation (AuthZ) de Docker (Moby) en utilisant un corps de requête surdimensionné (>1 Mo).
| Élément | Valeur |
|---|---|
| CVE | CVE-2026-34040 |
| CVSS 3.1 | 8.8 (Élevée) — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| CWE | CWE-288 (Contournement d'authentification en utilisant un chemin ou un canal alternatif), CWE-863 (Autorisation incorrecte) |
| Affecté | moby/moby < 29.3.1, docker/docker < 29.3.1, moby/moby/v2 < 2.0.0-beta.8 |
| Corrigé dans | 29.3.1, 2.0.0-beta.8 |
| Cause racine | Correctif incomplet pour CVE-2024-41110 |
| Commit du correctif | moby/moby@e89edb1 |
KO: Le vecteur CVSS officiel est
AV:L(Local). Le scénario évalué est un utilisateur peu privilégié ayant un accès local à l'API Docker (typiquement/var/run/docker.sock). Ce PoC utilise uniquement le socket UNIX local. EN: The official CVSS vector isAV:L(Local). The rated scenario is a low-privileged user with local Docker API access (typically/var/run/docker.sock). This PoC uses the local UNIX socket only.
KO:
- Une requête normale de création de conteneur privilégié est bloquée par le plugin AuthZ (HTTP 403).
- La même requête avec un padding dépassant 1 Mo contourne la vérification AuthZ.
- La requête contournée atteint l'étape de traitement du démon Docker et crée un conteneur privilégié.
- Avec la combinaison privilégié + montage bind hôte, la lecture de fichiers hôte et l'exécution de commandes hôte peuvent être démontrées.
EN:
- A normal-sized privileged container-create request is blocked by the AuthZ plugin (HTTP 403).
- The same request padded beyond 1MB bypasses the AuthZ check.
- The bypassed request reaches the Docker daemon and creates a privileged container.
- With privileged + host bind mount, host file read and host command execution can be demonstrated.
KO: Ce CVE en lui-même ne lit pas
/etc/shadowet n'exécute pas de RCE directement. La vulnérabilité est le contournement d'une requête API Docker que AuthZ devrait bloquer ; les étapes ultérieures (lecture de fichier, chroot, exécution de commande) sont des démonstrations d'impact qui abusent des fonctionnalités normales de Docker/Linux. EN: The CVE itself does not read/etc/shadowor perform RCE directly. The vulnerability is the bypass of a Docker API request that AuthZ should block; the later steps (file read, chroot, command execution) are impact demos that abuse normal Docker/Linux features.
.
├── README.md
├── poc.py # PoC fonctionnel (socket UNIX local uniquement)
├── requirements.txt # Bibliothèque standard Python uniquement
├── LICENSE
├── lab/
│ ├── authz.rego # Politique OPA : bloque privilégié + montage racine hôte
│ └── daemon.json # Enregistre le plugin AuthZ
└── docs/
├── concepts.md # Concepts
├── lab-setup.md # Configuration du laboratoire
├── how-it-works.md # Fonctionnement (niveau source)
├── usage.md # Utilisation
├── troubleshooting.md # Dépannage
└── references.md # Références
KO: Toutes les conditions suivantes sont nécessaires pour que ce PoC soit significatif. EN: All of the following are required for this PoC to be meaningful.
| Condition | Requis | Raison |
|---|---|---|
Accès local à l'API Docker (/var/run/docker.sock) | Oui | Le PoC envoie des requêtes au socket |
| Plugin AuthZ activé avec une politique inspectant le corps | Oui | La cible du contournement est la vérification AuthZ |
| Docker/Moby < 29.3.1 | Oui | Les versions patchées rejettent les corps surdimensionnés |
Image alpine présente localement | Recommandé | Sinon la création retourne 404 No such image |
# 1) Télécharger l'image utilisée par le PoC
sudo docker pull alpine
# 2) Lancer la vérification de contournement non destructive
sudo python3 poc.py --mode check
Résultat attendu sur une cible vulnérable / Résultat attendu sur une cible vulnérable :
small request -> HTTP 403 (AuthZ bloque)
oversized request -> HTTP 201 or HTTP 404 (AuthZ contourné ; le daemon l'a traitée)
KO: Un
404 No such imageest aussi une preuve de contournement — la requête a traversé AuthZ (pas de 403) et a atteint l'étape de recherche d'image du démon. Pour éviter la confusion dans une démo, tirezalpineau préalable. EN: A404 No such imageis still evidence of bypass — the request passed AuthZ (not 403) and reached the daemon's image lookup. Pullalpinebeforehand to avoid confusion in a demo.
Voir docs/usage.md pour l'utilisation complète. / Voir docs/usage.md pour l'utilisation complète.
KO: Utilisez ceci uniquement dans un laboratoire isolé dont vous êtes propriétaire ou pour lequel vous avez une autorisation explicite. N'exécutez pas contre des API Docker distantes, des serveurs tiers, la production ou des points de terminaison Docker exposés sur Internet. Les modes de démonstration d'impact (
rce-proof,host-command,reverse-shell-local) nécessitent un indicateur de confirmation explicite. EN: Use only in an isolated lab you own or are explicitly authorized to test. Do not run against remote Docker APIs, third-party servers, production, or internet-exposed Docker endpoints. The impact-demo modes (rce-proof,host-command,reverse-shell-local) require an explicit confirmation flag.
Voir docs/references.md. / Voir docs/references.md.