
CVE-2023-33381: OS-Kommandoinjektion auf MitraStar GPT-2741GNAC
Nachdem ich mich per SSH angemeldet hatte, bemerkte ich sofort die begrenzte Auswahl an verfügbaren Befehlen und Optionen. Es wurde deutlich, dass ich tatsächlich auf eine eingeschränkte Shell-Umgebung beschränkt war.

Nachdem ich einige bekannte Schwachstellen untersucht hatte, beschloss ich, mich auf die Suche nach neuen zu begeben. Zunächst meldete ich mich im Verwaltungsportal an und begann, verschiedene Funktionen zu testen, die möglicherweise zu einer OS-Befehlsinjektion führen könnten. Im Diagnose-Menü stieß ich auf eine besondere Funktion, mit der ich die Konnektivität mithilfe der Befehle ping und traceroute testen konnte.


Also beschloss ich, etwas Hinterhältiges zu versuchen, indem ich meinem Befehl ein ";"-Zeichen hinzufügte. Ich führte "cat /etc/passwd" aus, und rate mal? Der Befehl wurde erfolgreich ausgeführt.

Ich ging noch einen Schritt weiter und führte den Befehl "sed" aus, um den Eintrag für die eingeschränkte Shell in der Datei "/etc/passwd" durch eine vollwertige interaktive Shell zu ersetzen.

Wie im folgenden Bild deutlich zu sehen ist, haben mir die von mir vorgenommenen Änderungen ermöglicht, mich anzumelden und Befehle wie "uname" und "cat" frei auszuführen.

Da ich uneingeschränkte Administratorrechte hatte, konnte ich nicht widerstehen, tiefer zu graben, um die anfällige Komponente aufzudecken. Bei der Untersuchung der Browser-Anfragen fiel mir etwas Interessantes auf. Es gab zwei CGI-Dateien, "ping.cgi" und "DiagGeneral.cgi", auf die die Anfragen abzielten.

Nachdem ich mir die Dateien geschnappt hatte, hatte ich etwas Spaß beim Reverse Engineering mit Ghidra. Hier ist der interessante Teil: In der Datei "ping.cgi" stellte ich fest, dass der Parameter PingIPAddr direkt aus Benutzereingaben übernommen wurde, ohne ordnungsgemäße Bereinigung. Der aus der Benutzereingabe stammende Parameter PingIPAddr wurde mithilfe der Funktion tcapi_set für die spätere Verwendung gespeichert.

Schließlich wurde in der Datei DiagGeneral.cgi der Parameter PingIPAddr mithilfe der Funktion tcapi_get abgerufen und dann ohne jegliche Bereinigung direkt in der Funktion system verwendet. Dieser Fehler erzeugt eine Befehlsinjektions-Schwachstelle, die eine unbefugte Ausführung beliebiger Befehle auf dem System ermöglicht.
