
このリポジトリには、UniSharp/laravel-filemanager パッケージ(バージョン < 2.9.1)を利用するアプリケーションにおける**未認証リモートコード実行(RCE)**を特定・悪用するためのセキュリティ評価ツール、検出テンプレート、自動化されたエクスプロイトツールキットが含まれています。
laravel-filemanager.yaml)
cve_2024_21546_rce.py)
この脆弱性は、以下の2つの条件が組み合わさることで発生します:
'auth' または 'web' ミドルウェアパイプラインを適用せずに /laravel-filemanager ルートを登録している。.)を適切にサニタイズできず、攻撃者が実行可能ファイルのブロックリストをバイパスして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() は最後のドットに続く文字を抽出します。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 で即座にWeb実行を許可します。
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'))、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 スクリプトの実行を拒否するようにWebサーバールールを設定します。| 指標 | 詳細 |
|---|
| 脆弱性名 | 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)。 |