Authentifizierter beliebiger Datei-Upload, der zu Remote Code Execution führt – Technische Analyse und kontrollierte Reproduktion von CVE-2026-38526 in Webkul Krayin CRM 2.2.x.
Authentifizierter beliebiger Datei-Upload, der zu Remote Code Execution führt – Technische Analyse und kontrollierte Reproduktion von CVE-2026-38526 in Webkul Krayin CRM 2.2.x.
CVE-2026-38526 ist eine Schwachstelle für authentifizierten beliebigen Datei-Upload, die Webkul Krayin CRM 2.2.x betrifft.
Die anfällige Funktionalität wird über den TinyMCE-Upload-Endpunkt der Anwendung bereitgestellt:
POST /admin/tinymce/upload
Die Anwendung schränkt den Typ der hochladbaren Datei nicht ausreichend ein. Ein authentifizierter Benutzer kann eine Datei mit einer serverseitig ausführbaren Erweiterung wie .php einreichen. Die Anwendung speichert die hochgeladene Datei und gibt ihre erreichbare URL zurück.
Wenn die Bereitstellung die PHP-Ausführung vom Upload-Speicherort aus erlaubt, kann die hochgeladene Datei anschließend über den Webserver angefordert werden, was zu Remote Code Execution im Kontext des Webanwendungsprozesses führt.
Der veröffentlichte CVE-Eintrag bewertet die Schwachstelle mit CVSS 3.1: 9.9 (Kritisch).
Dieses Repository enthält meine eigene technische Analyse und kontrollierte Reproduktion der Schwachstelle.
Die Schwachstelle wurde bereits öffentlich unter CVE-2026-38526 offengelegt. Diese Arbeit erhebt keinen Anspruch auf die Entdeckung der Schwachstelle. Der Zweck dieser Forschung war es, die anfällige Implementierung zu verstehen, den Ausnutzungspfad in einer kontrollierten Umgebung zu reproduzieren und die Bedingungen zu untersuchen, die aus dem Datei-Upload-Problem eine Remote Code Execution machen.
Die Schwachstelle wurde außerdem in der Hack The Box GCSB 2026 Nexus-Maschine verwendet, die eine praktische Umgebung für die Untersuchung des Problems bot.
Produkt: Webkul Krayin CRM Betroffene Versionen: 2.2.x Schwachstelle: Beliebiger Datei-Upload Resultierende Auswirkung: Remote Code Execution Authentifizierung: Erforderlich Angriffsvektor: Netzwerk CWE: CWE-434 — Unrestricted Upload of File with Dangerous Type CVSS: 9.9 Kritisch CVE: CVE-2026-38526
Die anfällige Funktionalität wird behandelt von:
/admin/tinymce/upload
Der Endpunkt akzeptiert eine hochgeladene Datei über den Parameter file. Die relevante Anwendungslogik leitet den gespeicherten Dateinamen vom ursprünglichen Dateinamen ab und behält dessen ursprüngliche Erweiterung bei.

Dieses Verhalten ist wichtig, weil die Anwendung nicht einfach ein hochgeladenes Objekt akzeptiert; sie behält eine vom Angreifer kontrollierte ausführbare Erweiterung bei und macht das resultierende Objekt über den Speichermechanismus der Anwendung erreichbar.
Das Hauptproblem ist die unzureichende serverseitige Validierung hochgeladener Dateien.
Die Anwendung verwendet die ursprüngliche, vom Client gelieferte Erweiterung beim Erstellen des gespeicherten Dateinamens. Es gibt keine ausreichend restriktive Allowlist, die verhindert, dass ausführbare Dateitypen die Speicherschicht erreichen.
Der relevante Ablauf ist

Die Verwendung eines generierten Dateinamens behebt das zugrunde liegende Problem nicht.
Beispielsweise macht es shell.php nicht sicher, wenn es in einen generierten Dateinamen wie .php umgewandelt wird, solange der Server .php-Dateien weiterhin als ausführbaren PHP-Code interpretiert.
Ein uneingeschränkter Upload bedeutet nicht automatisch Remote Code Execution.
Der Ausführungspfad hängt davon ab, wie der Server die hochgeladene Datei behandelt.
Im anfälligen Bereitstellungsszenario wird die Kette zu

Wenn die PHP-Ausführung für das Upload-Verzeichnis deaktiviert ist, kann der direkte RCE-Pfad verhindert werden, obwohl die zugrunde liegende Schwachstelle des beliebigen Datei-Uploads bestehen bleibt.
wget:
wget https://raw.githubusercontent.com/Ish3ng0m4/CVE-2026-38526-KrayinCRM/main/poc/upload.py
wget https://raw.githubusercontent.com/Ish3ng0m4/CVE-2026-38526-KrayinCRM/main/poc/marker.php
curl:
curl -LO https://raw.githubusercontent.com/Ish3ng0m4/CVE-2026-38526-KrayinCRM/main/poc/upload.py
curl -LO https://raw.githubusercontent.com/Ish3ng0m4/CVE-2026-38526-KrayinCRM/main/poc/marker.php
2. Platzieren Sie die Dateien in
poc/
├── upload.py
└── marker.php
3. Erstellen Sie eine Python-Umgebung und installieren Sie die Abhängigkeit
python3 -m venv .venv
source .venv/bin/activate
pip install requests
4. Machen Sie das PoC ausführbar
chmod +x poc/upload.py
6. Führen Sie es aus
python3 poc/upload.py \
--url http://[Lab_IP:PORT] \
--email [email protected] \
--password 'YOUR_PASSWORD'
Die Ausnutzung erfordert ein authentifiziertes Konto, das in der Lage ist, die verwundbare Funktionalität zu erreichen.
Auf hoher Ebene:
Der resultierende Ausführungskontext wird durch die zugrunde liegende Bereitstellung bestimmt. In einer typischen Linux-Bereitstellung kann dies das Dienstkonto des Webservers sein, wie zum Beispiel:
www-data
Dies verleiht nicht automatisch Root-Privilegien auf Betriebssystemebene. Die weitere Auswirkung hängt von den Berechtigungen und der Konfiguration der kompromittierten Umgebung ab.
Das verwundbare Verhalten lässt sich auf drei wichtige Operationen reduzieren.
Die hochgeladene Datei erhalten
$file = request()->file('file');
Die Anwendung empfängt die vom Client bereitgestellte Datei.
Die vom Client kontrollierte Erweiterung beibehalten
$filename = md5($file->getClientOriginalName().time())
.'.'.$file->getClientOriginalExtension();
Der Dateiname selbst wird geändert, aber die ursprüngliche Erweiterung bleibt erhalten. Dies ist eine wichtige Unterscheidung: Die Randomisierung des Dateinamens ist keine Dateitypvalidierung.
Die Datei speichern und bereitstellen
$path = $file->storeAs($this->storagePath, $filename);
return [
'file' => $path,
'file_name' => $file->getClientOriginalName(),
'file_url' => Storage::url($path),
];
Die Anwendung speichert die Datei und stellt dem Client ihre URL bereit.
Eine erfolgreiche Ausnutzung kann einem Angreifer Codeausführung unter den Privilegien der Webanwendung ermöglichen.