In unserem Labor schreiben wir regelmäßig in Form von Blogbeiträgen über identifizierte Sicherheitslücken, welche nach dem Responsible Disclosure Verfahren veröffentlicht werden.
19.02.2024 - Rene Rehme
Im Zuge eines Penetrationstests haben wir mehrere Sicherheitslücken in ILIAS Version 7.27, 8.8 und 9.0 Beta 2 identifiziert. In dieser Veröffentlichung geht es um eine sogenannte Arbitrary File Deletion via Direcory Traversal Sicherheitslücke. Diese Sicherheitslücke erlaubt einem Angreifer, Aufrufe der Funktion unlink() zu beeinflussen und beliebige Dateien auf dem Webserver zu löschen. Aufgrund einer fehlenden Eingabevalidierung kann ein Angreifer beliebige Dateinamen durch Pfadmanipulation angeben, um bestimmte Dateien zu löschen.
⚑ 18. Jan. 2024 - Die Sicherheitslücke wurde identifiziert.
→ 23. Jan. 2024 - Die Sicherheitslücke wurde an ILIAS gemeldet.
← 29. Jan. 2024 - ILIAS bestätigt den Erhalt des Reports.
← 16. Feb. 2024 - ILIAS bestätigt, dass die Sicherheitslücke geschlossen wurde.
← 16. Feb. 2024 - Patched ILIAS-Release: 8.9, 7.28
Vulnerabel ist das SCORM-Lernmodul, welches dafür verwendet wird, Lernmaterial zur Verfügung zu stellen. Durch einen modifizierten POST-Request, können beliebig Dateien gelöscht werden. Die Vorraussetzung einer Ausnutzung ist ein Nutzer mit gegebenen read Rechten. Per default hat diese Rechte jede Nutzergruppe, welche mit einer Accounterstellung in ILIAS einhergeht.
Hinweis: Lernmaterial wird sehr häufig öffentlich zur Verfügung gestellt. Deshalb ist diese Sicherheitslücke trotz der angegebenen CVSS Metrik "Privileges Required: low" mit entsprechender Kritikalität individuell zu bewerten. Für einen exakt zutreffenden CVSS Base Score sollte daher im Einzelfall überprüft werden, ob Rechte für das vulnerable Module in der jeweiligen Produktionsumgebung auch für Gäste gegeben sind. In solch einem Fall, wäre der Base Score mit PR:N zu bewerten.
In der Klasse class.ilSCORM13PlayerGUI.php ist die Funktion postLogEntry von einem Nutzer mit den Rechten read aufrufbar.
User Input wird beim Aufruf via POST Request im POST-Body definiert und backendseitig über $logdata = json_decode(file_get_contents('php://input')); entgegengenommen.
In weiterführender Logik, wird bei Angabe des Wertes DELETE für den Key action folgender Code ausgeführt:
//delete files
if ($logdata->action === "DELETE") {
$filename = $logdata->value;
$path = $this->logDirectory() . "/" . $filename;
unlink($path);
return;
}
Da es sich bei $filename ebenfalls um einen vom Nutzer definierten Wert handelt, kann jedes File mit entsprechender Berechtigung durch die PHP-Funktion unlink() [1] gelöscht werden.
POST /ilias.php?baseClass=ilSAHSPresentationGUI&cmd=postLogEntry&ref_id=86 HTTP/1.1
Host: ilias.local:8080
{
"action": "DELETE",
"value": "../../../../../.htaccess",
"scoid": 1,
"key": 0,
"result": "1",
"scotitle": "1",
"errorcode": 101,
"timespan": "1"
}
In diesem Beispiel wird die Datei .htaccess via Direcory Traversal [1] aus dem documentRoot der ILIAS Instanz entfernt.
Diese Schwachstelle kann erhebliche Auswirkungen auf die Sicherheit der betroffenen ILIAS-Installation und des zugrunde liegenden Betriebssystem haben. Alle auf dem Server gespeicherten Daten, Dateien und Komponenten, die der Webserver-User mit gegebenen Rechten löschen kann, sind potenziell betroffen. Ein Angreifer, der diese Schwachstelle erfolgreich ausnutzt, könnte zudem das System beschädigen oder weitere Angriffe in Kombination anderer Sicherheitslücken durchführen. Zum Beispiel zur Bewerkstelligung einer Remote Code Execution (RCE).
CWE-20 Improper Input Validation
CWE-35 Path Traversal
CWE-73 External Control of File Name or Path
Attack Vector (AV): N
Es handelt sich um einen Netzwerkangriff. Die verwundbare Komponente ist "aus der Ferne ausnutzbar" und wird als ein Angriff betrachtet, der auf Protokollebene über das Internet stattfindet.
Attack Complexity (AC): L
Besondere Zugangsbedingungen oder mildernde Umstände bestehen nicht.
Attack Requirements (AT): N
Es wird davon ausgehen, dass die Payload in den meisten Fällen erfolgreich ausgeführt wird. Es werden keine besonderen Einstellungen oder Konfigurationen vorrausgesetzt.
Privileges Required (PR): L
Der Angreifer benötigt Privilegien, die grundlegende Benutzerfunktionen eines Users bereitstellen. Für eine Ausnutzung reicht i.d.R ein User-Account.
User Interaction (UI): N
Es ist keine User-Interaktion durch ein Opfer notwendig
Confidentiality (VC): N
Bei einem erfolgreichen Angriff kommt es zu keinem Verlust der Vertraulichkeit.
Integrity (VI): N
Bei einem erfolgreichen Angriff kommt es zu keinem Verlust der Integrität.
Availability (VA): H
Bei einem erfolgreichen Angriff ist der Angreifer ist in der Lage, den Zugang zu den Ressourcen der betroffenen Komponente vollständig zu verweigern, indem z.B. Dateien oder Daten gelöscht werden.
Confidentiality (SC): N
Bei einem erfolgreichen Angriff kommt es zu keinem Verlust der Vertraulichkeit.
Integrity (SI): N
Bei einem erfolgreichen Angriff kommt es zu keinem Verlust der Integrität.
Availability (SA): H
Bei einem erfolgreichen Angriff ist der Angreifer ist in der Lage, den Zugang zu den Ressourcen aus Komponenten des Betriebssystems oder ggf. anderen Applikationen vollständig zu verweigern, indem z.B. Dateien oder Daten mit den Rechten des Webserver Users gelöscht werden.
ILIAS (Vendor) Advisories