
Kit de exploração automatizado e modelo de detecção para CVE-2024-21546, uma RCE não autenticada no UniSharp Laravel Filemanager, com evasão de WAF e shell interativo.
Este repositório contém ferramentas de avaliação de segurança, modelos de detecção e um kit de exploração automatizado para identificar e explorar Execução Remota de Código (RCE) Não Autenticada em aplicações que utilizam o pacote UniSharp/laravel-filemanager (Versões < 2.9.1).
laravel-filemanager.yaml)
cve_2024_21546_rce.py)
A vulnerabilidade decorre de duas condições combinadas:
/laravel-filemanager sem aplicar o pipeline de middleware 'auth' ou 'web'..), permitindo que atacantes contornem as listas de bloqueio de arquivos executáveis e coloquem scripts PHP no armazenamento público.LfmUploadValidator.php)Em versões anteriores à v2.9.1, o LfmUploadValidator.php verificava as extensões de arquivo contra uma lista de bloqueio 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;
}
Quando um atacante envia um arquivo chamado poc.php.:
getClientOriginalExtension() do Symfony extrai os caracteres após o ponto final.getClientOriginalExtension() avalia para "" (string vazia).in_array("", ['php', 'html']) avalia para false, contornando o bloqueio de extensão.No Windows e em drivers de armazenamento específicos, o arquivo é persistido como um hash sem extensão (<hash>). A exploração encadeia o RenameController do LFM (GET /laravel-filemanager/rename?file=<hash>&new_name=runner.php) para renomear o payload enviado para um arquivo .php ativo, concedendo execução web imediata sob /storage/app/public/file-manager-files/items/runner.php.
laravel-filemanager.yaml)O modelo da comunidade upstream (http/exposed-panels/laravel-filemanager.yaml) (https://github.com/projectdiscovery/nuclei-templates/blob/main/http/exposed-panels/laravel-filemanager.yaml) dependia de um correspondente de string em inglês codificado:
matchers:
- type: word
words:
- "Laravel FileManager" # Falha em implantações localizadas ou versões não inglesas
Quando as aplicações são localizadas (ex.: árabe, francês, chinês), a string em inglês não está presente no corpo HTML, causando falsos negativos.
O modelo modernizado detecta o painel correspondendo a caminhos de ativos de fornecedores imutáveis e ações de formulário de 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)A ferramenta Python independente (cve_2024_21546_rce.py) automatiza a exploração não autenticada de ponta a ponta com evasão de WAF integrada e higiene de autolimpeza.
/laravel-filemanager está acessível sem autenticação antes de tentar a exploração.jsonitems) para identificar o hash enviado sem depender de nomes de pasta ou arquivo codificados.<?=), invocação dinâmica de funções (('pas'.'sthru')) e cabeçalhos X-Cmd codificados em Base64 para evadir regras de inspeção.--interactive).python3 cve_2024_21546_rce.py [OPÇÕES]
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 para a versão 2.9.1 ou posterior via Composer:
composer update unisharp/laravel-filemanager
config/lfm.php:
'middlewares' => ['web', 'auth'],
.php em diretórios públicos de upload (ex.: /storage/).| Métrica | Detalhes |
|---|
| Nome da Vulnerabilidade | UniSharp Laravel Filemanager Upload Irrestrito de Arquivos para RCE |
| Identificador CVE | CVE-2024-21546 |
| Componente Afetado | unisharp/laravel-filemanager (< 2.9.1) |
| Fraqueza Comum | CWE-94 (Injeção de Código) / CWE-434 (Upload Irrestrito) |
| Severidade | Crítica (CVSS 9.8) |
| Vetor de Ataque | HTTP Remoto / Não Autenticado |
| Flag | Parâmetro | Descrição |
|---|
-t, --target | <host> | Domínio ou endereço IP alvo (ex.: example.com ou 192.168.1.50). |
-p, --port | <porta> | Porta alvo se diferente do padrão 80/443 (ex.: 8080, 8443). |
--scheme | http / https | Especifica explicitamente o esquema de protocolo (padrão: detecção automática). |
-c, --cmd | <comando> | Comando único para executar (ex.: whoami, id, ipconfig). |
-i, --interactive | flag | Inicia um shell interativo de execução de comandos. |
-d, --dir | <caminho> | Diretório de trabalho LFM alvo (padrão: /items). |