
WordPress Core RCE no autenticado (CVE-2026-63030, CVE-2026-60137)
__ ______ ____ ____ _ _ _____ _ _ \ \ / / _ \___ \/ ___|| | | | ____| | | | \ \ /\ / /| |_) |__) \___ \| |_| | _| | | | | \ V V / | __// __/ ___) | _ | |___| |___| |___ \_/\_/ |_| |_____|____/|_| |_|_____|_____|_____|wp2shell-checker | Detector de Desincronización de la API Batch de WordPress
Detector comprobador para la RCE pre-autenticación de la API REST Batch de WordPress Core
Creado por 0xjessie21 — Cybersecurity ILCS
| Firma | wp2shell / WP Core REST Batch API Desync |
| Severidad | 9.8 CRÍTICO — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Versiones afectadas | WordPress 6.9.0-6.9.4 y 7.0.0-7.0.1 |
| Corregido en | 6.9.5, 7.0.2 |
| Precondiciones | Ninguna — sin autenticación, sin plugins, configuración por defecto |
| Modo | No destructivo / sonda de solo lectura |
Captura de pantalla de la herramienta detectando una instancia vulnerable de WordPress en un compromiso interno de VAPT autorizado.

Esta herramienta es estrictamente para pruebas de seguridad autorizadas y fines de verificación defensiva únicamente.
| Úsela solamente contra instancias de WordPress que posea, o para las que tenga autorización explícita por escrito para realizar pruebas (por ejemplo, un alcance interno de VAPT aprobado). | |
Esta sonda está diseñada para ser no destructiva — apunta a un ID de categoría inexistente (0) y se detiene en la capa de verificación de permisos, por lo que nunca se crean, modifican o eliminan datos. | |
| No modifique la carga útil (por ejemplo, cambiando el ID de categoría a uno real, o apuntándola a otras rutas REST) para intentar una explotación real. Hacerlo convierte esto de un detector en un exploit armado — para lo cual esta herramienta no está diseñada explícitamente y no lo soporta. | |
| No publique, redistribuya ni ejecute esto contra sistemas fuera de su alcance autorizado. El uso no autorizado contra sistemas de terceros puede violar la Ley ITE (UU ITE) en Indonesia y leyes equivalentes sobre uso indebido de ordenadores en otros lugares. | |
| Se proporciona tal cual, sin garantía alguna. El autor y cualquier organización asociada no asumen ninguna responsabilidad por uso indebido, daños o consecuencias legales derivadas del uso de esta herramienta. |
Al usar esta herramienta acepta que es el único responsable de garantizar que su uso cumple con la legislación aplicable y las políticas de autorización de su organización.
La API REST Batch de WordPress Core (/wp-json/batch/v1) mantiene tres arreglos paralelos sincronizados al resolver un lote de sub-solicitudes. Una sub-solicitud intencionalmente malformada desincroniza estos arreglos — provocando que cada sub-solicitud posterior se despache utilizando el manejador y callback de permisos incorrectos.
Esta herramienta envía una solicitud batch manipulada e inspecciona únicamente los códigos de respuesta, sin cruzar nunca a una operación que cambie el estado.
| # | Sub-solicitud | Propósito |
|---|---|---|
| 0 | POST http://: | Intencionalmente malformada — desencadena la desincronización de índices |
| 1 | DELETE /wp/v2/categories/0 | Sensor seguro — el ID de categoría 0 nunca existe |
| 2 | POST /wp/v2/block-renderer/core/paragraph | Manejador de referencia usado para detectar la fuga |
Lógica de veredicto
| Resultado | Veredicto |
|---|---|
block_cannot_read | VULNERABLE — la verificación de permisos se filtró del manejador de block-renderer |
rest_term_invalid | PARCHEADO — el manejador de categorías respondió correctamente |
| sin marcador encontrado | INCONCLUSIVO — WAF, API deshabilitada o no es WordPress |
Adicionalmente, la herramienta realiza huellas dactilares pasivas de WAF/CDN a partir de las cabeceras de respuesta:
Cloudflare · Sucuri · Akamai · AWS CloudFront · Imperva · Fastly · F5 BIG-IP · Wordfence
# Escaneo básico
./wp2shell_checker.py https://tu-sitio.com
# Múltiples objetivos en una ejecución
./wp2shell_checker.py https://sitio1.com https://sitio2.com https://sitio3.com
# Tiempo de espera personalizado
./wp2shell_checker.py https://tu-sitio.com --timeout 20
# Mostrar solicitud/respuesta completa en bruto (carga útil, cabeceras, cuerpo)
./wp2shell_checker.py https://tu-sitio.com --raw
# Deshabilitar colores/animación (para guardar en un archivo de registro)
./wp2shell_checker.py https://tu-sitio.com --no-color > reporte_escaneo.txt
Todas las banderas
| Bandera | Descripción |
|---|---|
targets | Una o más URLs base para escanear (obligatorio) |
--timeout N | Tiempo de espera de la solicitud en segundos (por defecto: 10) |
--no-color | Deshabilitar colores ANSI y animación de escaneo |
--raw | Imprimir la carga útil y cabeceras completas de solicitud/respuesta en bruto |
Si un objetivo resulta VULNERABLE:
7.0.2 (o 6.9.5 en la rama 6.9). Confirme que la actualización realmente se aplicó./wp-json/batch/v1 y ?rest_route=/batch/v1 en su WAF/proxy inverso — ambas formas deben estar bloqueadas.| wp2shell.com | comprobador y aviso original, Searchlight Cyber |
| Hadrian Security — Análisis técnico | análisis de causa raíz |
Este proyecto está licenciado bajo la Licencia MIT — consulte el archivo LICENSE para más detalles.
Cybersecurity ILCS · construido para uso defensivo interno