
أداة Python CLI تستغل CVE-2026-48907 في Joomla JCE عبر رفع profile-import، وتتحقق من مسارات shell، وتفتح قناة أوامر تفاعلية على الأهداف المصرّح بها.
E.L.V — محمّل الاستغلال وبرنامج الثغرات
أداة بحث في الأمن السيبراني لتقييم الثغرات المصرّح به.
إطار E.L.V لأبحاث وتقييم CVE هو أداة سطر أوامر مبنية على Python مخصصة لأبحاث الأمن المُتحكَّم بها وتقييم الثغرات المصرّح به.
يتضمن التنفيذ المُقدَّم وظائف من أجل:
يحدد الكود المصدري الحالي هدف بحثه على أنه:
CVE-2026-48907 Joomla! JCE Extension < 2.9.99.5 Unauthenticated RCE
هذا الادعاء الخاص بـ CVE/المنتج هو بيانات وصفية مُقدَّمة من الكود المصدري ولم يتم التحقق منها بشكل مستقل بواسطة هذا الملف التعريفي. قبل نشر أي ادعاء أمني، تحقق من المعرّف والإصدارات المتأثرة والإشعار والمكوّن المتأثر ومعلومات المعالجة مقابل مصدر موثوق للمورّد/CVE.
يتفاعل هذا المشروع مع تطبيقات ويب بعيدة، ويتضمن التنفيذ المُقدَّم وظائف تهدف إلى رفع حمولة مخصصة من جانب الخادم والتواصل مع أمر تم رفعه.
استخدمه فقط ضد الأنظمة التي لديك تصريح صريح بها.
لا تستخدم هذا المشروع من أجل:
لإجراء مختبر آمن، استخدم بيئة VM/حاوية محلية معزولة أو هدف تدريب مصمم ليكون عرضة للثغرات عن قصد.
| الحقل | القيمة |
|---|---|
| المشروع | إطار E.L.V لأبحاث وتقييم CVE |
| المؤلف / المحرك | HxN / E.L.V |
| الإصدار | 1.0.0 |
| اللغة | Python |
| المنصة | أنظمة *nix / شبيهة بـ Unix |
| الترخيص | GNU GPL v3 |
| الواجهة | سطر الأوامر |
| عميل HTTP | requests |
| التزامن | ThreadPoolExecutor |
| الغرض الأساسي | أبحاث وتقييم أمني مصرّح به |
يحتوي الكود المصدري المُقدَّم elv-cve.py على المكونات الرئيسية التالية.
يقرأ السكربت ملفًا محليًا مُقدَّمًا عبر خيار --shell.
يصف الكود المصدري هذا كملف أمر/رافع مخصص ويتوقف عند تعذّر قراءة الملف المحدد.
يدعم البرنامج وضعين متبادلين للأهداف:
لكل هدف، ينفذ السكربت طلب GET مقابل جذر الهدف ويتوقع استجابة HTTP 200 قبل المتابعة.
يبحث التنفيذ في HTML المُعاد عن قيمة مرتبطة بـ CSRF باستخدام التعبيرات النمطية.
يتم حاليًا تنفيذ نمطين.
يبني السكربت طلب رفع متعدد الأجزاء مقابل:```text /index.php?option=com_jce
يتضمن الطلب مهمة استيراد الملف الشخصي والرمز المستخرج.
### 6. التحقق من مسار المرشح
بعد طلب الرفع، يتحقق البرنامج من عدة مواقع محتملة للملف الناتج.
يحتوي المصدر الحالي على مسارات المرشح هذه:```text
/tmp/
/images/
/images/stories/
/media/
بالنسبة لهدف واحد، يستدعي البرنامج الحالي واجهة أوامر تفاعلية عندما يبلّغ عن مسار shell تم رفعه بنجاح.
يرسل المصدر الأوامر باستخدام معاملات POST المسماة:```text cmd c
نظرًا لأن هذه الوظيفة قد تؤدي إلى تنفيذ أوامر عن بُعد، فينبغي حصرها في بيئات معزولة ومصرّح بها صراحةً.
### 8. معالجة أهداف متعددة
عند توفير ملف أهداف، يستخدم البرنامج `ThreadPoolExecutor` ويعالج الأهداف بشكل متزامن.
عدد الخيوط الافتراضي في المصدر هو:```text
10
على مستوى عالٍ، يتبع التنفيذ الحالي هذا التدفق:```text Start │ ├── Parse command-line arguments │ ├── Load local payload file │ ├── Load one target OR target list │ ├── Create ELV_CVE output directory │ ├── Target processing │ │ │ ├── GET target │ ├── Check HTTP response │ ├── Extract token │ ├── Submit profile-import request │ ├── Check candidate file paths │ └── Record result │ └── Write results / display summary
---
## المتطلبات
يستورد المصدر المرفق:
- وحدات مكتبة بايثون القياسية:
- `random`
- `re`
- `time`
- `argparse`
- `sys`
- `os`
- `json`
- `threading`
- `concurrent.futures`
- وحدات الطرف الثالث:
- `requests`
- `urllib3`
لذلك فإن الحد الأدنى لتثبيت التبعيات هو:```bash
python3 -m pip install requests urllib3
لعمليات النشر القابلة للتكرار، ثبّت التبعيات في ملف requirements.txt.
مثال:```text requests urllib3
---
## التثبيت
استنسخ المشروع أو انسخه إلى بيئة تقييم معزولة.
مثال:```bash
git clone <YOUR-REPOSITORY-URL>
cd <YOUR-REPOSITORY-DIRECTORY>
أنشئ بيئة افتراضية:```bash python3 -m venv .venv
قم بتفعيله:```bash
source .venv/bin/activate
تثبيت التبعيات:```bash python3 -m pip install -r requirements.txt
تحقق من Python:```bash
python3 --version
تحقق من التبعية:```bash python3 -c "import requests, urllib3; print('Dependencies OK')"
> استبدل `<YOUR-REPOSITORY-URL>` و `<YOUR-REPOSITORY-DIRECTORY>` بالقيم المستخدمة في مستودعك.
---
## واجهة سطر الأوامر
يعرّف المصدر خيارات سطر الأوامر التالية.
### تحديد الهدف```text
-u, --url
عنوان URL واحد مستهدف.```text -f, --file
مسار إلى ملف يحتوي على عناوين URL الهدف.
هذه الخيارات متنافية ويجب تحديد واحد منها.
### اختيار الحمولة```text
--shell
مسار ملف الحمولة المخصص المحلي.
هذه الوسيطة مطلوبة من قبل التنفيذ الحالي.
-t, --threads
عدد خيوط العمال.
الافتراضي:```text
10
-v, --verbose
يُفعّل علامة verbose التي يكشف عنها محلّل الوسائط.
ملاحظة: يُعرّف المصدر الحالي هذا الخيار لكنه لا يستخدم `args.verbose` لتغيير سلوك الإخراج جوهريًا.
### خيار الإخراج```text
-o, --output
يُعرَّف الوسيط بواسطة المحلل، لكن التنفيذ الحالي لا يستخدم args.output عند كتابة النتيجة النهائية. مسار النتيجة الحالي مُثبَّت بشكل صلب على:```text
ELV_CVE/success.txt
هذا تفصيل تنفيذي يستحق الإصلاح في إصدار مستقبلي.
---
## ملفات الإدخال
### قائمة الأهداف
يتوقع وضع قائمة الأهداف عنوان URL واحدًا في كل سطر.
يتم تجاهل الأسطر الفارغة.
يتم تجاهل الأسطر التي تبدأ بـ `#`.
التنسيق المفاهيمي:```text
https://authorized-target-01.example
https://authorized-target-02.example
# laboratory target
https://authorized-target-03.example
يجب وضع الأهداف التي لديك تفويض صريح لتقييمها فقط في الملف.
تشير الوسيطة --shell إلى ملف محلي يقرأه البرنامج كنص.
لا يتحقق المصدر المقدم من محتوى الملف بما يتجاوز قراءته بنجاح.
للتطوير والاختبار الآمن، استخدم ملف اختبار غير ضار بدلاً من حمولة تنفذ أوامر.
يقوم البرنامج بإنشاء:```text ELV_CVE/
للوضع متعدد الأهداف، يكتب:```text
ELV_CVE/success.txt
يكتب المصدر الحالي عناوين URL الناجحة للـ shell إلى هذا الملف.
مثال على تنسيق النتيجة:```text https://authorized-lab.example/path/to/result
كما يطبع البرنامج ملخص إتمام يحتوي على عدد النتائج الناجحة نسبةً إلى عدد الأهداف المحمّلة.
---
## التزامن
يستخدم الوضع متعدد الأهداف:```python
ThreadPoolExecutor
يُعيّن عدد الخيوط (thread count) المُهيّأ افتراضيًا على 10.
قد يؤدي رفع مستوى التزامن (concurrency) إلى زيادة:
في التقييمات المُتحكَّم بها، ابدأ بقيمة تزامن منخفضة ولا تزدها إلا عندما تسمح البيئة والتصريح بذلك.
يستخدم التنفيذ المُقدَّم requests.Session() للتواصل عبر HTTP.
عمليات الشبكة الرئيسية هي:
يستخدم الكود المصدري مهلًا صريحة للطلبات (timeouts):
هذه القيم مُضمَّنة بشكل ثابت (hard-coded) في الكود المصدري الحالي.
يُعيّن التنفيذ:```python s.verify = False
ويعمل على كتم تحذير `InsecureRequestWarning`.
هذا يعني أن التحقق من الشهادة معطّل.
قد يكون ذلك مفيدًا في مختبر مؤقت بشهادات موقّعة ذاتيًا، لكنه **غير موصى به لأدوات الأمان الإنتاجية العادية**.
يجب أن يجعل التنفيذ الأكثر أمانًا التحقق من الشهادة قابلًا للتكوين ويُبقي التحقق مفعّلًا افتراضيًا.
---
## التسجيل والنتائج
يستخدم المصدر قفل خيط (thread lock) حول `safe_print()` لتقليل تعارض المخرجات بين خيوط العمل.
تشمل فئات الحالة النموذجية:```text
failed
success
يمكن أن يحتوي كائن النتيجة أيضًا على حقول مثل:```text url status reason shell_url
يتحقق المجمّع متعدد الأهداف أيضًا من:```text
uploaded_hidden
ومع ذلك، فإن تنفيذ exploit() المقدم لا يعيد تلك الحالة حاليًا.
يشير هذا إلى مجال يمكن فيه تنظيف نموذج النتائج في إصدار مستقبلي.
يتعامل التنفيذ الحالي مع عدة حالات فشل:
يُسجَّل طلب HTTP الفاشل كهدف فاشل مع رسالة الاستثناء.
إذا لم يُعِد طلب GET الأولي رمز HTTP 200، يتوقف المعالجة لذلك الهدف.
إذا تعذّر استخراج الرمز المتوقع، يُبلَّغ عن الهدف كفحص ثغرة فاشل.
تُلتقط الاستثناءات أثناء طلب الرفع ويستمر السكربت مع محاولة الامتداد/المسار التالي.
إذا لم يكن ملف الحمولة المحلي موجودًا، ينتهي البرنامج بخطأ.
تتعامل القناة التفاعلية مع KeyboardInterrupt وتخرج من الجلسة.
الدوال الرئيسية في الكود المصدري المقدم هي:
safe_print(msg)مساعد إخراج آمن للخيوط على الطرفية.
read_custom_shell(filepath)يقرأ ملف الحمولة المحلي كنص UTF-8 مع تجاهل أخطاء فك الترميز.
interactive_shell(shell_url)يوفر واجهة أوامر HTTP التفاعلية بعد مسار shell ناجح مُبلَّغ عنه.
exploit(url, shell_content, interactive=False)ينفذ سير عمل معالجة الهدف ويعيد قاموس نتيجة.
main()يتعامل مع:
يحتوي هذا المشروع على عدة خصائص حساسة أمنيًا ينبغي فهمها قبل الاستخدام.
الوضع التفاعلي قادر على إرسال أوامر إلى نقطة نهاية HTTP بعيدة. هذا يجعله أكثر حساسية بكثير من ماسح سلبي.
لا تعرض أو توزع الحمولات التشغيلية باستخفاف.
التحقق من شهادة TLS معطّل في التنفيذ الحالي.
ينبغي تصحيح هذا قبل التعامل مع المشروع كأداة أمنية ناضجة.
تُحمَّل الحمولة مباشرة من ملف محلي وتُقدَّم كجزء من طلب HTTP.
تعامل مع ملفات الحمولة كمواد اختبار أمني قابلة للتنفيذ.
لا ينفذ الكود المصدري الحالي آلية تفويض أو قائمة سماح قوية.
ينبغي أن يدعم إصدار داخلي أكثر أمانًا قائمة سماح صريحة للأهداف.
لا يوفر التنفيذ الحالي محدد معدل شامل.
لذلك ينبغي التحكم في الطلبات المتزامنة بعناية.
قد تحتوي ملفات النتائج على عناوين URL مرتبطة بمحاولات استغلال ناجحة. احمِ هذه الملفات كبيانات تقييم حساسة.
ينبغي أن يبدو سير عمل التقييم الاحترافي كما يلي:```text Authorization ↓ Define Scope ↓ Prepare Isolated Test Environment ↓ Confirm Target Ownership / Permission ↓ Perform Minimal Verification ↓ Collect Evidence ↓ Stop Exploitation Once Proof Is Established ↓ Remediate ↓ Retest ↓ Document Findings
يجب أن يكون هدف تقييم الثغرات هو تحديد المخاطر بأقل تأثير ضروري، وليس الحصول على وصول غير مقيّد.
---
## إعداد المختبر الموصى به
للتطوير، أنشئ بيئة مخصصة تحتوي على:
- جهاز Linux افتراضي معزول؛
- خادم ويب محلي؛
- تثبيت Joomla تجريبي؛
- مكوّن/إصدار JCE ذي الصلة؛
- عزل الشبكة؛
- لقطات/نسخ احتياطية؛
- حسابات اختبار؛
- سجلات التطبيق وخادم الويب.
تجنّب الاختبار ضد أنظمة إنتاج غير ذات صلة.
---
## استكشاف الأخطاء وإصلاحها
### `ModuleNotFoundError: No module named 'requests'`
ثبّت اعتماد Python:```bash
python3 -m pip install requests urllib3
تأكد من أن المسار المقدم موجود وقابل للقراءة:```bash ls -l
### فشل طلب HTTP الأولي
تحقق من:
- صحة URL؛
- DNS؛
- اتصال الشبكة؛
- توفر HTTP/HTTPS؛
- قواعد جدار الحماية؛
- نطاق الهدف؛
- سجلات الخادم.
### لم يتم اكتشاف رمز CSRF
قد تختلف استجابة الهدف عن بنية HTML المتوقعة من التعبيرات النمطية في التنفيذ الحالي.
لا تفترض أن غياب الرمز يعني أن الهدف آمن أو قابل للاستغلال. تعامل معه كنتيجة غير حاسمة.
### ملف النتائج فارغ
تحقق من:```text
ELV_CVE/success.txt
وتفقّد مخرجات الطرفية بحثًا عن طلبات HTTP الفاشلة، أو إخفاقات استخراج الرموز، أو رفض الرفع.
للتنفيذ المرفق عدة قيود.
--verbose معرّف لكنه لا يتحكم حاليًا في التسجيل التفصيلي.--output معرّف لكنه لا يُستخدم حاليًا لاختيار ملف النتائج.json وsleep لكن لا يُستخدمان بشكل جوهري في التنفيذ المعروض.uploaded_hidden، على الرغم من أن دالة exploit() المعروضة لا تُرجع تلك الحالة.قبل وسم إصدار بجودة إنتاجية، فكّر في إضافة:
انقل القيم المُضمّنة بشكل ثابت إلى طبقة إعدادات:
استخدم وحدة logging في Python بدلًا من الاعتماد بشكل أساسي على print().
المستويات المقترحة:```text DEBUG INFO WARNING ERROR
### مخطط النتيجة
حدّد كائن نتيجة متسق، على سبيل المثال:```text
target
status
reason
http_status
evidence
timestamp
افصل التحقق من الثغرات عن تنفيذ الأوامر.
البنية الأكثر أمانًا هي:```text Detection → Verification → Evidence
مع تعطيل تنفيذ الأوامر التفاعلية افتراضيًا.
### قائمة الأهداف المسموح بها
اشترط وجود ملف نطاق صريح أو قائمة مسموح بها قبل تنفيذ أي إجراءات شبكية.
### تثبيت الإصدارات
استخدم `requirements.txt` أو ملف قفل يحتوي على إصدارات التبعيات المُختبرة.
### الاختبار
أضف اختبارات وحدة من أجل:
- تطبيع عناوين URL؛
- تحليل الرموز؛
- تحليل قائمة الأهداف؛
- تسلسل النتائج؛
- معالجة الأخطاء؛
- التعامل مع المسارات المرشحة.
---
## التخطيط المقترح للمستودع
يمكن لمستودع نظيف أن يستخدم:```text
.
├── README.md
├── LICENSE
├── requirements.txt
├── elv-cve.py
├── tests/
│ ├── test_parser.py
│ ├── test_results.py
│ └── test_token_parser.py
├── docs/
│ └── methodology.md
└── examples/
└── targets.example.txt
لا تُودِع قوائم الأهداف الحقيقية، أو بيانات الاعتماد، أو حِمل shell، أو بيانات الجلسة، أو نتائج التقييم الحساسة.
إدخالات .gitignore الموصى بها:```gitignore
pycache/
*.py[cod]
.venv/
venv/
.env
ELV_CVE/
*.log
*.tmp
.DS_Store
يجب أن تبقى عناصر التقييم الحساسة خارج المستودع العام.
---
## الإصدارات
يعرّف المشروع الحالي نفسه على النحو التالي:```text
v1.0.0
لإصدارات المستقبلية، يُوصى باستخدام الإصدار الدلالي:```text MAJOR.MINOR.PATCH
مثال:```text
1.0.0
1.1.0
1.1.1
2.0.0
استخدم زيادة رقم الإصدار الرئيسي عند إجراء تغييرات كاسرة على واجهة سطر الأوامر (CLI)، أو تنسيق النتائج، أو البنية المعمارية.
المعالم المستقبلية المحتملة:
يجب أن يوثّق تقرير أمني مفيد ما يلي:```text Title Affected Asset Affected Component Version Severity CVE / Advisory Description Preconditions Evidence Business Impact Remediation Retest Result Timeline
تجنب تضمين بيانات الاعتماد أو المعلومات الشخصية أو البيانات غير ذات الصلة أو مخرجات الأوامر غير الضرورية في تقرير عام.
---
## إرشادات المعالجة
بالنسبة لنشر Joomla/JCE متأثر، يجب أن تستند المعالجة إلى **الإرشاد الرسمي للبائع/الأمان ونطاق الإصدارات المتأثرة المؤكد**، بدلاً من الاعتماد فقط على بيانات CVE الوصفية المضمّنة في هذا السكربت.
تشمل الإجراءات الدفاعية العامة ما يلي:
1. تحديد إصدارات Joomla وJCE المثبّتة.
2. تحديد ما إذا كان النشر يقع ضمن النطاق المتأثر المؤكد.
3. الترقية إلى إصدار مُصلح مدعوم من البائع عند توفره.
4. مراجعة سجلات خادم الويب والتطبيق بحثاً عن نشاط رفع/استيراد مشبوه.
5. فحص الملفات غير المتوقعة في الأدلة التي يمكن الوصول إليها عبر الويب.
6. تدوير بيانات الاعتماد إذا كان هناك اشتباه في الاختراق.
7. مراجعة آليات الاستمرارية والمهام المجدولة.
8. إعادة الاختبار بعد المعالجة.
9. الحفاظ على الأدلة ذات الصلة وفقاً لعملية الاستجابة للحوادث لدى المؤسسة.
---
## الإسناد
تحدد العلامة التجارية للمشروع وبيانات المصدر الوصفية المحرك على النحو التالي:
**HxN / E.L.V**
إصدار المشروع:
**1.0.0**
---
## الترخيص
يُقصد توزيع هذا المشروع بموجب:
**رخصة GNU General Public License v3.0**
راجع ملف `LICENSE` المرفق للحصول على النص الكامل للترخيص.
إذا لم يكن المستودع يحتوي بعد على ملف `LICENSE`، فأضف نص GNU GPL v3 الرسمي قبل نشر المستودع بترخيص GPL.
---
## إخلاء المسؤولية
يُقدَّم هذا البرنامج لأغراض البحث الأمني المصرّح به، واختبار الأمان الدفاعي، والتعليم، والاستخدام المختبري المُتحكَّم به.
لا يتحمل المؤلف والمساهمون مسؤولية سوء الاستخدام، أو الوصول غير المصرّح به، أو الضرر، أو فقدان البيانات، أو تعطيل الخدمة، أو أي نتيجة أخرى ناتجة عن استخدام هذا البرنامج.
أنت وحدك المسؤول عن ضمان توافق أنشطة الاختبار الخاصة بك مع القوانين والعقود والسياسات المعمول بها ومتطلبات التصريح الصريح.
**اختبر فقط الأنظمة التي تملكها أو الأنظمة التي لديك إذن صريح باختبارها.**
---
## ملاحظة ختامية
يوثّق هذا README السلوك الذي يكشفه مصدر `elv-cve.py` المرفق. وهو يميّز عمداً بين تفاصيل التنفيذ والادعاءات التي تتطلب تحققاً مستقلاً من الثغرة/الإرشاد.
بالنسبة لمستودع عام، تحقق من معلومات CVE وأضف مراجع موثوقة من البائع/الإرشادات قبل وصف المشروع بأنه استغلال مؤكد لمنتج/إصدار معين.