
Exploit de preuve de concept pour une vulnérabilité critique d'évasion de conteneur runC (CVE-2026-Pending) avec condition de course de liens symboliques, incluant un PoC en Go, une analyse et une recommandation de correctif.
Gravité : Critique (CVSS 9.8)
Composant : opencontainers/runc (libcontainer)
Type de vulnérabilité : CWE-59 : Résolution incorrecte des liens avant l'accès aux fichiers ('Link Following')
Une vulnérabilité critique existe dans la fonction maskPaths de runc. Lors du masquage de chemins sensibles (comme /proc/kcore) à l'intérieur d'un conteneur, runc utilise os.OpenFile(path, O_PATH, 0) sans l'option O_NOFOLLOW. Cela permet à un processus malveillant du conteneur de remplacer le chemin cible par un lien symbolique pointant vers un fichier sensible de l'hôte (par exemple /etc/shadow), ce qui amène runc à effectuer des opérations de montage sur le fichier hôte au lieu du chemin du conteneur.
Le fichier exploit.go inclus démontre le comportement du noyau qui permet ce contournement.
Compilez et exécutez dans un environnement Linux (ou un conteneur avec CAP_SYS_ADMIN si vous testez la récursion) :
go run exploit.go
// Vulnerable Code Pattern in runC:
// 1. Path is typically provided as a string (e.g. from config)
// 2. runC calls os.OpenFile(path, O_PATH...)
// 3. MISSING: unix.O_NOFOLLOW flag
// Result: Kernel follows symlink if attacker swapped the path.
Correctif requis :
Mettez à jour libcontainer/rootfs_linux.go pour inclure unix.O_NOFOLLOW lors de l'ouverture des chemins de destination pour le masquage.
- dstFh, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC, 0)
+ dstFh, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC|unix.O_NOFOLLOW, 0)
exploit.go : Code PoC fonctionnel en Go.analysis.md : Analyse technique détaillée de la condition de concurrence.cve_draft.md : Modèle de rapport pour soumission.Avertissement : Ce code est destiné uniquement à des fins de recherche en sécurité et d'éducation.