CVE-2024-34002: Lokale Dateieinbindung über manipulierte Feedback-Sicherungen in Moodle
Beim Wiederherstellen einer Feedback-Aktivität übernahm Moodle den Typ jedes Elements aus der Sicherungsdatei und baute daraus den Pfad einer PHP-Datei, die anschließend eingebunden wurde.
1Zusammenfassung
- Advisory
- MSA-24-0013
- System
- Moodle
- Komponente
- Feedback-Aktivität (mod_feedback)
- Fehlerklasse
- Lokale Dateieinbindung (LFI)
- Schwere
- Serious
Ein Feedback besteht aus Elementen wie Multiple-Choice-Fragen, Textfeldern oder Infotexten. Welcher Code ein Element darstellt und auswertet, entscheidet sein Typ: Moodle sucht unter diesem Namen ein Verzeichnis im Feedback-Modul und lädt die PHP-Datei darin.
In einer Sicherung steht der Typ als einfacher Text. Moodle hat ihn beim Wiederherstellen ohne Bereinigung übernommen und später, beim Laden der Elemente, in den Dateipfad eingesetzt. Ein veränderter Typ konnte so auf eine Datei an anderer Stelle des Servers zeigen.
Gemeldet von Vincent Schneider über den Security-Prozess von Moodle, veröffentlicht als MSA-24-0013.
2Wer ist betroffen
Wer Feedback-Aktivitäten wiederherstellen darf und auf einem falsch konfigurierten Shared Hosting zusätzlich eigene Dateien außerhalb des Moodle-Verzeichnisses ablegen kann.
Laut Advisory müssen zwei Dinge zusammenkommen. Die Person braucht das Recht, Feedback-Aktivitäten wiederherzustellen, und sie muss auf demselben Server außerhalb des Moodle-Verzeichnisses Dateien ablegen können.
Die zweite Bedingung erfüllt nur ein Shared Hosting, bei dem ein Kundenkonto auf die Inhalte anderer Konten zugreifen kann. Auf einem eigenen Server fehlt sie.
3Auswirkung
Eine eingebundene PHP-Datei wird ausgeführt, und zwar im Prozess des Webservers mit allem, was Moodle selbst lesen darf. Dazu gehören die Datenbank-Zugangsdaten in config.php.
4Behebung
- Betroffene Versionen
- 4.3.0 bis 4.3.3, 4.2.0 bis 4.2.6, 4.1.9 und älter
- Behoben in
- 4.3.4, 4.2.7, 4.1.10
- Veröffentlicht
- 13.05.2024
- Fix im Quellcode
- 5a18d94
Der Fix setzt an zwei Stellen an. Beim Wiederherstellen und beim Laden reduziert clean_param() den Typ auf Buchstaben, und feedback_get_item_class() bindet nur noch Typen ein, die im Modul tatsächlich vorhanden sind. Bei allen anderen bricht Moodle mit einem Fehler ab.
Wer Moodle bei einem Shared-Hosting-Anbieter betreibt, sollte unabhängig vom Update prüfen lassen, ob die Kundenkonten dort sauber voneinander getrennt sind.
Diese Fehlerklasse prüfen wir in jedem Projekt, das wir bauen oder auditieren. Für fremden Code als Sicherheitsaudit.
5 / Kontakt
Sollen wir Ihre Moodle-Plugins prüfen?
Beschreiben Sie Ihr Vorhaben in drei kurzen Schritten. Wir melden uns in der Regel innerhalb eines Werktags.