
Kit de explotación automatizado y plantilla de detección para CVE-2024-21546, una RCE no autenticada en UniSharp Laravel Filemanager, con evasión de WAF y shell interactiva.
Este repositorio contiene herramientas de evaluación de seguridad, plantillas de detección y un kit de explotación automatizado para identificar y explotar Ejecución Remota de Código (RCE) No Autenticada en aplicaciones que utilizan el paquete UniSharp/laravel-filemanager (Versiones < 2.9.1).
laravel-filemanager.yaml)
cve_2024_21546_rce.py)
La vulnerabilidad se origina de dos condiciones combinadas:
/laravel-filemanager sin aplicar la tubería de middleware 'auth' o 'web'..), permitiendo a los atacantes omitir las listas negras de archivos ejecutables y colocar scripts PHP en el almacenamiento público.LfmUploadValidator.php)En versiones anteriores a v2.9.1, LfmUploadValidator.php verificaba las extensiones de archivo contra una lista negra usando:
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;
}
Cuando un atacante sube un archivo llamado poc.php.:
getClientOriginalExtension() de Symfony extrae los caracteres que siguen al punto final.getClientOriginalExtension() evalúa a "" (cadena vacía).in_array("", ['php', 'html']) evalúa a false, omitiendo el bloqueo de extensión.En Windows y controladores de almacenamiento específicos, el archivo se persiste como un hash sin extensión (<hash>). El exploit encadena el RenameController de LFM (GET /laravel-filemanager/rename?file=<hash>&new_name=runner.php) para renombrar la carga útil subida a un archivo .php activo, otorgando ejecución web inmediata bajo /storage/app/public/file-manager-files/items/runner.php.
laravel-filemanager.yaml)La plantilla comunitaria upstream (http/exposed-panels/laravel-filemanager.yaml) (https://github.com/projectdiscovery/nuclei-templates/blob/main/http/exposed-panels/laravel-filemanager.yaml) dependía de un comparador de cadenas en inglés codificado:
matchers:
- type: word
words:
- "Laravel FileManager" # Fails on localized deployments or non english versions
Cuando las aplicaciones están localizadas (por ejemplo, árabe, francés, chino), la cadena en inglés no está presente en el cuerpo HTML, causando falsos negativos.
La plantilla modernizada detecta el panel comparando rutas de activos de proveedor inmutables y acciones de formulario de carga:
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)La herramienta Python independiente (cve_2024_21546_rce.py) automatiza la explotación no autenticada de extremo a extremo con evasión de WAF integrada e higiene de autolimpieza.
/laravel-filemanager es accesible sin autenticación antes de intentar la explotación.jsonitems) para identificar el hash subido sin depender de nombres de carpeta o archivo codificados.<?=), invocación dinámica de funciones (('pas'.'sthru')) y cabeceras X-Cmd codificadas en Base64 para evadir reglas de inspección.--interactive).python3 cve_2024_21546_rce.py [OPCIONES]
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 a la versión 2.9.1 o posterior vía Composer:
composer update unisharp/laravel-filemanager
config/lfm.php:
'middlewares' => ['web', 'auth'],
.php en directorios de carga públicos (por ejemplo, /storage/).| Métrica | Detalles |
|---|
| Nombre de la Vulnerabilidad | UniSharp Laravel Filemanager Carga de Archivos Sin Restricciones a RCE |
| Identificador CVE | CVE-2024-21546 |
| Componente Afectado | unisharp/laravel-filemanager (< 2.9.1) |
| Debilidad Común | CWE-94 (Inyección de Código) / CWE-434 (Carga Sin Restricciones) |
| Severidad | Crítica (CVSS 9.8) |
| Vector de Ataque | HTTP Remoto / No Autenticado |
| Bandera | Parámetro | Descripción |
|---|
-t, --target | <host> | Dominio o dirección IP objetivo (por ejemplo, example.com o 192.168.1.50). |
-p, --port | <puerto> | Puerto objetivo si es diferente de 80/443 estándar (por ejemplo, 8080, 8443). |
--scheme | http / https | Especificar explícitamente el esquema de protocolo (predeterminado: auto-detectado). |
-c, --cmd | <comando> | Comando único a ejecutar (por ejemplo, whoami, id, ipconfig). |
-i, --interactive | bandera | Lanzar un shell de ejecución de comandos interactivo. |
-d, --dir | <ruta> | Directorio de trabajo LFM objetivo (predeterminado: /items). |