
PoC funcional do CVE-2026-64638 (XSS2Shell): cadeia pré-auth de XSS a RCE no WordPress Core. Laboratório Docker + servidor atacante Python + análise técnica e mitigação.
Prova de Conceito educativa da cadeia XSS2Shell (CVE-2026-64638), vulnerabilidade pré-autenticação XSS → RCE no WordPress Core descoberta de forma autônoma por pwn.ai e divulgada em 7 de agosto de 2026.
CVE-2026-64638 é uma vulnerabilidade do tipo cross-site scripting (XSS)
refletido, pré-autenticação, na tela de login do WordPress
(wp-login.php). Afeta todas as versões do WordPress em manutenção
anteriores à 7.0.3, publicada em 6 de agosto de 2026 como
security release de emergência. Foi atribuída a ela uma pontuação
CVSS v4.0 de 8.9.
A cadeia denominada XSS2Shell demonstra como, partindo apenas de uma tentativa de login mal-sucedida com um username manipulado, um atacante pode:
strip_tags) e do
WordPress (wp_kses_post).user-profile.js) para realizar uma requisição REST JSONP para a própria
origem.jQuery.globalEval().O resultado é execução remota de código (RCE) no servidor WordPress,
sob o usuário do processo web (tipicamente www-data), partindo de um
único clique do administrador em um link controlado pelo atacante.
Este repositório contém material estritamente educativo e defensivo.
A PoC é fornecida com um ambiente Docker autocontido cuja única finalidade é servir como alvo local e reproduzível.
┌─────────────────────────────────────────────────────────────────────┐
│ 1. XSS pre-auth en wp-login.php │
│ log=< area id=ajaxurl href=/?rest_route=/&_jsonp=...> │
│ (discrepancia strip_tags ↔ wp_kses_post) │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 2. user-profile.js dispara .trigger('click') │
│ DOM clobbering de ajaxurl → petición POST al origen │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 3. REST JSONP responde application/javascript │
│ jQuery.globalEval() ejecuta el callback en el origen WP │
└──────────────────────────────────────────┬──────────────────────────┘
│ callback = window.opener
│ .approve.click
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 4. SOME: click() cruza la frontera opener→admin │
│ authorize-application.php#approve se pulsa en sesión admin │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 5. WP crea Application Password → redirige a success_url │
│ El atacante captura user_login + password en callback.php │
└──────────────────────────────────────────┬──────────────────────────┘
│ HTTP Basic REST
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 6. POST /wp-json/wp/v2/pages → publica página con <script> │
│ El admin visita la página → JS en origen WP con sesión admin │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 7. fetch update.php?action=upload-plugin → sube payload.zip │
│ PHP del plugin es accesible directamente sin activarlo │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 8. RCE confirmada: GET /wp-content/plugins/payload/shell.php │
└─────────────────────────────────────────────────────────────────────┘
A PoC foi construída para ser executada em macOS ou Linux com:
zip (para construir o payload manualmente,
opcional; o ZIP já construído está incluído em payload/).Não é necessário instalar o WordPress manualmente: o docker-compose.yml
sobe um WordPress 7.0.2 vulnerável (a última versão anterior ao patch)
juntamente com MariaDB.
POC XSS2Shell (CVE-2026-64638)/
├── README.md ← Este archivo
├── docker-compose.yml ← Blanco: WordPress 7.0.2 + MariaDB
├── .env.example ← Variables de configuración
├── exploit.py ← Orquestador en Python (opcional)
├── attacker/ ← Infraestructura del atacante
│ ├── index.html ← Página cebo con la cadena SOME
│ ├── callback.php ← Receptor de la Application Password
│ └── server.py ← Servidor estático + PHP embebido
├── payload/ ← Plugin ZIP malicioso
│ ├── build_payload.py ← Generador del ZIP
│ ├── shell.php ← Webshell mínimo
│ └── payload.zip ← ZIP preconstruido (listo para usar)
└── docs/
├── ANALISIS.md ← Análisis técnico detallado
└── MITIGACION.md ← Guía de mitigación y hardening
cp .env.example .env
docker compose up -d