
PoC pour Docker `docker cp` : écriture arbitraire de fichiers, exploitant les failles de symlink et d'extraction tar pour écraser les binaires de l'hôte ou lancer des agents afin de s'échapper du conteneur et d'exécuter du code en tant que root.
docker cp — écriture arbitraire de fichiers du conteneur vers l'hôteImage de distribution HackSpeak. Ce dépôt est une image de distribution du PoC CopyEscape (CVE-2026-17106) publié par l'équipe rouge d'Imperva (Ron Masas), le code est identique à l'amont ; l'amont n'inclut pas de LICENSE, l'image suit la convention de distribution en utilisant MIT License, Copyright (c) 2026 HackSpeak, le code source appartient à l'auteur original.
⚠️ Réservé à la recherche en sécurité et aux tests autorisés ; la démo Linux écrase
/usr/bin/runc, veuillez l'exécuter dans une VM jetable et faire d'abord une sauvegarde vérifiable, ne l'utilisez pas sur des systèmes non autorisés ou en production.
CopyEscape (CVE-2026-17106) est une vulnérabilité d'écriture arbitraire de fichiers du conteneur vers l'hôte dans Docker docker cp (et sbx cp de Docker Sandboxes), découverte par Imperva Red Team (Ron Masas).
docker cp n'est pas une copie directe du système de fichiers — le daemon exécute filepath.WalkDir sur le système de fichiers du conteneur pour générer une archive tar, le CLI reçoit le tar puis l'extrait côté client ;addTarFile refait un Lstat, il voit un symlink → le flux tar contient des entrées incohérentes (d'abord un en-tête symlink, suivi d'entrées « fichiers enfants ») ;filepath.Join est vérifié pour respecter les limites, mais os.Symlink utilise en réalité le hdr.Linkname d'origine non vérifié (pouvant pointer vers un chemin absolu) ; lors de l'extraction ultérieure des fichiers enfants, le noyau suit ce symlink et écrit en dehors de la destination spécifiée par l'utilisateur ;docker cp. Sur macOS, il peut écraser les scripts de démarrage du shell et la persistance ~/Library/LaunchAgents ; sur Linux, avec , il peut écraser , et les opérations ultérieures du cycle de vie de Docker permettent alors l'exécution de code en root.sudo docker cp sur des conteneurs non fiables.Deux démos (environnement de test identique à l'officiel : Engine 29.6.1 / Desktop 4.81.0) :
macOS (non destructif, crée ~/pwnd)
cd macos
./demo-macos.sh
Linux (impact élevé, écrase /usr/bin/runc)
cd linux
# 按 linux/ 内说明构建镜像并运行;⚠️ 覆盖 runc 前务必备份
Les étapes détaillées se trouvent dans les fichiers de documentation des sous-répertoires
macos/etlinux/de ce dépôt.
/usr/bin/runc) ; elle doit être exécutée dans une VM jetable avec sauvegarde.docker cp — https://www.imperva.com/blog/copyescape-taking-over-docker-hosts-with-docker-cp/sudo docker cp/usr/bin/runc