CVE-2025-9074 (Lehr-PoC / Proof-of-Concept-Code)
Dieses Repository enthält einen PoC, der zu Bildungszwecken demonstriert, wie über die nicht authentifizierte Remote-API der Docker Engine ein privilegierter Container mit Lese-/Schreibzugriff auf das Host-Dateisystem erstellt werden kann.
Die ausführbare Datei ist poc.go.
Wichtig: Verwenden Sie diesen PoC nur zu Bildungs- und Verteidigungszwecken. Die Ausführung in Umgebungen Dritter oder auf nicht autorisierten Systemen ist verboten.
Risikobewertung
- Gesamtbewertung: Kritisch
- Angenommener CVSS v3.1-Basiswert: 9.8 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
- Begründung:
- Ohne Authentifizierung über TCP/2375 erreichbar → PR:N, UI:N, AV:N
- Privilegierter Container + Host-Bind-Mount führt zu Scope-Änderung und hoher Auswirkung auf Vertraulichkeit/Integrität/Verfügbarkeit → S:C, C/I/A:H
- Angriffsablauf erfolgt über wenige HTTP-Anfragen an die Docker-Engine-API → AC:L
- Auswirkungsbereich:
- Gesamtes Host-Betriebssystem, andere Container, Ressourcen im selben Netzwerk (einschließlich Diebstahl von Anmeldeinformationen und lateraler Bewegung)
- Ausführungsrechte:
- Nicht authentifiziert (PR:N). Keine Administratorrechte erforderlich
Hintergrund
- Docker Engine bietet eine Remote-API, über die Endpunkte wie
/version, /info oder /containers/create angesteuert werden können.
- Wenn Container von außen erreichbar sind, kann es möglich sein, ohne Authentifizierung Container zu erstellen, Privilegien zu vergeben und Host-Verzeichnisse per Bind-Mount einzubinden.
- In Windows-Umgebungen mit Docker Desktop existieren Mount-Pfade, über die über
/run/desktop/mnt/host/<drive> oder /host_mnt/<drive> auf Windows-Hostlaufwerke zugegriffen werden kann. Dieser PoC nutzt diesen Pfad, um die Auswirkung durch das Erzeugen einer Datei auf dem Host sichtbar zu machen.
Funktionsübersicht
poc.go führt Folgendes aus:
- Ruft die Docker-Engine-API unter
http://192.168.65.7:2375 auf und führt einen Erreichbarkeitstest (/version) durch
- Prüft die Liste verfügbarer Images (
/images/json); falls keines vorhanden ist, wird versucht, alpine:latest zu pullen
- Erstellt einen privilegierten Container und bindet Host-Laufwerke (z. B. C:, N:) unter
/host_root ein
- Schreibt aus dem Container eine Verifikationsdatei (z. B.
cve_2025_9074_poc.txt) direkt unter /host_root, um die Auswirkung sichtbar zu machen
- Löscht den Container nach der Ausführung
Risiken (zu erwartender Missbrauch)
- Lese-/Schreibzugriff auf das Host-Dateisystem (innerhalb der Ausführungsrechte der Docker Engine)
- Diebstahl vertraulicher Informationen (Passwörter, SSH-Schlüssel usw.)
- Manipulation von Systemkonfigurationsdateien
- Installieren von Malware, Persistenz
- Laterale Bewegung zu anderen Containern und Netzwerken
- Privilegienerweiterung
Voraussetzungen
- Etwa Go 1.20+ (funktioniert mit
go run)
- (Verwundbares) Docker Desktop/Engine läuft
- Der Code muss in einem Docker-Container ausgeführt werden, der auf der (verwundbaren) Docker Desktop/Engine ausgeführt wird
- Die Docker-Engine-API antwortet unter
http://192.168.65.7:2375 (Standardwert des PoCs)
Verwendung
-
Repository abrufen
git clone <this-repo>
cd cve-2025-9074
-
PoC ausführen
-
Beispielausgabe
- Erfolgreiche Erreichbarkeit von
/version
- Erkennung eines verwendbaren Images oder Pullen von
alpine:latest
- Erstellung des privilegierten Containers, Ergebnis der Dateierstellung auf dem Host
- Ausgabe von Systeminformationen basierend auf
/info
-
Beispielhafte curl-Befehle für die Demonstration (werden auf dem Bildschirm ausgegeben)
- JSON-Beispiel für
/containers/create, Startbeispiel mit /containers/{id}/start
Anpassung der Konfiguration
- Das Kandidaten-Array in
attemptHostWrite (/run/desktop/mnt/host/<drive>, /host_mnt/<drive>, C:/ usw.) kann an die Umgebung angepasst werden.
- Verwendetes Image
- Vorhandene Images werden bevorzugt. Falls keines vorhanden ist, wird
alpine:latest automatisch gepullt.
Hinweise zur Testumgebung
- Es sind Beispiele für Mount-Pfade enthalten, die das Verhalten unter Windows + Docker Desktop voraussetzen.
- Bei macOS weichen die Host-Pfade ab und müssen entsprechend angepasst werden.
- Je nach Version und Konfiguration von Docker Desktop kann der PoC nicht greifen (= sicher) sein.
Haftungsausschluss
- Dieses Repository dient ausschließlich Forschungs- und Bildungszwecken. Es fördert keine Angriffs-, Eindring- oder Zerstörungshandlungen.
- Der Autor übernimmt keine Haftung für Schäden, die durch die Verwendung dieses PoCs entstehen.
- Führen Sie ihn nicht außerhalb einer isolierten Umgebung aus, für die Sie über die rechtmäßige Verwaltungsberechtigung verfügen.
Lizenz