
Kit di exploit automatizzato e template di rilevamento per CVE-2024-21546, una RCE non autenticata in UniSharp Laravel Filemanager, con evasione WAF e shell interattiva.
Questo repository contiene strumenti di valutazione della sicurezza, template di rilevamento e un toolkit di exploit automatizzato per identificare e sfruttare Remote Code Execution (RCE) Non Autenticato in applicazioni che utilizzano il pacchetto UniSharp/laravel-filemanager (Versioni < 2.9.1).
laravel-filemanager.yaml)
cve_2024_21546_rce.py)
La vulnerabilità deriva da due condizioni combinate:
/laravel-filemanager senza applicare la pipeline middleware 'auth' o 'web'..), consentendo agli attaccanti di bypassare le blocklist dei file eseguibili e inserire script PHP nello storage pubblico.LfmUploadValidator.php)Nelle versioni precedenti alla v2.9.1, LfmUploadValidator.php controllava le estensioni dei file rispetto a una blocklist utilizzando:
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;
}
Quando un attaccante carica un file denominato poc.php.:
getClientOriginalExtension() di Symfony estrae i caratteri successivi al punto finale.getClientOriginalExtension() restituisce "" (stringa vuota).in_array("", ['php', 'html']) restituisce false, bypassando il blocco delle estensioni.Su Windows e driver di storage specifici, il file viene salvato come hash senza estensione (<hash>). L'exploit concatena il RenameController di LFM (GET /laravel-filemanager/rename?file=<hash>&new_name=runner.php) per rinominare il payload caricato in un file .php attivo, garantendo l'esecuzione web immediata sotto /storage/app/public/file-manager-files/items/runner.php.
laravel-filemanager.yaml)Il template della community upstream (http/exposed-panels/laravel-filemanager.yaml) (https://github.com/projectdiscovery/nuclei-templates/blob/main/http/exposed-panels/laravel-filemanager.yaml) si basava su un matcher di stringhe inglesi hardcoded:
matchers:
- type: word
words:
- "Laravel FileManager" # Fallisce su deployment localizzati o versioni non inglesi
Quando le applicazioni sono localizzate (es. arabo, francese, cinese), la stringa inglese non è presente nel corpo HTML, causando falsi negativi.
Il template modernizzato rileva il pannello confrontando percorsi immutabili degli asset del vendor e azioni del form di upload:
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)Lo strumento Python autonomo (cve_2024_21546_rce.py) automatizza lo sfruttamento non autenticato end-to-end con evasione WAF integrata e igiene di auto-pulizia.
/laravel-filemanager sia accessibile senza autenticazione prima di tentare lo sfruttamento.jsonitems) per identificare l'hash caricato senza fare affidamento su nomi di cartelle o file hardcoded.<?=), invocazione dinamica di funzioni (('pas'.'sthru')) e header X-Cmd codificati in Base64 per eludere le regole di ispezione.--interactive).python3 cve_2024_21546_rce.py [OPZIONI]
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 alla versione 2.9.1 o successiva tramite Composer:
composer update unisharp/laravel-filemanager
config/lfm.php:
'middlewares' => ['web', 'auth'],
.php nelle directory di upload pubbliche (es. /storage/).| Metrica | Dettagli |
|---|
| Nome della Vulnerabilità | UniSharp Laravel Filemanager Upload Non Restrittivo a RCE |
| Identificatore CVE | CVE-2024-21546 |
| Componente Interessato | unisharp/laravel-filemanager (< 2.9.1) |
| Debolezza Comune | CWE-94 (Iniezione di Codice) / CWE-434 (Upload Non Restrittivo) |
| Gravità | Critica (CVSS 9.8) |
| Vettore di Attacco | HTTP Remoto / Non Autenticato |
| Flag | Parametro | Descrizione |
|---|
-t, --target | <host> | Dominio o indirizzo IP del target (es. example.com o 192.168.1.50). |
-p, --port | <porta> | Porta del target se diversa dalle standard 80/443 (es. 8080, 8443). |
--scheme | http / https | Specifica esplicitamente lo schema del protocollo (predefinito: rilevamento automatico). |
-c, --cmd | <comando> | Singolo comando da eseguire (es. whoami, id, ipconfig). |
-i, --interactive | flag | Avvia una shell interattiva di esecuzione comandi. |
-d, --dir | <percorso> | Directory di lavoro LFM del target (predefinito: /items). |