
자동화된 익스플로잇 툴킷 및 CVE-2024-21546용 탐지 템플릿으로, UniSharp Laravel Filemanager의 인증되지 않은 RCE를 대상으로 하며 WAF 우회 및 인터랙티브 셸을 포함합니다.
이 저장소는 UniSharp/laravel-filemanager 패키지(버전 < 2.9.1)를 사용하는 애플리케이션에서 인증 없는 원격 코드 실행(RCE) 을 식별하고 악용하기 위한 보안 평가 도구, 탐지 템플릿 및 자동화된 익스플로잇 툴킷을 포함합니다.
laravel-filemanager.yaml)
cve_2024_21546_rce.py)
이 취약점은 두 가지 결합된 조건에서 발생합니다:
'auth' 또는 'web' 미들웨어 파이프라인을 적용하지 않고 /laravel-filemanager 라우트를 등록합니다.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()은 마지막 점 뒤의 문자를 추출합니다.getClientOriginalExtension()은 ""(빈 문자열)로 평가됩니다.in_array("", ['php', 'html']) 검사는 false로 평가되어 확장자 차단을 우회합니다.Windows 및 특정 스토리지 드라이버에서 파일은 확장자 없는 해시(<hash>)로 저장됩니다. 익스플로잇은 LFM의 RenameController(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" # 로컬라이즈된 배포 또는 비영어 버전에서 실패
애플리케이션이 로컬라이즈된 경우(예: 아랍어, 프랑스어, 중국어) 영어 문자열이 HTML 본문에 존재하지 않아 오탐(false negative)이 발생합니다.
현대화된 템플릿은 변경 불가능한 공급업체 자산 경로와 업로드 양식 작업을 매칭하여 패널을 탐지합니다:
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')) 및 Base64로 인코딩된 X-Cmd 헤더를 사용하여 검사 규칙을 우회합니다.--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 update unisharp/laravel-filemanager
config/lfm.php에서 모든 파일매니저 라우트가 인증으로 보호되도록 설정:
'middlewares' => ['web', 'auth'],
/storage/)에서 .php 스크립트 실행을 거부하도록 웹 서버 규칙을 구성합니다.| 항목 | 세부 정보 |
|---|
| 취약점 이름 | UniSharp Laravel Filemanager 무제한 파일 업로드로 인한 RCE |
| 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). |