
Hallo, ich bin K, das ist mein erstes CVE, eine Remote Code Execution (RCE)-Schwachstelle. Es ist der Beginn meiner Reise als Sicherheitsforscher.
Authentifizierte Remote Code Execution in Chamilo LMS 1.11.32 durch unsachgemäße Datei-Upload-Validierung im
ck_uploadimage-AJAX-Endpunkt. Ein Benutzer mit niedrigen Rechten (Student) kann eine als Bild getarnte PHP-Web-Shell hochladen und so die vollständige Kontrolle über den Server erlangen.
| Feld | Details |
|---|
| Produkt | Chamilo LMS |
| Version | 1.11.32 (Bestätigt) |
| Schwachstelle | Uneingeschränkter Datei-Upload mit gefährlichem Typ (CWE-434) |
| Auswirkung | Authentifizierte Remote Code Execution (RCE) |
| CVSS v3.1 | 8.8 (HOCH) — CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Authentifizierung erforderlich | ✅ Ja — Studentenrolle (Niedrige Rechte) |
| CWE | CWE-434: Uneingeschränkter Upload von Dateien mit gefährlichem Typ |
| Entdeckt von | MENG HOKSENG |
POST /main/inc/ajax/document.ajax.php?a=ck_uploadimage&cidReq=[COURSE_ID]
Verwundbare Datei: main/inc/ajax/document.ajax.php
Verwundbare Funktion: ck_uploadimage
Der Upload-Handler führt nur eine MIME-Typ-Validierung mit der PHP-Funktion mime_content_type() durch, die die Magic Bytes der Datei (die ersten Bytes des Inhalts) prüft, nicht die Dateierweiterung.
// Verwundbare Validierungslogik (vereinfacht)
$mime = mime_content_type($_FILES['upload']['tmp_name']);
if (!mimeAccepted($mime, ['image'])) {
die("Ungültiger Dateityp");
}
// ❌ Keine Validierung der Dateierweiterung
// ❌ Keine Bereinigung des Dateinamens
move_uploaded_file($_FILES['upload']['tmp_name'], $uploadPath . $fileUploadName);
Zwei separate Schwächen kombinieren sich zu einer vollständigen Exploit-Kette:
GIF89a) vor PHP-Code.php-Erweiterung in einem über das Web zugänglichen VerzeichnisEine bösartige Datei wird wie folgt erstellt:
GIF89a;<?php system($_GET['cmd']); ?>
mime_content_type() liest GIF89a → klassifiziert als image/gif → besteht die Validierungmove_uploaded_file() speichert als shell.php in /app/upload/users/<id>/ → direkt über den Browser ausführbarFühren Sie den vollständigen Exploit aus, der sich als Student anmeldet, um den Datei-Upload automatisch durchzuführen
Nach dem Ausführen des vollständigen Python-Exploits finden wir unsere hochgeladene Web-Shell unter http://localhost:8081/app/upload/users/3/3/my_fileszhxoxgwj.php?cmd=id

Eine erfolgreiche Ausnutzung dieser Schwachstelle führt zu vollständiger Server-Kompromittierung von einem Studentenkonto aus:
CIA-Auswirkung: Vollständiger Verlust von Vertraulichkeit, Integrität und Verfügbarkeit.
▪ Strikte Zulassungsliste für Dateierweiterungen durchsetzen Nur ausdrücklich erlaubte Bilddateierweiterungen (z. B. .jpg, .png, .gif) sollten akzeptiert werden. Hochgeladene Dateien mit ausführbaren Erweiterungen wie .php, .phtml oder .phar müssen abgelehnt werden, unabhängig vom MIME-Typ.
▪ Sich nicht ausschließlich auf die MIME-Typ-Validierung verlassen MIME-Typ-Prüfungen mit Funktionen wie mime_content_type() sollten nicht als primäre Sicherheitskontrolle verwendet werden, da sie mit manipulierten Datei-Headern umgangen werden können. Die MIME-Validierung sollte nur als sekundäre Prüfung verwendet werden.
▪ Hochgeladene Dateien außerhalb von über das Web zugänglichen Verzeichnissen speichern Hochgeladene Inhalte sollten in einem Verzeichnis gespeichert werden, das nicht direkt über den Web- Server zugänglich ist. Wenn öffentlicher Zugriff erforderlich ist, sollten Dateien über einen kontrollierten Handler bereitgestellt werden und nicht über direkten Zugriff.
MENG HOKSENG
Unabhängiger Sicherheitsforscher
Dieses Projekt wird nur für Bildungs- und autorisierte Sicherheitsforschungszwecke veröffentlicht. Der Autor ist nicht verantwortlich für Missbrauch oder Schäden, die durch diesen Exploit verursacht werden. Holen Sie immer eine ausdrückliche schriftliche Genehmigung ein, bevor Sie Sicherheitsbewertungen durchführen.