
🔥 XSS2Shell — Escáner y kit de herramientas PoC para CVE-2026-64638
Escáner masivo basado en el comportamiento y generador de PoC de calidad probatoria para la cadena XSS a RCE sin autenticación previa de WordPress que afecta a más de 500 millones de sitios web.
Solo detección. Sin weaponización. Diseñado para programas de bug bounty y equipos azules.
¿Qué es esto? • Inicio rápido • Dorks de Shodan • Uso • Matriz de decisión • Detección • FAQ
Busca instancias de WordPress potencialmente vulnerables en Internet antes de escanear:
http.component:"wordpress" -http.title:"Just a moment"
Encuentra sitios WordPress excluyendo el modo "I'm Under Attack" de Cloudflare / las páginas de protección contra bots que bloquean o desafían las solicitudes automatizadas.
http.component:"wordpress" http.title:"Log In"
Devuelve solo las páginas de inicio de sesión de WordPress: la superficie de ataque exacta para CVE-2026-64638.
http.component:"wordpress" "wp-content" "?ver=7.0" -"?ver=7.0.3"
Señala instancias de WordPress 7.0.x sin el parche 7.0.3 mediante el fingerprinting de versiones de activos.
http.component:"wordpress" http.html:"wp-login.php"
Detecta sitios donde wp-login.php es accesible pero puede no ser la página actual: mayor cobertura.
http.component:"wordpress" -http.title:"Just a moment" -http.title:"Attention Required" -org:"Cloudflare"
Filtro agresivo que descarta la mayoría de los objetivos detrás de Cloudflare. Úsalo al escanear a gran escala con --active: Cloudflare limitará la tasa o bloqueará la solicitud de la sonda.
Consejo: exporta los resultados de Shodan con
shodan downloady canaliza los nombres de host directamente axss2shell_mass.py -i.
El 7 de agosto de 2026, pwn.ai reveló CVE-2026-64638 (XSS2Shell) — una vulnerabilidad crítica de cross-site scripting sin autenticación previa en el núcleo de WordPress que encadena hasta la ejecución remota de código en el servidor. [citation:pwn.ai blog]
El fallo explota una discrepancia entre los analizadores de strip_tags() de PHP y wp_kses_post() de WordPress:
strip_tags() utiliza < seguido inmediatamente de una letra para identificar etiquetas HTML. < area id=...> (con un espacio) se trata como texto — sobrevive.wp_kses_post() (KSES) reconoce < area como un elemento <area> válido — y <area> está en la lista blanca de KSES. [citation:pwn.ai blog]Un inicio de sesión fallido con un nombre de usuario especialmente diseñado < area id=ajaxurl href=/?rest_route=/&_method=GET&_jsonp=alert>... omite ambos saneadores, se renderiza como DOM vivo en la página de inicio de sesión, secuestra el script user-profile.js de WordPress mediante DOM clobbering y dispara alert() en el origen de WordPress — cero clics, cero autenticación, cero cookies requeridas. [citation:pwn.ai blog]
¿Escalado a un administrador con sesión iniciada? La misma primitiva roba contraseñas de aplicación mediante Same Origin Method Execution (SOME), sube un plugin malicioso y ejecuta PHP como www-data. [citation:pwn.ai blog] [citation:hadrian.io blog]
Afectado: WordPress 6.4 hasta 7.0.2 — parcheado en 7.0.3 con backports para 4.7+.
Impacto: ~500 millones de sitios web en el momento de la divulgación. [citation:pwn.ai blog]
| Recurso | Enlace |
|---|---|
| Divulgación original (pwn.ai) | pwn.ai/blog/xss2shell |
| Análisis técnico de Hadrian | hadrian.io/blog/wordpress-xss2shell |
| Aviso de WordPress (GHSA) | GHSA-52p2-r8wf-jcrf |
| Investigación sobre ataques SOME (2022) | pwn.ai/blog/bypass-csp-using-wordpress |
| Lanzamiento de WordPress 7.0.3 | wordpress.org/news/2026/08/wordpress-7-0-3-release |
Este es un kit de herramientas de solo detección. No weaponiza la vulnerabilidad: ofrece a investigadores de seguridad, cazadores de bug bounty y equipos azules todo lo necesario para:
"Una cadena de versión indica cuál debería ser el nivel de parche del código.
Solo el comportamiento del saneador de la página de inicio de sesión indica si el fallo se dispara."
Los hosts administrados aplican backports de parches de seguridad silenciosamente sin cambiar las cadenas de versión. Los plugins de endurecimiento del inicio de sesión reemplazan el mensaje de error por completo, eliminando el canal de reflexión incluso en versiones inseguras. Los escáneres basados solo en versión producen falsos positivos y falsos negativos. Este escáner envía una única sonda benigna y clasifica el comportamiento real del saneador.
git clone https://github.com/jakestone/xss2shell.git
cd xss2shell
pip install -r requirements.txt
# Passive — no probes sent to target, version + endpoint fingerprinting only
python3 xss2shell_mass.py -i domains.txt -o results
# Active — sends ONE benign failed-login per host (authorized assets only!)
python3 xss2shell_mass.py -i domains.txt -o results --active --workers 80
# Single target
python3 make_poc.py --target https://blog.example.com
# Batch from scanner output
python3 make_poc.py --from-results results.csv -o pocs/
Abre el .poc.html generado en tu navegador mientras grabas un video → si se dispara alert(), has capturado evidencia de XSS sin autenticación previa.
xss2shell_mass.py)usage: xss2shell_mass.py [-h] -i INPUT [-o OUTPUT]
[--active] [--workers WORKERS]
[--timeout TIMEOUT] [--quiet]