
Plantilla de Nuclei para la detección no intrusiva de XSS2Shell, un parser diferencial preautenticado en WordPress Core que permite la inyección de elementos DOM en la página de login, sirviendo de base para una cadena de XSS → RCE.
Plantilla Nuclei para detección no intrusiva de XSS2Shell, un parser diferencial preautenticado en el núcleo de WordPress que permite inyección de elementos DOM en la página de inicio de sesión, sirviendo de base para una cadena de XSS → RCE.
⚠️ Esta plantilla solo detecta la falla de sanitización (etapa de reflejo del marcador en la respuesta HTML). No ejecuta la cadena completa de explotación (DOM clobbering, JSONP/SOME, robo de Application Password o subida de plugin). Uso estricto en activos bajo autorización explícita.
WordPress Core, al renderizar el mensaje de error "usuario no registrado" en wp-login.php, inserta el nombre de usuario enviado en HTML sin escape consistente entre dos filtros distintos:
wp_strip_all_tags() (basado en strip_tags() de PHP) solo reconoce una etiqueta si < es seguido inmediatamente por una letra — un espacio después de < hace que el filtro trate el contenido como texto puro.wp_kses_post(), aplicado justo después, usa su propio tokenizer, que tolera ese espacio y reconstruye la cadena como un elemento HTML real (<area>, <div> y <button> están en la lista blanca).El resultado es que un atacante no autenticado puede inyectar elementos DOM arbitrarios en la página de inicio de sesión, que — combinados con manejadores heredados del script user-profile.js, DOM clobbering de la variable ajaxurl y JSONP de la API REST — permiten ejecución de JavaScript en el origen de WordPress y, en cadena completa, RCE contra la cuenta de un administrador.
Descubierto y divulgado por pwn.ai. Corregido en WordPress 7.0.3 (backport hasta la rama 4.7).
La plantilla envía una solicitud POST a /wp-login.php con un payload en el campo log que contiene:
< area id=xss2shell-marker href=/x>< div id=xss2shell-div>
Si WordPress es vulnerable, wp_kses_post() reconstruye esas cadenas como elementos HTML reales en la respuesta. La plantilla usa dos matchers en regex (condición and) para confirmar que ambas etiquetas aparecen reconstruidas — reduciendo falsos positivos de WAFs que reflejan entrada parcialmente.
# Validar sintaxis de la plantilla
nuclei -t CVE-2026-64638.yaml -validate
# Ejecutar contra un objetivo único
nuclei -t CVE-2026-64638.yaml -u https://target.com
# Ejecutar contra una lista de objetivos
nuclei -t CVE-2026-64638.yaml -l targets.txt
# Debug (ver request/response completos)
nuclei -t CVE-2026-64638.yaml -u https://target.com -debug-req -debug-resp
| Resultado | Significado |
|---|---|
| Coincidencia positiva | Las etiquetas inyectadas fueron reflejadas como HTML real → parser diferencial presente → objetivo vulnerable (no corregido) |
| Sin coincidencia | El payload fue escapado o eliminado → objetivo corregido (WordPress ≥ 7.0.3) o protegido por WAF/proxy que normaliza espacios dentro de etiquetas |
Actualizar a WordPress 7.0.3 o superior. El parche fue retroportado a todas las ramas mantenidas a partir de la 4.7.
Esta plantilla se proporciona con fines de investigación en seguridad y pruebas de penetración autorizadas. El uso contra sistemas sin autorización explícita es ilegal. El autor no se responsabiliza por el uso indebido.
Renzi