
CVE-2026-63030 - Prueba de concepto de inyección SQL por confusión de rutas en el REST Batch de WordPress
Inyección SQL por confusión de rutas en el procesamiento por lotes de la API REST de WordPress (CVE-2026-63030) — Prueba de concepto
Investigación, desarrollo de exploits y documentación por Ch4120N
Este repositorio y la herramienta adjunta (exploit.py) están destinados estrictamente a fines educativos, pruebas de penetración autorizadas e investigación de seguridad.
El uso de este exploit contra objetivos sin consentimiento explícito, previo y por escrito es ilegal y viola las leyes globales contra el fraude y el abuso informático. El autor (Ch4120N) no asume absolutamente ninguna responsabilidad por el mal uso, los daños o las consecuencias legales derivadas del uso de este código. Actúe siempre dentro de los límites de la ley y obtenga la autorización adecuada.
CVE-2026-63030 es una vulnerabilidad crítica no autenticada que afecta a la API REST de WordPress. Explota un error de confusión de rutas dentro del endpoint de procesamiento por lotes anidado (/wp-json/batch/v1 o /?rest_route=/batch/v1).
Cuando WordPress procesa un lote de solicitudes de la API REST, valida cada sub-solicitud contra su esquema específico antes de la ejecución. Sin embargo, debido a una falla en la forma en que el puntero de enrutamiento interno maneja rutas deliberadamente malformadas (p. ej., ///), el esquema de validación se desincroniza del manejador de ejecución real.
/wp/v2/users (que no acepta author_exclude) sea ejecutada por el manejador de /wp/v2/posts. El parámetro author_exclude sin sanitizar se pasa directamente a la cláusula author__not_in de WP_Query, lo que resulta en una inyección SQL no autenticada.oembed_cache. El exploit utiliza entonces una carga útil changeset de Customizer para envenenar la caché del menú de navegación, engañando a WordPress para que ejecute una solicitud de creación de usuario bajo el contexto de un administrador existente.pip install.exploit.py).WP_Post falsa (1 solicitud por valor).EXTRACTVALUE() si WP_DEBUG_DISPLAY está habilitado.cd).No se requieren paquetes de terceros. Asegúrese de tener instalado Python 3.8 o superior.
# Clone the repository
git clone https://github.com/Ch4120N/CVE-2026-63030.git
cd CVE-2026-63030
# Make the script executable
chmod +x exploit.py
# Verify Python version
python3 --version
# Executing the script
python3 exploit.py
El exploit se divide en tres subcomandos principales: check, read y shell.
Estas opciones se aplican a todos los subcomandos:
| Opción | Descripción | Por defecto |
|---|---|---|
url | URL base del objetivo (p. ej., http://target.com) | Requerido |
--rest-route | Usa /?rest_route=/batch/v1 en lugar de /wp-json/batch/v1 (para sitios con permalinks deshabilitados). | False |
--timeout | Tiempo de espera de la solicitud HTTP en segundos. | 30.0 |
--proxy | Proxy HTTP/HTTPS (p. ej., http://127.0.0.1:8080). | None |
check - Detección de vulnerabilidadesSondea el objetivo de forma segura para confirmar la presencia de los marcadores de confusión de rutas y prueba la temporización de la inyección SQL sin extraer datos.
| Opción | Descripción | Por defecto |
|---|---|---|
--sleep | Retardo de temporización SQL (segundos) utilizado por el mecanismo de respaldo --confirm-sqli. | 3.0 |
--samples | Número de pares de temporización SQL (de referencia/retardada) a probar. | 3 |
--confirm-sqli | Envía una carga útil activa de confirmación de la inyección SQL (añade un ligero retardo). | False |
read - Extracción de la base de datosExtrae datos directamente de la base de datos mediante la inyección SQL.
| Opción | Descripción | Por defecto |
|---|---|---|
--preset | Preajustes de extracción rápida: fingerprint (versión/usuario/BD) o users (logins/hashes). | fingerprint |
--query | Ejecuta una expresión SQL escalar personalizada (p. ej., "SELECT @@version"). | None |
--prefix | Prefijo de las tablas de la base de datos. | wp_ |
--max-length | Máximo de caracteres a extraer por valor. | 128 |
--technique | Técnica de extracción: auto, union, error o blind. | auto |
shell - Ejecución remota de códigoDespliega la webshell y ejecuta comandos. Si no se proporcionan credenciales, activa automáticamente el puente de creación de administrador pre-autenticación.
| Opción | Descripción | Por defecto |
|---|---|---|
--user | Nombre de usuario del administrador. (Omitir para usar el puente pre-autenticación). | None |
--password | Contraseña del administrador. (Omitir para usar el puente pre-autenticación). | None |
--cmd | Comando único para ejecutar en el objetivo. | None |
-i, --interactive | Abre un shell interactivo (REPL) después del despliegue. | False |
A continuación se muestran ejemplos reales de la herramienta en acción.
$ python3 exploit.py check http://vulnerable-wordpress.local --confirm-sqli