
Docker-basiertes Lab zur Demonstration von CVE-2019-15107, der nicht authentifizierten RCE in Webmin, inklusive Deployment, Ausnutzung, Erkennung und Behebung.
Dieses Projekt demonstriert CVE-2019-15107, eine kritische Remote-Code-Execution-(RCE-)Schwachstelle in Webmin, innerhalb einer kontrollierten und isolierten Docker-Umgebung. Das Lab deckt den vollständigen Lebenszyklus der Schwachstelle ab, von der Bereitstellung und Ausnutzung bis hin zur Erkennung und Behebung.
1.Docker Desktop (installiert und ausgeführt)
2.Docker Compose
3.Terminal / PowerShell mit curl.exe-Unterstützung
1.OS (Lokale Host-Umgebung)
2.Port-Verfügbarkeit: Port 10000 muss auf dem Host-Rechner frei sein.
1.Anwendung: Webmin
2.Verwundbare Version: 1.910 (Betroffene Versionen: 1.880 bis 1.920)
3.Korrigierte/Gepatchte Version: 1.930 und höher
4.Schwachstellentyp: Unsachgemäße Neutralisierung spezieller Elemente, die in einem Betriebssystembefehl verwendet werden (CWE-78)
5.CVSS-Score: 9.8 (Kritisch)
1.Klonen oder laden Sie dieses Projekt-Repository auf Ihren lokalen Rechner herunter.
2.Öffnen Sie Ihr Terminal und navigieren Sie zum Projektverzeichnis, das die docker-compose.yml enthält.
3.Stellen Sie sicher, dass Docker Desktop auf Ihrem System aktiv ist.
Führen Sie den folgenden Befehl aus dem Projektstammverzeichnis aus, um den verwundbaren Container im Detached-Modus abzurufen und zu starten: docker-compose up -d
Sie können den Container-Status überprüfen, indem Sie Folgendes ausführen: docker compose ps
Greifen Sie in Ihrem Webbrowser auf die Anwendungsschnittstelle zu unter: https://localhost:10000 (akzeptieren Sie die lokale SSL-Zertifikatswarnung).
Um die laufende Container-Umgebung zu stoppen und zu entfernen, führen Sie Folgendes aus: docker-compose down
Die Schwachstelle befindet sich im unauthentifizierten Passwortänderungs-Endpunkt (/password_change.cgi), bei dem Eingabeparameter ohne ordnungsgemäße Bereinigung direkt an die System-Shell übergeben werden.
Führen Sie den folgenden Befehl in Ihrem Terminal (PowerShell/Bash) aus, um einen Diagnosebefehl (id) als Proof-of-Concept auszuführen:
curl.exe -k https://localhost:10000/password_change.cgi -e "https://localhost:10000" -d "user=root&pam=&old=test|id&new1=test&new2=test"
Erfolgreiche Ausnutzung: Der Server verarbeitet das injizierte Pipe-Zeichen (|) und löst eine unauthentifizierte Befehlsausführung mit Root-Rechten aus. Das Terminal gibt HTML-Antwortnachweise zusammen mit dem Container-Shell-Feedback (uid=0(root)) aus, was die erfolgreiche Remote-Code-Execution bestätigt.
1.Versionsidentifikation: Überprüfen der Version der laufenden Webmin-Instanz, um festzustellen, ob sie im verwundbaren Bereich (1.880 bis 1.920) liegt.
2.Netzwerk-/Protokollüberwachung: Überprüfen der Webserver-Zugriffs- oder WAF-Protokolle auf eingehende HTTP-POST-Anfragen an /password_change.cgi, die verdächtige Shell-Steuerzeichen (wie | oder ;) innerhalb von Parameterwerten enthalten.
1.Upgrade: Aktualisieren Sie Webmin auf Version 1.930 oder höher, die Eingaben, die an die zugrunde liegenden Module übergeben werden, ordnungsgemäß bereinigt.
2.Zugriffskontrolle: Beschränken Sie den Netzwerkzugriff auf Port 10000 mithilfe von Firewalls oder VPN-Tunneln, um eine direkte Exposition gegenüber nicht vertrauenswürdigen Netzwerken zu verhindern.
1.Docker-Daemon läuft nicht: Wenn Verbindungsfehler auftreten, stellen Sie sicher, dass Docker Desktop vollständig gestartet ist, und überprüfen Sie dies mit docker version.
2.Portkonflikt (10000 bereits in Verwendung): Stellen Sie sicher, dass keine andere lokale Anwendung oder kein anderer Dienst Port 10000 belegt.
3.PowerShell-curl-Syntaxfehler: Verwenden Sie curl.exe anstelle von Standard-curl in Windows PowerShell, um Parameterzuordnungsprobleme mit dem integrierten Invoke-WebRequest-Alias von PowerShell zu vermeiden.