
Template Nuclei para detecção não-intrusiva do XSS2Shell, um parser differential pré-autenticado no WordPress Core que permite injeção de elementos DOM na página de login, servindo de base para uma cadeia de XSS → RCE.
Template Nuclei para detecção não-intrusiva do XSS2Shell, um parser differential pré-autenticado no WordPress Core que permite injeção de elementos DOM na página de login, servindo de base para uma cadeia de XSS → RCE.
⚠️ Este template apenas detecta a falha de sanitização (etapa de reflexo de marcador na resposta HTML). Ele não executa a cadeia completa de exploração (DOM clobbering, JSONP/SOME, roubo de Application Password ou upload de plugin). Uso estrito em ativos sob autorização explícita.
O WordPress Core, ao renderizar a mensagem de erro "usuário não registrado" em wp-login.php, insere o username submetido em HTML sem escaping consistente entre dois filtros distintos:
wp_strip_all_tags() (baseado no strip_tags() do PHP) só reconhece uma tag se < for seguido imediatamente por uma letra — um espaço após < faz o filtro tratar o conteúdo como texto puro.wp_kses_post(), aplicado logo depois, usa seu próprio tokenizer, que tolera esse espaço e reconstrói a string como um elemento HTML real (<area>, <div> e <button> estão na allowlist).O resultado é que um atacante não autenticado consegue injetar elementos DOM arbitrários na página de login, que — combinados com handlers legados do script user-profile.js, DOM clobbering da variável ajaxurl e JSONP da REST API — permitem execução de JavaScript na origem do WordPress e, em cadeia completa, RCE contra a conta de um administrador.
Descoberto e divulgado por pwn.ai. Corrigido no WordPress 7.0.3 (backport até a branch 4.7).
O template envia uma requisição POST para /wp-login.php com um payload no campo log contendo:
< area id=xss2shell-marker href=/x>< div id=xss2shell-div>
Se o WordPress estiver vulnerável, o wp_kses_post() reconstrói essas strings como elementos HTML reais na resposta. O template usa dois matchers em regex (condição and) para confirmar que ambas as tags aparecem reconstruídas — reduzindo falsos positivos de WAFs que refletem input parcialmente.
# Validar sintaxe do template
nuclei -t CVE-2026-64638.yaml -validate
# Rodar contra um alvo único
nuclei -t CVE-2026-64638.yaml -u https://target.com
# Rodar contra uma lista de alvos
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 |
|---|---|
| Match positivo | As tags injetadas foram refletidas como HTML real → parser differential presente → alvo vulnerável (não corrigido) |
| Sem match | O payload foi escapado ou removido → alvo corrigido (WordPress ≥ 7.0.3) ou protegido por WAF/proxy que normaliza espaços dentro de tags |
Atualizar para WordPress 7.0.3 ou superior. O patch foi retroportado para todas as branches mantidas a partir da 4.7.
Este template é fornecido para fins de pesquisa em segurança e testes de penetração autorizados. O uso contra sistemas sem autorização explícita é ilegal. O autor não se responsabiliza por uso indevido.
Renzi