Zero-Day Sicherheitslücke in der MongoDB-Verwaltung

Originalartikel von Suraj Sahu, Vulnerability Research Engineer

phpMoAdmin (kurz für PHP MongoDB Administration Tool) ist ein quelloffenes, kostenloses MongoDB GUI-Tool. phpMoAdmin ist in PHP geschrieben und wird für das Management der noSQL-Datenbank MongoDB häufig eingesetzt. Nun wurde eine Zero-Day-Lücke in dem Tool entdeckt, die es Angreifern ermöglicht, per Fernzugriff beliebigen Code ohne Authentifizierung auszuführen.
Es handelt sich um einen Command Injection-Fehler, der auftaucht, wenn die Webanwendungen auf Basis von Nutzereingaben, die Teil des User Requests sind, bestimmte Betriebssystembefehle ausführt.

Analyse der Sicherheitslücke

Die Schwachstelle liegt in der moadmin.php-Datei. Aufgrund der Art und Weise, wie moadmin.php die eval-Funktion im Code nutzt, können Angreifer Shell-Befehle wie system, eval, exec etc. ausführen. Es gibt zwei Ausführungspfade für den Missbrauch der Sicherheitslücke. Dies ist der angreifbare Code aus moadmin.php:

  1. Angriff über den find-Parameter.



Bild 1. Angriff über den find-Parameter.

 

  1. Angriff über den object-Parameter.


Bild 2. Angriff über den object-Parameter

Die beiden Parameter ermöglichen es, beliebigen Code mit entsprechenden Code-Parameterwerten auf einem angreifbaren Server auszuführen.

Um den find-Parameter zu missbrauchen, lassen sich verschiedene http-Methoden wie POST, GET, CONNECT und PUT einsetzen. Die zweite Methode nutzt den object-Parameter, mit dem ein Angriff nur über die POST-Methode zu starten ist.

Der Exploit dieser Sicherheitslücke ist einfach und Trend Mico empfiehlt, die Server sofort zu patchen oder die Sicherheitslösungen zu aktualisieren, um die Lücke zu schließen.

  1. Mit dem find-Parameter:

POST /xyz/moadmin.php?action=listrows&collection=nnn&find=array();system(‚ls‘); HTTP/1.1
GET /xyz/moadmin.php?action=listrows&collection=nnn&find=array();system(‚ls‘); HTTP/1.1
CONNECT /xyz/moadmin.php?action=listrows&collection=nnn&find=array();system(‚ls‘); HTTP/1.1
PUT /xyz/moadmin.php?action=listrows&collection=nnn&find=array();system(‚ls‘);  HTTP/1.1

Obige Befehle zwingen den Server den ls-Befehl auszuführen. Der Angriff über das Netzwerk sieht folgendermaßen aus:


Bild 3. HTTP Header die den find-Parameter nutzen

Die Ergebnisse des ls-Befehls sieht man hinter den erwarteten HTTP Headers. Um den find-Parameter anzuwenden, müssen action mit listrows und collection=n mit beliebigen Werten initialisiert werden sowie find mit array(). Der ls-Befehl steht innerhalb des system() Call ganz am Ende.

  1. Mit dem Object-Parameter:

curl  „http://xyz /moadmin.php“ -d „object=1;system(‚id‘);exit“

Folgendermaßen sieht der Angriff über das Netzwerk aus:


Bild 4. HTTP Header,die den find-Parameter verwenden

Die Nachforschungen von Trend Micro ergaben, dass nur mit der POST-Methode die Sicherheitslücke über diesen Angriffsweg missbraucht werden kann. Um den object-Parameter einzusetzen, muss er mit einem beliebigen Wert initialisiert werden. Auch hier stehen die Ergebnisse des ls-Befehls hinter den erwarteten HTTP Headern.

Es wäre für Angreifer nicht schwierig, diese Sicherheitslücke dazu zu nutzen, um andere Befehle auszuführen, die den Server schwer beschädigen könnten (etwa Downloading und Ausführen von bösartigen Dateien). Damit könnten sie den Server kontrollieren.

Trend Micro Deep Security schützt die Anwender über folgende Regeln, die sie über ein Update DSRU15-008 einsetzen können:

  • 1006559 – PHPMoAdmin Unauthorized Remote Code Execution Vulnerability

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*