
Автоматизированный набор эксплойтов и шаблон обнаружения для CVE-2024-21546 — неаутентифицированного RCE в UniSharp Laravel Filemanager, с обходом WAF и интерактивной оболочкой.
Этот репозиторий содержит инструменты для оценки безопасности, шаблоны обнаружения и автоматизированный эксплойт-комплект для выявления и эксплуатации неаутентифицированного удалённого выполнения кода (RCE) в приложениях, использующих пакет UniSharp/laravel-filemanager (версии < 2.9.1).
laravel-filemanager.yaml)
cve_2024_21546_rce.py)
Уязвимость возникает из-за двух комбинированных условий:
/laravel-filemanager без применения промежуточного ПО 'auth' или 'web'..), что позволяет злоумышленникам обходить блок-списки исполняемых файлов и размещать PHP-скрипты в публичном хранилище.LfmUploadValidator.php)В версиях до v2.9.1 файл LfmUploadValidator.php проверял расширения файлов по блок-списку с помощью:
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;
}
Когда злоумышленник загружает файл с именем poc.php.:
getClientOriginalExtension() из Symfony извлекает символы, следующие за последней точкой.getClientOriginalExtension() возвращает "" (пустую строку).in_array("", ['php', 'html']) возвращает false, обходя блокировку расширения.В Windows и на определённых драйверах хранилища файл сохраняется как хэш без расширения (<hash>). Эксплойт использует цепочку с RenameController из LFM (GET /laravel-filemanager/rename?file=<hash>&new_name=runner.php) для переименования загруженной полезной нагрузки в активный файл .php, что обеспечивает немедленное веб-исполнение по адресу /storage/app/public/file-manager-files/items/runner.php.
laravel-filemanager.yaml)Верхнеуровневый шаблон сообщества (http/exposed-panels/laravel-filemanager.yaml) (https://github.com/projectdiscovery/nuclei-templates/blob/main/http/exposed-panels/laravel-filemanager.yaml) полагался на жёстко заданный матчер английской строки:
matchers:
- type: word
words:
- "Laravel FileManager" # Fails on localized deployments or non english versions
Когда приложения локализованы (например, арабский, французский, китайский), английская строка отсутствует в HTML-теле, что приводит к ложным отрицательным результатам.
Модернизированный шаблон обнаруживает панель, сопоставляя неизменяемые пути к ресурсам поставщика и действия формы загрузки:
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)Автономный инструмент на Python (cve_2024_21546_rce.py) автоматизирует сквозную неаутентифицированную эксплуатацию со встроенным обходом WAF и гигиеной самоочистки.
/laravel-filemanager без аутентификации перед попыткой эксплуатации.jsonitems) до и после для идентификации загруженного хэша без опоры на жёстко заданные имена папок или файлов.<?=), динамический вызов функций (('pas'.'sthru')) и заголовки X-Cmd в кодировке Base64 для обхода правил проверки.--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 до версии 2.9.1 или новее через Composer:
composer update unisharp/laravel-filemanager
config/lfm.php:
'middlewares' => ['web', 'auth'],
.php в публичных каталогах загрузки (например, /storage/).| Метрика | Детали |
|---|
| Название уязвимости | Неограниченная загрузка файлов с переходом к RCE в UniSharp Laravel Filemanager |
| Идентификатор CVE | CVE-2024-21546 |
| Затронутый компонент | unisharp/laravel-filemanager (< 2.9.1) |
| Общая слабость | CWE-94 (внедрение кода) / CWE-434 (неограниченная загрузка) |
| Серьёзность | Критическая (CVSS 9.8) |
| Вектор атаки | Удалённый / неаутентифицированный HTTP |
| Флаг | Параметр | Описание |
|---|
-t, --target | <host> | Целевой домен или IP-адрес (например, example.com или 192.168.1.50). |
-p, --port | <port> | Целевой порт, если отличается от стандартных 80/443 (например, 8080, 8443). |
--scheme | http / https | Явное указание схемы протокола (по умолчанию: автоопределение). |
-c, --cmd | <command> | Одиночная команда для выполнения (например, whoami, id, ipconfig). |
-i, --interactive | флаг | Запуск интерактивной оболочки выполнения команд. |
-d, --dir | <path> | Целевая рабочая директория LFM (по умолчанию: /items). |