
Detector de PoC y validador seguro para la cadena de vulnerabilidades de WordPress WP2Shell: CVE-2026-63030 (confusión de rutas por lotes REST) + CVE-2026-60137 (inyección SQL author__not_in). Solo para pruebas de seguridad autorizadas.
Cobertura de CVEs: CVE-2026-63030 y CVE-2026-60137 Uso previsto: Pruebas de seguridad autorizadas, validación defensiva y laboratorios locales desechables únicamente
WP2Shell es una cadena de vulnerabilidades del núcleo de WordPress que combina un error de confusión de rutas por lotes en la API REST previo a la autenticación (CVE-2026-63030) con una primitiva de inyección SQL en WP_Query mediante author__not_in (CVE-2026-60137). Este repositorio proporciona un escáner de prueba de concepto en Python y un validador seguro para que los defensores puedan identificar instalaciones de WordPress afectadas, confirmar el comportamiento vulnerable en un laboratorio aislado y verificar la remediación, sin necesidad de extraer datos o lograr ejecución de código.
Este proyecto identifica instalaciones de WordPress y valida las dos primitivas de vulnerabilidad asociadas con la cadena de vulnerabilidades WP2Shell del núcleo de WordPress:
WP_Query::author__not_in, que puede resultar en inyección SQL cuando entradas controladas por el atacante alcanzan el parámetro.Cuando ambas condiciones están presentes, una solicitud no autenticada puede llegar a la construcción SQL vulnerable a través del endpoint por lotes de la API REST de WordPress. Los avisos públicos describen el impacto combinado como potencialmente conducente a la ejecución remota de código.
Este repositorio debe utilizarse únicamente en sistemas que usted posea o para los que tenga autorización explícita de prueba. Se recomienda preferir un laboratorio aislado con Docker o una máquina virtual vinculada a 127.0.0.1.
El archivo fuente actual contiene funcionalidad que cambia el estado del sistema, incluidos intentos de extracción de datos de bases de datos, intentos de escritura de archivos, flujos de autenticación, creación de administradores, carga de complementos y ejecución de comandos.
Las versiones afectadas de WordPress pueden perder la alineación entre los arreglos internos utilizados para rastrear:
Cuando un miembro de lote malformado es aceptado en un arreglo interno pero no en otro, las solicitudes posteriores pueden asociarse con el manejador incorrecto. Por lo tanto, una solicitud puede ser validada como una ruta pero ejecutada utilizando el callback de otra ruta.
Impacto de seguridad:
author__not_inLa implementación afectada de WP_Query no normaliza de manera consistente author__not_in antes de utilizarlo para construir una condición SQL NOT IN (...).
El parámetro normalmente espera una lista de ID de autor enteros. Si una cadena escalar llega a la construcción de consulta vulnerable sin la validación de esquema REST prevista, la estructura SQL insegura puede sobrevivir hasta la consulta a la base de datos.
Impacto de seguridad:
| Rama de WordPress | Afectada | Versión corregida |
|---|---|---|
| 6.8.x | Solo CVE-2026-60137: 6.8.0–6.8.5 | 6.8.6 |
| 6.9.x | Ambos problemas: 6.9.0–6.9.4 | 6.9.5 |
| 7.0.x | Ambos problemas: 7.0.0–7.0.1 | 7.0.2 |
| 7.1 prerelease | Beta 1 afectada | Beta 2 |
| Anteriores a 6.8 | No afectadas por estos dos CVEs | N/A |
WordPress publicó correcciones el 17 de julio de 2026 y habilitó actualizaciones automáticas forzadas para las instalaciones afectadas debido a la gravedad.
Unauthenticated client | v WordPress REST batch endpoint | v Malformed batch member creates request/handler misalignment | v Later request is validated against one route but dispatched using another route's handler | v Scalar author_exclude reaches WP_Query as author__not_in | v Unsafe value reaches SQL NOT IN (...) construction | v Blind SQL timing or Boolean oracle | v Potential database compromise | v Potential application-level compromise and RCE
El detector debe detenerse después de confirmar las primitivas de confusión de rutas e inyección SQL. No necesita extraer datos ni ejecutar comandos para establecer que una instalación afectada es vulnerable.
---
## Flujo de detección
### Fase 1 — Normalizar el objetivo
La herramienta:
1. Agrega un esquema `http` o `https` predeterminado si falta.
2. Normaliza la ruta de instalación de WordPress.
3. Rechaza esquemas de URL no compatibles y credenciales incrustadas.
4. Aplica políticas de redirección, proxy, TLS y tiempo de espera.
### Fase 2 — Identificar WordPress
El escáner busca:
- Referencias a `wp-content/`.
- Referencias a `wp-includes/`.
- Metadatos del generador de WordPress.
- Enlaces de descubrimiento de la API REST.
- Estructura del índice REST de WordPress.
- El espacio de nombres `wp/v2`.
- Huellas opcionales de feed y `readme.html`.
### Fase 3 — Determinar la versión
La evidencia de la versión puede provenir de:
- Metadatos del generador HTML.
- Metadatos del generador de feed.
- Cadenas de consulta de activos del núcleo de WordPress.
- Cabeceras HTTP del generador.
- `readme.html`.
- Un archivo local `wp-includes/version.php`.
La evidencia se puntúa y se concilia. Los indicadores de versión remota contradictorios reducen la confianza.
### Fase 4 — Comprobar la exposición de la ruta batch
El escáner intenta descubrir `/batch/v1` mediante:```text
/?rest_route=/
/wp-json/
La ruta se puede abordar utilizando cualquiera de las siguientes opciones:```text /?rest_route=/batch/v1 /wp-json/batch/v1
### Fase 5 — Sonda segura de confusión de rutas
La sonda segura contiene:
1. Una ruta interna deliberadamente malformada.
2. Una solicitud a un ID de publicación no válido con un `GET` público anidado e inofensivo.
3. Una solicitud `/batch/v1` posterior.
Un servidor vulnerable devuelve una respuesta externa `207 Multi-Status` en la que la solicitud de publicación no válida se procesa como una solicitud de lote anidada.
El detector informa:```text
route-confusion-observed
cuando ve: