
أداة استغلال آلية وقالب كشف لثغرة 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>). يستغل الاستغلال وحدة تحكم إعادة التسمية في 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/).| المقياس | التفاصيل |
|---|
| اسم الثغرة | 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). |