
إرشادات التحقق المخبري الدفاعي والكشف عبر مركز العمليات الأمنية (SOC) لثغرة CVE-2026-48907 في Joomla JCE <= 2.9.99.4، بما في ذلك بيانات تيليمتري Apache/Joomla/auditd، وآثار الويب شل، وقواعد Sigma، والربط مع MITRE ATT&CK وتوصيات التخفيف.
تقرير تحقق دفاعي وملاحظات كشف موجّهة لفرق SOC بشأن CVE-2026-48907 الذي يؤثر على إصدارات محرر محتوى جوملا (JCE) حتى 2.9.99.4.
يوثّق هذا المستودع تحققًا معمليًا خاضعًا للرقابة من CVE-2026-48907 في Joomla JCE، ويركّز على هندسة الكشف العملية لفرق SOC.
الهدف ليس تقديم إرشادات للاستغلال. الهدف هو إظهار مصادر الرصد التي كانت مفيدة أثناء التحقق، والآثار التي أُنشئت، وكيف يمكن للمدافعين كشف هذا النشاط والاستجابة له.
| المجال | النتيجة |
|---|---|
| الثغرة | CVE-2026-48907 في محرر محتوى جوملا (JCE)؛ سير عمل إنشاء/استيراد الملفات التعريفية دون مصادقة قد يؤدي إلى رفع ملفات PHP وتنفيذ أكواد. |
| الإصدار المختبر | JCE 2.9.99.4. أظهرت لوحة إدارة جوملا توفر تحديث إلى 2.9.99.7. |
| نتيجة المختبر | أكّد التحقق من الـ PoC العام حدوث RCE وأنشأ ويبشيل PHP في /tmp الخاص بجوملا باسم jce*.xml.php. نُفذت الأوامر بصلاحيات المستخدم www-data. |
| أكثر مصادر الرصد قيمة | سجل access.log لخادم Apache، وسجل error.log لـ Apache/PHP، وبيانات execve من auditd، وآثار على نظام الملفات في joomla_html/tmp. |
| سجلات جوملا | مفيدة كسياق داعم، لكنها غير كافية وحدها. لم تعِد سجلات تطبيق جوملا بناء السلسلة الكاملة: استغلال → ويبشيل → تنفيذ أوامر. |
| أولوية SOC | حرجة بالنسبة لنسخ جوملا المواجهة للإنترنت أو تلك التي يمكن الوصول إليها من شبكات داخلية أقل موثوقية. |







