
يفحص WordPress Forminator بحثًا عن ثغرة CVE-2026-15748 لتنفيذ التعليمات البرمجية عن بُعد (RCE) بدون مصادقة. يكتشف المواقع المعرضة للخطر، ويزحف عبر النماذج، ويستخرج nonces، وينفذ اختبارات رفع آمنة.
ماسح بحث أمني وتقييم ثغرات مكتوب بلغة Python لتحديد عمليات تثبيت WordPress التي تستخدم إضافة Forminator وتقييم مدى التعرض المرتبط بالإصدار.
لأغراض تعليمية واختبار مصرّح به فقط
شغّل هذا المشروع فقط ضد الأنظمة التي تملكها أو لديك إذن صريح بتقييمها.
CVE-2026-15748 هي ثغرة أمنية مرتبطة بإضافة Forminator لـ WordPress.
يوفر هذا المشروع ماسحًا لأغراض البحث الأمني والاختبار المصرّح به. ينفّذ سلسلة من الفحوصات السلبية وعلى مستوى التطبيق لتحديد WordPress، وتحديد موقع Forminator، وتحديد الإصدار المثبّت عندما يكون ذلك ممكنًا، وفحص الصفحات والنماذج ذات الصلة، والإبلاغ عن التقييم الناتج.
يهدف الماسح إلى مساعدة الباحثين الأمنيين على فهم مدى تعرض بيئات WordPress المصرّح بها دون التعامل مع نتيجة الماسح كدليل قاطع على قابلية الاستغلال.
يتبع الماسح سير العمل العام التالي:
Target
|
v
Normalize URL
|
v
Detect WordPress
|
+---- not detected ----> NOT WORDPRESS
|
v
Crawl relevant pages
|
v
Detect Forminator
|
v
Detect Forminator version
|
v
Compare version
|
v
Inspect forms
|
v
Generate result
| الميزة | الوصف |
|---|---|
| اكتشاف WordPress | يكتشف ما إذا كان الهدف يبدو أنه يستخدم WordPress. |
| اكتشاف Forminator | يبحث عن مؤشرات على إضافة Forminator. |
| اكتشاف الإصدار | يحاول تحديد إصدار Forminator المثبّت من المصادر المتاحة. |
| فحص الإصدار | يقارن الإصدار المكتشف بقيمة VULN_MAX المُهيّأة. |
| زحف الموقع | يجمع الصفحات ذات الصلة والروابط الداخلية لمزيد من الفحص. |
| اكتشاف خريطة الموقع | يفحص مواقع خرائط الموقع الشائعة في WordPress. |
| اكتشاف النماذج | يبحث عن نماذج Forminator وعناصر النماذج ذات الصلة. |
| اكتشاف Nonce | يحاول تحديد Forminator nonce في بيانات النموذج المكتشفة. |
| تعدد الخيوط | يدعم معالجة أهداف متعددة في وقت واحد. |
| معالجة إعادة المحاولة | يعيد محاولة الطلبات الفاشلة وفقًا للحد المُهيّأ. |
| تأخير الطلبات | يضيف تأخيرًا عشوائيًا قابلًا للتهيئة بين الطلبات. |
| نتائج مفصّلة | يكتب نتائج التقييم المجمّعة إلى ملف نتائج مفصّل. |
requestspackagingurllib3ثبّت الحزم المطلوبة:
pip install requests packaging urllib3
أو:
python -m pip install requests packaging urllib3
استنسخ المستودع:
git clone https://github.com/yora1928/cve-2026-15748.git
ادخل إلى دليل المشروع:
cd cve-2026-15748
ثبّت التبعيات:
pip install requests packaging urllib3
تحقق من تثبيت Python:
python --version
يُعرَّف إعداد الماسح الضوئي مباشرةً في الشيفرة المصدرية:
TIMEOUT = 15
THREADS = 8
VULN_MAX = "1.56.1"
MAX_RETRIES = 3
DELAY_MIN = 1.0
DELAY_MAX = 2.5
CRAWL_DEPTH = 2
| المتغير | الافتراضي | الوصف |
|---|---|---|
TIMEOUT | 15 | مهلة طلب HTTP. |
THREADS | 8 | عدد خيوط العمل المستخدمة في الفحص. |
VULN_MAX | 1.56.1 | الحد الأقصى للإصدار الذي يُعتبر متأثرًا وفقًا لتقييم الإصدار لدى الفاحص. |
MAX_RETRIES | 3 | الحد الأقصى لعدد محاولات إعادة المحاولة للطلبات الفاشلة. |
DELAY_MIN | 1.0 | الحد الأدنى لتأخير الطلب. |
DELAY_MAX | 2.5 | الحد الأقصى لتأخير الطلب. |
CRAWL_DEPTH | 2 | الحد الأقصى لعمق الزحف. |
تصف القيم أعلاه الإعدادات الحالية للشيفرة المصدرية للفاحص.
يقبل الفاحص إما عنوان URL هدف واحد أو ملفًا نصيًا يحتوي على عناوين URL متعددة للأهداف.
python cve-2026-15748.py -u https://target.com
يحدد -u و--url عنوان URL هدفًا واحدًا.
استخدم هذا الوضع عند إجراء تقييم ضد بيئة واحدة مصرّح بها.
أنشئ ملفًا مثل targets.txt:
https://target1.example
https://target2.example
https://target3.example
ثم شغّل:
python cve-2026-15748.py -f targets.txt
-f و --file يحددان قائمة الأهداف.
تُعامَل كل سطر غير فارغ كهدف.
يستخدم التكوين الافتراضي 8 خيوط.
على سبيل المثال:
python cve-2026-15748.py -f targets.txt -t 10
أو:
python cve-2026-15748.py -f targets.txt -t 5
-t يغيّر عدد خيوط العمل (threads) التي يستخدمها الماسح الضوئي.
يوفّر الماسح الضوئي أيضًا وضع --upload الاختياري:
python cve-2026-15748.py -u https://lab.example.com --upload
لأهداف متعددة مصرّح بها:
python cve-2026-15748.py -f authorized-targets.txt -t 5 --upload
يمكن لهذا الوضع تنفيذ طلب POST/رفع ضد نقطة نهاية Forminator عند استيفاء الشروط ذات الصلة.
لا تستخدم --upload إلا على الأنظمة التي يكون فيها هذا الاختبار مصرّحًا به صراحةً.
| الأمر | الغرض |
|---|---|
-u، --url | فحص عنوان URL هدف واحد. |
-f، --file | قراءة أهداف متعددة من ملف. |
-t | تعيين عدد خيوط الفحص. |
--upload | تفعيل وضع اختبار الرفع لهدف مصرّح به. |
هدف واحد:
python cve-2026-15748.py -u https://target.com
أهداف متعددة:
python cve-2026-15748.py -f targets.txt
أهداف متعددة مع تزامن مخصص:
python cve-2026-15748.py -f targets.txt -t 10
اختبار الرفع المخوّل في المختبر:
python cve-2026-15748.py -u https://lab.example.com --upload
يقوم الماسح الضوئي بتنفيذ عدة مراحل أثناء التقييم.
يتم تطبيع عنوان URL الهدف قبل إجراء الطلبات بحيث تستخدم الفحوصات اللاحقة تنسيق عنوان URL متسقًا.
يتحقق الماسح الضوئي من مؤشرات ونقاط نهاية WordPress الشائعة، بما في ذلك:
/wp-login.php
/wp-json
/xmlrpc.php
/wp-content
كما يبحث أيضًا في الاستجابات عن مؤشرات مثل:
wp-content
wp-includes
إذا تعذّر التعرف على WordPress، يُبلغ الماسح الضوئي بما يلي:
[NOT WORDPRESS]
يبني الماسح قائمة بالصفحات من المسارات الشائعة، ومواقع خرائط الموقع (sitemap)، والروابط الداخلية المكتشفة من الهدف.
تشمل أمثلة المسارات التي يتم فحصها ما يلي:
/contact
/kontak
/hubungi-kami
/form
/forms
/formulir
/upload
/unggah
/submit
/kirim
/gallery
/kontribusi
/daftar
/pendaftaran
/registration
/register
/file-upload
/submit-document
/unggah-berkas
/upload-file
تتضمن مواقع خرائط الموقع الشائعة:
/sitemap.xml
/sitemap_index.xml
/wp-sitemap.xml
المُستكشِف محدود بـ CRAWL_DEPTH.
يبحث الماسح الضوئي عن معرّفات Forminator مثل:
forminator-form-<ID>
بالنسبة للنماذج المكتشفة، فإنه يتحقق من العناصر ذات الصلة مثل:
type="file"
و:
<select>
كما يحاول الحصول على:
form_id
nonce
من نموذج HTML.
يحاول الماسح تحديد إصدار Forminator من المعلومات التي يكشف عنها الهدف.
أحد المصادر هو مسار أصل مشابه لـ:
/wp-content/plugins/forminator/...
مع معامل الإصدار:
?ver=X.X.X
الماسح الضوئي لديه أيضًا آلية احتياطية تبحث عن:
Stable tag:
في HTML أو readme.txt.
يمكن أن تتضمن طريقة الكشف المُبلَّغ عنها:
html-source
أو:
readme.txt
حدود التقييم المُهيأة هي:
1.56.1
تتم مقارنة الإصدار المكتشف بـ VULN_MAX.
تشمل حالات التقييم المحتملة:
VULNERABLE
PATCHED
إذا تم اكتشاف Forminator ولكن تعذّر تحديد إصداره، يمكن للماسح الإبلاغ عن:
INSTALLED (unknown version)
ينبغي التعامل مع تصنيف أداة الفحص على أنه نتيجة تقييم، وليس دليلًا قاطعًا على أن الهدف قابل للاستغلال.
يتبع المخرج الرئيسي هذا الهيكل العام:
[STATUS] URL VERSION (METHOD) [PAGES] [FORM STATUS] [VULNERABILITY STATUS] [UPLOAD STATUS]
مثال:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [HAS UPLOAD FORM] [VULNERABLE]
عندما لا يتم اكتشاف نموذج رفع:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [VULNERABLE]
FOUNDتم اكتشاف Forminator وتم جمع المعلومات ذات الصلة بنجاح.
NOT FOUNDتعذّر اكتشاف Forminator.
مثال:
[NOT FOUND] https://target.com [17 pages]
NOT WORDPRESSلم يتم اكتشاف الهدف كتثبيت WordPress.
مثال: