Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
POC-CopyEscape-CVE-2026-17106 — Funktionsfähiger PoC für CVE-2026-17106 (CopyEscape): TOCTOU-Race in docker cp, das beliebiges Schreiben auf dem Docker-Host ermöglicht. Docker-Labor + inotify-Monitor + LD_PRELOAD. Harmlose macOS-Variante und destruktive Linux-Variante. | Kitploit
Tools/GitHubGitHub/686f6c61/poc-copyescape-cve-2026-17106
Privilege EscalationContainer-SicherheitSchwachstellenanalyseExploitationLernen & BildungContainer-AusbruchAdversarial-AngriffLabs & Praxis

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
GitHub
686f6c61/poc-copyescape-cve-2026-17106

POC-CopyEscape-CVE-2026-17106

Funktionsfähiger PoC für CVE-2026-17106 (CopyEscape): TOCTOU-Race in docker cp, das beliebiges Schreiben auf dem Docker-Host ermöglicht. Docker-Labor + inotify-Monitor + LD_PRELOAD. Harmlose macOS-Variante und destruktive Linux-Variante.

Repository anzeigen
17vor 28 TagenNoch nicht geprüft

CopyEscape — PoC zu CVE-2026-17106

Pädagogisches Proof of Concept zu CopyEscape (CVE-2026-17106), einer TOCTOU-Race-Condition-Schwachstelle in docker cp, die es einem bösartigen Container ermöglicht, beliebige Dateien auf dem Docker-Host zu schreiben. Inspiriert von der ursprünglichen Arbeit von masasron, der die Schwachstelle im Blog "CopyEscape: Taking Over Docker Hosts with docker cp" entdeckte und dokumentierte.


Inhaltsverzeichnis

  1. Zusammenfassung
  2. Rechtshinweis
  3. Architektur der Kette
  4. Voraussetzungen
  5. Repository-Struktur
  6. Kurzanleitung
  7. Überprüfung der Ausnutzung
  8. Vergleich mit dem Original
  9. Gegenmaßnahmen
  10. Danksagungen
  11. Lizenz

Zusammenfassung

CVE-2026-17106 ist eine TOCTOU-Race-Condition-Schwachstelle bei der Extraktion der Tar-Datei, die der Docker-Daemon während docker cp <contenedor>:<ruta> <destino> erzeugt. Betroffen sind die Docker CLI 29.6.1 und frühere Versionen; ab 29.7.0 wurde sie gepatcht. Der Fehler liegt in der CLI (Tar-Extraktion auf dem Host), nicht im Daemon.

Die als CopyEscape bezeichnete Kette zeigt, wie ein Angreifer – allein ausgehend von einem laufenden Container ohne zusätzliche Capabilities – Folgendes erreichen kann:

  1. Ein echtes Verzeichnis /watched/file.txt/ vor jedem Prozess, der es innerhalb des Containers öffnet, als reguläre Datei tarnen – mithilfe einer LD_PRELOAD-Bibliothek, die open, openat, openat2, fopen, stat, lstat, fstatat, statx und die 64-Varianten abfängt.
  2. Eine 16-MiB-Köderdatei aaa.txt bereithalten, die den Daemon zwingt, bei der Tar-Erstellung lange genug zu brauchen, damit der Monitor den Wettlauf gewinnt.
  3. Mit inotify die Zugriffe des Daemons überwachen und im Wettlauffenster ein Unterverzeichnis escape/ durch einen absoluten Symlink auf das Host-Ziel ( unter macOS oder unter Linux) ersetzen – mittels zweier atomarer -Aufrufe mit Rollback.

Das Ergebnis ist beliebiges Schreiben von Dateien auf dem Host mit den Rechten des Prozesses, der docker cp ausführt. Die Linux-Variante überschreibt /usr/bin/runc und erreicht beim nächsten docker run / exec Codeausführung als root auf dem Host.


Rechtshinweis

Dieses Repository enthält ausschließlich lehrreiches und defensives Material.

  • Zweck: Demonstration der Ausnutzungskette zu Schulungszwecken, für eigene Audits und zur Validierung von Patches.
  • Autorisierte Nutzung: Führe die PoC ausschließlich gegen Systeme aus, die dir gehören oder für die du eine ausdrückliche schriftliche Genehmigung hast.
  • Verboten: Jegliche Nutzung gegen Systeme Dritter ohne Einwilligung. Der Autor des Repositorys übernimmt keine Verantwortung für den Missbrauch des hier enthaltenen Materials.
  • Verantwortung: Der Betreiber ist allein für die Einhaltung der geltenden Gesetze verantwortlich (LOPD/DSGVO in Spanien, CFAA in den USA usw.).
  • Die Linux-Variante zerstört das runc des Hosts: Verwende sie ausschließlich in einer Wegwerf-VM mit verifizierter Sicherungskopie.

