
Boîte à outils d'exploitation automatisée et modèle de détection pour CVE-2024-21546, une RCE non authentifiée dans UniSharp Laravel Filemanager, avec contournement du WAF et shell interactif.
Ce dépôt contient des outils d'évaluation de sécurité, des modèles de détection et une boîte à outils d'exploitation automatisée pour identifier et exploiter l'Exécution de Code à Distance (RCE) non authentifiée dans les applications utilisant le paquet UniSharp/laravel-filemanager (Versions < 2.9.1).
laravel-filemanager.yaml)
cve_2024_21546_rce.py)
La vulnérabilité découle de deux conditions combinées :
/laravel-filemanager sans appliquer le pipeline de middleware 'auth' ou 'web'..), permettant aux attaquants de contourner les listes noires de fichiers exécutables et de placer des scripts PHP dans le stockage public.LfmUploadValidator.php)Dans les versions antérieures à v2.9.1, LfmUploadValidator.php vérifiait les extensions de fichiers par rapport à une liste noire en utilisant :
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;
}
Lorsqu'un attaquant téléverse un fichier nommé poc.php. :
getClientOriginalExtension() de Symfony extrait les caractères suivant le point final.getClientOriginalExtension() évalue à "" (chaîne vide).in_array("", ['php', 'html']) évalue à false, contournant ainsi le blocage d'extension.Sur Windows et certains pilotes de stockage, le fichier est persisté sous forme de hachage sans extension (<hash>). L'exploit chaîne le RenameController de LFM (GET /laravel-filemanager/rename?file=<hash>&new_name=runner.php) pour renommer la charge utile téléversée en un fichier .php actif, permettant une exécution web immédiate sous /storage/app/public/file-manager-files/items/runner.php.
laravel-filemanager.yaml)Le modèle communautaire en amont (http/exposed-panels/laravel-filemanager.yaml) (https://github.com/projectdiscovery/nuclei-templates/blob/main/http/exposed-panels/laravel-filemanager.yaml) reposait sur un matcher de chaîne anglaise codé en dur :
matchers:
- type: word
words:
- "Laravel FileManager" # Échoue sur les déploiements localisés ou les versions non anglaises
Lorsque les applications sont localisées (par exemple en arabe, français, chinois), la chaîne anglaise n'est pas présente dans le corps HTML, ce qui provoque des faux négatifs.
Le modèle modernisé détecte le panneau en faisant correspondre les chemins d'actifs du fournisseur immuables et les actions du formulaire de téléversement :
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)L'outil Python autonome (cve_2024_21546_rce.py) automatise l'exploitation non authentifiée de bout en bout avec contournement WAF intégré et hygiène d'auto-nettoyage.
/laravel-filemanager est accessible sans authentification avant de tenter l'exploitation.jsonitems) pour identifier le hachage téléversé sans dépendre de noms de dossiers ou de fichiers codés en dur.<?=), l'invocation dynamique de fonctions (('pas'.'sthru')) et des en-têtes X-Cmd encodés en Base64 pour contourner les règles d'inspection.--interactive).python3 cve_2024_21546_rce.py [OPTIONS]
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 vers la version 2.9.1 ou ultérieure via Composer :
composer update unisharp/laravel-filemanager
config/lfm.php :
'middlewares' => ['web', 'auth'],
.php dans les répertoires de téléversement publics (par exemple /storage/).| Métrique | Détails |
|---|
| Nom de la vulnérabilité | UniSharp Laravel Filemanager - Téléversement de fichier sans restriction menant à une RCE |
| Identifiant CVE | CVE-2024-21546 |
| Composant affecté | unisharp/laravel-filemanager (< 2.9.1) |
| Faiblesse courante | CWE-94 (Injection de code) / CWE-434 (Téléversement sans restriction) |
| Sévérité | Critique (CVSS 9.8) |
| Vecteur d'attaque | HTTP distant / non authentifié |
| Option | Paramètre | Description |
|---|
-t, --target | <hôte> | Domaine ou adresse IP cible (par exemple example.com ou 192.168.1.50). |
-p, --port | <port> | Port cible s'il diffère des ports standard 80/443 (par exemple 8080, 8443). |
--scheme | http / https | Spécifie explicitement le schéma de protocole (défaut : détection automatique). |
-c, --cmd | <commande> | Commande unique à exécuter (par exemple whoami, id, ipconfig). |
-i, --interactive | option | Lance un shell interactif d'exécution de commandes. |
-d, --dir | <chemin> | Répertoire de travail LFM cible (défaut : /items). |