
Detector blackbox no intrusivo para wp2shell (RCE de pre-autenticación en el núcleo de WordPress, CVE-2026-63030 / CVE-2026-60137). Solo detección.
Detector de caja negra, no intrusivo, para wp2shell — la cadena de RCE de preautenticación en el núcleo de WordPress divulgada el 2026-07-17:
/wp-json/batch/v1): una subpetición cuya ruta falla en wp_parse_url() termina en el array de validación pero no en el array de manejadores, desincronizando ambos.author__not_in de WP_Query, alcanzable sin autenticación a través de esa confusión de rutas.Encadenadas, permiten a un atacante anónimo forjar una cuenta de administrador e instalar un webshell como plugin — en una instalación por defecto, sin necesidad de plugins ni temas.
Análisis técnico completo: https://own2pwn.fr/articles/appsec/wp2shell-wordpress-rce
Detecta exposición. No explota nada. Cada petición que realiza es una petición normal de solo lectura que un rastreador podría enviar:
generator siga siendo identificada: la metaetiqueta generator, los activos del núcleo con ?ver= (en los activos de /wp-includes/ y /wp-admin/, que siguen al núcleo), el generador del feed RSS (?v=), /wp-links-opml.php, los activos de la página de inicio de sesión, /wp-includes/version.php, readme.html y el índice /wp-json/. Las fuentes se contrastan entre sí y se reporta un nivel de confianza (high cuando ≥2 coinciden).OPTIONS benigna (y el índice REST) — que devuelve el esquema de la ruta — para saber si hay una mitigación perimetral activa.Ninguna petición dispara la vulnerabilidad. Nada de POST /wp-json/batch/v1, nada de author_exclude, nada de SQL. Si la versión del núcleo está oculta, la herramienta lo dice en lugar de adivinar (confirmar wp2shell a ciegas requeriría explotarlo).
Resiliencia: reintentos con backoff, decodificación gzip/deflate, fallback https→http, seguimiento de redirecciones entre hosts, un User-Agent similar al de un navegador (personalizable) y análisis paralelo de múltiples objetivos.
| Rango | Exposición | Corregido en |
|---|---|---|
| 6.8.0 – 6.8.5 | Solo inyección SQL (sin RCE) | 6.8.6 |
| 6.9.0 – 6.9.4 | RCE de preautenticación |
pip install wp2shell-detect
O ejecútalo directamente desde el código fuente (un solo archivo, sin dependencias, Python 3.8+):
git clone https://github.com/own2pwn-fr/wp2shell-detect
./wp2shell-detect/wp2shell_detect.py https://example.com
Cero dependencias. Python 3.8+.
wp2shell-detect https://example.com
wp2shell-detect --json https://a.example https://b.example
wp2shell-detect --targets hosts.txt --workers 16 # parallel sweep
wp2shell-detect --discover https://front.example # follow headless WP
(Instalado desde PyPI, el comando es wp2shell-detect. Desde un clon, ejecuta ./wp2shell_detect.py con los mismos argumentos).
Opciones: --json, --discover, --workers N, --timeout S, --user-agent UA, --insecure, --targets FILE. El código de salida 2 se devuelve si algún objetivo se detecta como vulnerable (práctico en barridos de CI / cron).
Los sitios modernos suelen servir un front de JS/Next.js en www. y mantener WordPress en un host hermano (wordpress., wp., cms.). Al analizar www. se obtiene not WordPress — correctamente, porque ese host no es WordPress. Apunta el análisis al host de WordPress, o pasa --discover para que la herramienta lo encuentre y lo analice automáticamente a partir de la CSP / la cabecera Link / las URLs de activos del front.
Ejemplo:
[!!] https://blog.example.com -> VULNERABLE (pre-auth RCE)
version : 6.9.3 (generator meta tag=6.9.3, RSS feed generator=6.9.3)
batch : reachable (/wp-json/batch/v1)
cves : CVE-2026-63030, CVE-2026-60137
note : WordPress 6.9.3 is in the wp2shell pre-auth RCE range. REST batch endpoint reachable — no edge mitigation.
Parchea el núcleo de WordPress a 6.8.6 / 6.9.5 / 7.0.2 o posterior. Si el parcheo debe esperar, bloquea la ruta batch en el perímetro (/wp-json/batch/v1 y ?rest_route=/batch/v1) o mediante un plugin must-use que enganche rest_pre_dispatch, y luego audita si hay cuentas de administrador no autorizadas y plugins desconocidos.
Solo para evaluación autorizada. Ejecutar esto contra sistemas que no posees ni tienes el mandato de probar puede ser ilegal en tu jurisdicción. Eres responsable del uso que hagas de ella.
MIT. Consulta LICENSE. Por own2pwn.
Link o las URLs de activos — habitual en fronts headless/Next.js), la herramienta lo reporta, y --discover también lo analiza.| 6.9.5 |
| 7.0.0 – 7.0.1 | RCE de preautenticación | 7.0.2 |