Die PoC wird mit einer harmlosen macOS-Variante geliefert (schreibt ~/pwnd als Marker), deren einziger Zweck es ist, als reproduzierbare Demonstration zu dienen.


Architektur der Kette

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────┐
│  1. LD_PRELOAD camufla /watched/file.txt como archivo regular       │
│     open/openat/openat2/fopen/stat/lstat/fstatat/statx → decoy       │
│     docker exec ... cat /watched/file.txt  →  "top-level file"       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  2. Layout real dentro del contenedor                               │
│     /watched/file.txt/                                               │
│     ├── aaa.txt            (16 MiB de 'B', cebo lento)               │
│     ├── escape/            (directorio real inicial)                 │
│     ├── escape/<basename>  (payload: runc o pwnd)                    │
│     └── .swap-escape       (symlink → /Users/<usr> o /usr/bin)       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  3. docker cp pide tar al daemon                                    │
│     daemon recorre /watched/file.txt/ y abre aaa.txt                │
│     inotify detecta IN_OPEN sobre aaa.txt                           │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  4. Monitor pivot: dos rename(2) atomicos con rollback              │
│     escape/ → .old-escape/   (backup)                                │
│     .swap-escape → escape/   (symlink al target del host)            │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  5. Tar resultante contiene:                                        │
│     escape → /Users/<usr>   (symlink absoluto)                       │
│     escape/<basename>        (entrada hija que atraviesa el symlink) │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  6. CLI vulnerable extrae symlink + hija                            │
│     crea escape → /Users/<usr> en el destino local                   │
│     extrae escape/<basename> A TRAVES del symlink                    │
│     escribe /Users/<usr>/<basename> en el host                       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  macOS: ~/pwnd con "COPYESCAPE_MACOS_DEMO"  (demo inocua)           │
│  Linux: /usr/bin/runc sobrescrito          (RCE como root)          │
└─────────────────────────────────────────────────────────────────────┘

Voraussetzungen

Die PoC ist für die Ausführung unter macOS ausgelegt mit:

  • Docker Desktop 4.81+ in Betrieb (der Daemon kann eine beliebige Version sein; der Fehler liegt in der CLI).
  • curl, tar, git und docker im PATH.
  • Internetverbindung zum Herunterladen der anfälligen CLI 29.6.1 (etwa 18 MB) und des Basisimages alpine:3.21.
  • HOME in der Form /Users/<usuario>.

Für die macOS-Variante wird kein Root benötigt. Die Linux-Variante erfordert Root und eine Wegwerf-VM.

Der Runner run-poc.sh lädt das Binärprogramm der anfälligen CLI 29.6.1 automatisch von der offiziellen Docker-Website (download.docker.com) herunter. Er verändert die Docker-Desktop-Installation des Systems nicht: Er verwendet den aktuellen Daemon, ruft jedoch das heruntergeladene Binärprogramm für die docker cp-Operation auf.


Repository-Struktur

root@kitploit:~
POC CopyEscape (CVE-2026-17106)/
├── README.md                 ← Este archivo
├── LICENSE                   ← Licencia MIT
├── .gitignore
├── Dockerfile                ← Dockerfile unificado (macos | linux)
├── entrypoint.sh             ← Arranque del monitor sin LD_PRELOAD
├── monitor.c                 ← Monitor inotify unificado (una sola fuente)
├── watched_preload.c         ← LD_PRELOAD con cobertura ampliada
└── run-poc.sh                ← Runner robusto con reintentos

Das Verzeichnis cli-vulnerable/ (heruntergeladene CLI 29.6.1) wird über .gitignore vom Repository ausgeschlossen. Der Runner lädt sie automatisch herunter, wenn sie nicht vorhanden ist.


Kurzanleitung

1. PoC ausführen (macOS-Variante, harmlos)

root@kitploit:~
cd poc-v2
./run-poc.sh

Der Runner:

  1. Lädt die anfällige CLI 29.6.1 herunter, falls sie nicht vorhanden ist.
  2. Baut das Docker-Image copyescape-macos-pocv2:local.
  3. Startet den vorbereiteten Container mit COPYESCAPE_HOST_HOME=$HOME.
  4. Wartet, bis /watched/file.txt innerhalb des Containers lesbar ist.
  5. Führt docker cp mit der anfälligen CLI aus.
  6. Überprüft die Erstellung des Markers ~/pwnd.

2. Optionen des Runners

root@kitploit:~
./run-poc.sh 10         # 10 intentos (la carrera es probabilistica)
./run-poc.sh --cleanup  # 5 intentos y borra la imagen al final

3. Erwartete Ausgabe