من النتائج التشغيلية الرئيسية أن سجلات تطبيق جوملا لم تكن كافية.
خلال الاختبار المختبري، سجّلت سجلات جوملا سياقًا على مستوى التطبيق مثل حدث joomlafailure، لكنها لم تُظهر سلسلة الاستغلال الكاملة. كانت السلسلة المفيدة واضحة بشكل أساسي في:
access.log لخادم Apacheerror.log لـ Apache/PHPexecve من auditdjoomla_html/tmpبالنسبة لمراقبة SOC، ينبغي التعامل مع سجلات جوملا بوصفها مصدر رصد داعمًا، وليس بوصفها مصدر الكشف الأساسي لهذه الثغرة.
سلسلة عالية المستوى رُصدت أثناء الاختبار الخاضع للرقابة:
JCE version discovery
↓
POST to Joomla JCE component
↓
PHP webshell written to Joomla /tmp
↓
HTTP request to /tmp/jce*.xml.php
↓
Command execution through webshell
↓
auditd confirms /usr/bin/dash and commands executed as www-data
كانت أوضح الأدلة موجودة في سجل access.log الخاص بـ Apache:
GET /plugins/editors/jce/jce.xml
GET /
POST /index.php?option=com_jce
GET /tmp/jceolxtshs3.xml.php
GET /plugins/editors/jce/jce.xml
POST /index.php?option=com_jce
GET /tmp/jce624jdcfx.xml.php
GET /tmp/jce624jdcfx.xml.php?c=id%20%26%26%20hostname%20%26%26%20pwd
GET /tmp/jce624jdcfx.xml.php?c=whoami
GET /tmp/jce624jdcfx.xml.php?c=hostname
GET /tmp/jce624jdcfx.xml.php?c=id
GET /tmp/jce624jdcfx.xml.php?c=pwd
احتوى سجل أخطاء Apache/PHP على آثار قيّمة متعلقة بالمحلل (parser):
simplexml_load_string()
administrator/components/com_jce/helpers/profiles.php
RXST
RXEND
كانت العلامتان RXST وRXEND مؤشرين مفيدين بشكل خاص لعائلة الـ PoC هذه تحديدًا لأنهما ظهرتا في مسار معالجة الحمولة (payload).
أكّدت سجلات جوملا أن تسجيل التطبيق كان نشطًا، لكنها لم تعِد بناء عملية الاستغلال:
#Software: Joomla! 5.4.6 Stable [ Kutegemea ] 26-May-2026 16:00 GMT
#Fields: datetime priority clientip category message
2026-06-18T20:37:57+00:00 INFO 172.20.10.2 joomlafailure Username and password do not match or you do not have an account yet.
هذا يعني أن جمع سجلات جوملا فقط قد يفوت أهم الأدلة على استغلال CVE-2026-48907.
أنشأ الاختبار ملفات ويبشيل PHP في tmp الخاص بجوملا:
/var/www/html/tmp/jce624jdcfx.xml.php
/var/www/html/tmp/jceolxtshs3.xml.php
المسارات على جانب المضيف في المختبر:
/home/user/joomla-jce-lab/joomla_html/tmp/jce624jdcfx.xml.php
/home/user/joomla-jce-lab/joomla_html/tmp/jceolxtshs3.xml.php
قيم تجزئة SHA256 المرصودة:
b6fa303daef8aa8cb39566c73d2cb4a458efb2b1fba48052dd039d45c3beb0aa jce624jdcfx.xml.php
f8bcc802ab56b845c968ed6727228f200f8f4bcd332b8ce82c6980d93ac228fd jceolxtshs3.xml.php
ينبغي التعامل مع الكشف المعتمد على التجزئة بوصفه منخفض المتانة لأن أسماء الملفات والحمولات قد تختلف. الارتباط عبر المسار والامتداد والملكية والسلوك أكثر فائدة.
أكّد auditd أن مستخدم خادم الويب نفّذ أوامر من دليل tmp الخاص بجوملا:
CWD=/var/www/html/tmp uid=www-data comm=sh exe=/usr/bin/dash
CWD=/var/www/html/tmp uid=www-data comm=id exe=/usr/bin/id
CWD=/var/www/html/tmp uid=www-data comm=hostname exe=/usr/bin/hostname
CWD=/var/www/html/tmp uid=www-data comm=whoami exe=/usr/bin/whoami
هذا أقوى تأكيد على أن النشاط لم يكن مجرد فحص، بل تنفيذًا فعليًا لأكواد عن بُعد.
أقوى كشف يعتمد على الارتباط بين الأحداث:
GET /plugins/editors/jce/jce.xml
followed by
POST /index.php?option=com_jce
followed by
GET /tmp/jce*.xml.php
followed by
GET /tmp/jce*.xml.php?c=
and/or
auditd: www-data executes /usr/bin/dash from /var/www/html/tmp
/plugins/editors/jce/jce.xml
/index.php?option=com_jce
/tmp/jce[a-z0-9]{8}\.xml\.php
/tmp/.*\.(php|phtml|phar)(\?| )
cs-uri-query contains "c="
joomla_html/tmp/jce*.xml.php
/var/www/html/tmp/jce*.xml.php
RXST
RXEND
shell_exec
system
passthru
exec
$_GET['c']
استخدم هذه الأوامر فقط على أنظمة تملكها أو مخوّل بالتحقيق فيها.
grep -RniE "com_jce|profiles\.import|task=profiles|/tmp/.*\.php|RXST|RXEND" apache_logs joomla_html/administrator/logs 2>/dev/null
find ./joomla_html/tmp ./joomla_html/images ./joomla_html/media \
-type f \( -iname "*.php" -o -iname "*.phtml" -o -iname "*.phar" -o -iname "*.xml.php" \) -ls
sudo ausearch -k wwwdata_exec -i | grep -E "uid=www-data|comm=sh|/usr/bin/dash|/var/www/html/tmp|whoami|hostname| id |pwd"
تتوفر ملفات قواعد Sigma منفصلة في rules/sigma:
joomla_jce_webshell_tmp_access.ymljoomla_jce_component_exploit_attempt.ymlweb_user_shell_from_joomla_tmp_auditd.ymlيعتمد التكوين الدقيق على نموذج نشر Apache/PHP. الهدف هو منع تنفيذ PHP في الأدلة التي لا ينبغي أن تنفّذ سكربتات أبدًا.
<Directory "/var/www/html/tmp">
php_admin_flag engine off
Options -ExecCGI
RemoveHandler .php .phtml .phar
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
</Directory>
<Directory "/var/www/html/images">
php_admin_flag engine off
Options -ExecCGI
RemoveHandler .php .phtml .phar
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
</Directory>
أكّد المختبر إمكانية الاستغلال العملي ضد JCE 2.9.99.4. لم تكن المصادقة إلى جوملا مطلوبة في التدفق المرصود، وقام الـ PoC العام بأتمتة اكتشاف الإصدار وإنشاء الويبشيل.
بالنسبة للبيئات الحقيقية، تكون المخاطر عالية إلى حرجة عندما تكون جوملا مواجهة للإنترنت أو قابلة للوصول من شبكات داخلية أقل موثوقية. قد يترك الهجوم الناجح ويبشيلًا دائمًا، لذا فإن التحديث دون فحص الآثار ليس كافيًا بعد التعرض المشتبه به.
هذا المستودع مخصّص للبحث الدفاعي، وهندسة كشف SOC، وإدارة الثغرات. لا يحتوي على أكواد استغلال. يجب تنفيذ أي اختبار فقط على أنظمة تملكها أو مخوّل صراحةً بتقييمها.
| المعامل | القيمة |
|---|
| رابط التطبيق | http://172.20.10.3:9999 |
| حاوية جوملا | joomla-jce-lab، الصورة joomla:5-apache |
| حاوية قاعدة البيانات | joomla-jce-db، الصورة mariadb:11 |
| تعيين المنفذ | 0.0.0.0:9999 -> 80/tcp |
| Apache | Apache/2.4.67 (Debian) |
| PHP | PHP 8.3.31 |
| MariaDB | 11.8.8-MariaDB |
| Joomla | Joomla 5.4.6 Stable |
| JCE | 2.9.99.4 |
| مصدر الاختبار | Windows 11، عنوان IP 172.20.10.2 |
| التسجيل | سجلات وصول/أخطاء Apache، سجلات جوملا، auditd، سجلات Docker، آثار على نظام الملفات |
| الخطورة | الشرط | إجراء SOC |
|---|
| منخفضة | GET /plugins/editors/jce/jce.xml من مصدر غير معتاد | تعامل معه باعتباره استطلاعًا واربطه بالطلبات اللاحقة. |
| متوسطة | POST /index.php?option=com_jce دون مصدر إحالة (referer) من لوحة الإدارة أو من عنوان IP غير معروف | أطلق تنبيهًا وراجع طلبات /tmp اللاحقة. |
| عالية | POST com_jce متبوعًا بـ GET /tmp/*.php أو /tmp/*.xml.php | تحقق فورًا من الآثار على نظام الملفات وسجلات أخطاء PHP. |
| حرجة | GET /tmp/jce*.xml.php?c= أو رصد auditd لقيام www-data بتشغيل أوامر شل/نظام | تعامل معه بوصفه RCE/ويبشيل مؤكدًا، واعزل المضيف أو قيّد الوصول إليه واحفظ الأدلة. |
| الخطوة | الإجراء | الهدف |
|---|
| 1 | تحقق مما إذا كان المثيل يشغّل JCE <= 2.9.99.4 أو يعرض توفر تحديث لـ JCE. | تأكيد حالة الضعف. |
| 2 | ابحث في سجلات الوصول/الأخطاء عن com_jce وprofiles.import و/tmp/*.php وjce*.xml.php. | تحديد محاولة الاستغلال أو نجاحه. |
| 3 | افحص أدلة tmp وimages وmedia بحثًا عن ملفات PHP/PHTML/PHAR وأسماء غير معتادة. | كشف الويبشيلات أو الأبواب الخلفية. |
| 4 | راجع auditd/EDR بحثًا عن www-data وهو يُطلق شلّات أو أدوات نظام. | تأكيد تنفيذ الأكواد. |
| 5 | إذا تأكد وجود ويبشيل/RCE، اعزل المضيف أو قيّد حركة المرور إلى التطبيق. | إيقاف أي نشاط إضافي. |
| 6 | احفظ الآثار، وأزل الويبشيلات، وراجع ملفات JCE التعريفية وحسابات جوملا ومهام cron والملفات المعدّلة. | الفرز والاستئصال. |
| 7 | حدّث JCE إلى أحدث إصدار مدعوم وراجع نسخ جوملا الأخرى. | التخفيف وتقليل المخاطر. |
| الأولوية | التوصية | المبرر |
|---|
| P1 | حدّث JCE إلى أحدث إصدار مدعوم لفرع Joomla/PHP. | كان JCE 2.9.99.4 ضعيفًا في المختبر، وأظهرت جوملا توفر تحديث إلى 2.9.99.7. |
| P1 | بعد التحديث، افحص بحثًا عن ويبشيلات وملفات JCE تعريفية مشبوهة. | التحديث يغلق نقطة الدخول لكنه لا يزيل الآثار المتبقية قبل التحديث. |
| P1 | امنع تنفيذ PHP في أدلة tmp وimages وmedia وcache وأدلة الرفع. | حتى لو نجح الرفع، فإن منع تنفيذ PHP يكسر سلسلة RCE. |
| P2 | أضف WAF أو تصفية طلبات لـ option=com_jce وtask=profiles.import. | يساعد في كشف وحظر محاولات الاستغلال قبل وصولها إلى PHP. |
| P2 | اجمع مركزيًا سجلات وصول Apache وسجلات أخطاء PHP وبيانات auditd/EDR. | سجلات تطبيق جوملا وحدها لم تكن كافية. |
| P2 | نفّذ جردًا دوريًا لإضافات جوملا وفحوصات لحالة التحديث. | أظهرت لوحة جوملا إشارة تحديث JCE؛ وينبغي أن تغذي هذه الإشارة سير عمل VM/SOC. |
| P3 | حافظ على خط أساس للملفات وأطلق تنبيهًا عند ظهور ملفات PHP جديدة خارج الأدلة الخاضعة للرقابة. | يساعد في كشف الويبشيلات والثبات بعد الاختراق. |
| التقنية | الاسم | المبرر |
|---|
| T1190 | Exploit Public-Facing Application | استغلال HTTP لنقطة نهاية Joomla/JCE دون مصادقة. |
| T1505.003 | Server Software Component: Web Shell | تم إنشاء ويبشيل PHP باسم /tmp/jce*.xml.php. |
| T1059.004 | Command and Scripting Interpreter: Unix Shell | تم تنفيذ /usr/bin/dash بواسطة www-data. |
| T1033 | System Owner/User Discovery | تم تنفيذ whoami وid عبر الويبشيل. |
| T1082 | System Information Discovery | تم تنفيذ hostname عبر الويبشيل. |
| T1083 | File and Directory Discovery | pwd ونشاط في /var/www/html/tmp. |