
Análise técnica e mitigação defensiva para uma cadeia de XSS para RCE pré-autenticação no WordPress Core, incluindo bypass de sanitização, DOM clobbering, abuso de JSONP, assinaturas de detecção e correção.
Análise técnica e matriz de mitigação defensiva para o vetor CVE-2026-64638 (XSS2Shell), uma inconsistência crítica no parsing da tela de autenticação do WordPress Core que permite encadear um Cross-Site Scripting (XSS) refletido pré-autenticação com primitivas do navegador até alcançar a execução remota de código (RCE).
O risco real deste vetor reside na combinação de múltiplos gadgets legítimos integrados no núcleo da aplicação. O que inicialmente se classifica como um achado de impacto médio (XSS refletido), escala para comprometimento total do servidor seguindo estes elos técnicos:
[ Solicitação Pré-Auth ] ➔ [ Inconsistência de Filtros ] ➔ [ DOM Clobbering ] ➔ [ Callback JSONP REST API ] ➔ [ Interação de Admin ] ➔ [ Geração App Password ] ➔ [ RCE via Plugin Upload ]
O ponto de entrada aproveita uma discrepância de lógica entre duas funções internas de limpeza de entradas na tela de login (wp-login.php). Enquanto uma ignora certas tags HTML de área, a outra as repara, permitindo que um payload malicioso no parâmetro de nome de usuário seja refletido diretamente no DOM da resposta de erro de login.
O WordPress carrega por padrão scripts de perfil de usuário na interface de login (necessários para os fluxos de redefinição de senha). A injeção de HTML altera o espaço de nomes global (window.ajaxurl), redirecionando as chamadas legítimas para um endpoint controlado pelo atacante.
Utilizando parâmetros específicos da REST API interna (_jsonp, _method=GET, _envelope=1), o navegador interpreta as respostas como conteúdo application/javascript, o que permite forçar a invocação de funções arbitrárias ignorando diretivas estritas de Content Security Policy (CSP) baseadas em nonces.
Se um administrador com sessão aberta interagir com a origem afetada, o payload aproveita seus privilégios para autorizar de forma automatizada uma Application Password em segundo plano. Com essas credenciais de API secundárias, é realizado o upload de um plugin malicioso que concede um shell interativo sobre o ambiente de execução do PHP.
O patch de segurança foi implantado de forma retroativa em todos os ramos ativos do núcleo do WordPress. Verifique a versão menor exata instalada em seus servidores.
Atualizar imediatamente o Core do WordPress para a versão correspondente ao seu ramo. Não dependa exclusivamente do sistema de atualizações automáticas em ambientes corporativos.
# Forçar atualização do Core via WP-CLI
wp core update --version=7.0.3 --force
Se não for possível atualizar o ambiente imediatamente, aplique controles de defesa em profundidade para quebrar os elos superiores da cadeia de exploração:
define('DISALLOW_FILE_MODS', true); no seu arquivo wp-config.php para restringir a instalação ou modificação de código por meio da interface web.wp-login.php exclusivamente a faixas de IP corporativas ou VPNs de confiança.Para auditar se a infraestrutura foi exposta ou atacada antes da aplicação do patch, audite os arquivos de logs de acesso (Access Logs) e o sistema de arquivos procurando os seguintes padrões:
# Buscar tentativas de injeção de caracteres HTML ou payloads no login
grep -E "wp-login\.php.*user_login=.*[<>]" /var/log/nginx/access.log
# Buscar chamadas à REST API que forcem parâmetros de callbacks JSONP
grep -E "wp-json.*_jsonp=" /var/log/nginx/access.log
# Auditar chamadas incomuns de upload de complementos por parte de IPs desconhecidos
grep "POST /wp-admin/update.php?action=upload-plugin" /var/log/nginx/access.log
.php anômalos ou de criação recente no caminho /wp-content/plugins/ que pertençam a plugins não reconhecidos ou inativos.| Ramo | Última Versão Vulnerável | Versão Corrigida (Patch) | Estado de Suporte |
|---|
| 7.0 | 7.0.2 | 7.0.3 | Ramo Principal Semanal |
| 6.9 | 6.9.5 | 6.9.6 | Backport de Segurança |
| 6.8 | 6.8.6 | 6.8.7 | Backport de Segurança |
| 6.7 | 6.7.5 | 6.7.6 | Backport de Segurança |
| < 4.7 | Todas | Não suportado | 🚨 Risco Crítico / End of Life |