root@kitploit:~
[run-poc] CLI vulnerable: 29.6.1
[run-poc] Intento 1/5 (contenedor copyescape-pocv2-NNNN-RRRR)
[run-poc]   /watched/file.txt lee: top-level file
[run-poc]   docker cp (CLI 29.6.1)...
[run-poc]   EXITO en intento 1: se creo /Users/<tu-usuario>/pwnd
  Contenido del marcador: COPYESCAPE_MACOS_DEMO
[run-poc]   Logs del monitor:
    [monitor] plataforma=macos target_dir=/Users/<tu-usuario> target_file=/Users/<tu-usuario>/pwnd quiet_ms=400 trigger=aaa.txt
    [monitor] pivoted /watched/file.txt/escape -> /Users/<tu-usuario>
[run-poc] Resumen: 1 exito en 1 intento(s).

4. Bereinigung

root@kitploit:~
rm -f -- "$HOME/pwnd"
rm -rf -- poc-v2/file.txt
docker image rm copyescape-macos-pocv2:local

Überprüfung der Ausnutzung

Sobald die Kette abgeschlossen ist, dienen die folgenden Elemente als Nachweis:


Vergleich mit dem Original

Was vom Original bleibt

Die Idee und die Strategie stammen von masasron: der TOCTOU-Wettlauf gegen den Tar-Erzeuger, die Tarnung über LD_PRELOAD, der 16-MiB-Köder, der Pivot mit zwei rename(2)-Aufrufen und die Struktur escape/ + .swap-escape. Ohne dieses Design gäbe es diese Neufassung nicht. Das konzeptionelle Schema ist identisch.

Was neu geschrieben wurde

Etwa 15-20 % sind Zeilen, die wörtlich übereinstimmen (kurze Hilfsfunktionen und Layout-Konstanten). Der Rest ist neuer Code.


Gegenmaßnahmen

  • Aktualisiere die Docker CLI auf 29.7.0 oder höher. Die PoC funktioniert dann nicht mehr (mit 29.7.2 verifiziert).
  • Führe docker cp nicht aus einem Container aus, dem du nicht vertraust, und unter Linux niemals als root.
  • Einfache Erkennung: Überwache während der Extraktion die Erstellung absoluter Symlinks innerhalb des Ziels von docker cp, oder blockiere im Daemon Tars, die Kindeinträge unter einem Symlink enthalten.
  • Die Ursache des Bugs ist dieselbe Fehlerklasse wie TarSlip / ZipSlip: Die CLI validiert nicht, dass nachfolgende Einträge nicht über einen bereits erstellten Symlink entkommen.

Danksagungen

  • Ursprüngliche Forschung und Offenlegung: masasron — https://github.com/masasron/CopyEscape-CVE-2026-17106
  • PoC und Paketierung dieses Repositorys: eigene Arbeit zu Bildungszwecken, von Grund auf neu geschrieben auf der Grundlage der ursprünglichen Idee.

Lizenz

Verteilt unter der MIT-Lizenz. Weitere Details siehe Datei LICENSE.

Tool herunterladen
/Users/<usuario>
/usr/bin
rename(2)
  • Das resultierende Tar enthält den Symlink escape, gefolgt von einem Kindeintrag escape/<basename>; die anfällige CLI erstellt den Symlink beim Client und extrahiert den Kindeintrag durch ihn hindurch, wobei sie außerhalb des vom Benutzer gewählten Ziels schreibt.
  • RessourceErwarteter Nachweis
    ~/pwndDatei mit Inhalt COPYESCAPE_MACOS_DEMO\n
    poc-v2/file.txt/Verzeichnis (keine Datei) mit escape -> /Users/<tu-usuario> (Symlink) und aaa.txt (16 MiB)
    docker logs <contenedor>Zeile pivoted /watched/file.txt/escape -> /Users/<tu-usuario>
    CLI 29.7.2 (docker cp mit gepatchter CLI)Der Marker wird nicht erstellt; die PoC schlägt fehl
    DateiUrsprüngliche ZeilenNeue ZeilenÄnderung
    watched_preload.c89257Neu geschrieben: Wrapper openat2, fstatat, statx, stat64, lstat64, open64, fopen64; thread-sicherer Konstruktor; Guard gegen dlsym == NULL; O_TMPFILE
    monitor.c (macos + linux)259 + 233 = 492 (doppelt)344 (vereinheitlicht)Neu geschrieben und mit -DCOPYESCAPE_TARGET_* vereinheitlicht; Rollback in try_pivot; exit_quiet_ms und Trigger konfigurierbar; robuste Erkennung
    entrypoint.sh35env -u LD_PRELOAD anstelle von unset
    Dockerfile2243Vereinheitlicht; Digest-Pinning; --platform; ohne -Werror; -static; LABEL
    demo-macos.sh → run-poc.sh88166Neu geschrieben: Wettlauf-Wiederholungen; Logs bei Fehlschlag; --cleanup; Validierung an das Binärprogramm delegiert