
Gera uma página de gatilho HTML auto-submissora que explora uma injeção de HTML refletida no login do WordPress (CVE-2026-64638) para exibir um banner personalizado, para testes de segurança autorizados.
Um gerador de PoC de arquivo único e sem dependências para a injeção de HTML refletida CVE-2026-64638 do WordPress em wp-login.php (diferencial entre strip_tags() e o parser KSES). Ele produz uma página de gatilho com auto-envio: quando a vítima abre o arquivo, a página envia silenciosamente o payload de injeção via POST e a vítima cai diretamente na página de login do alvo com um banner renderizado — sem interação, sem JavaScript no lado do alvo.
Somente para testes de segurança autorizados. Use apenas contra sistemas que você possui ou para os quais possui autorização explícita para testar.
| Versões | Status |
|---|
| 6.4.0 – 7.0.2 | Vulnerável — dispara imediatamente |
| 5.8 – 6.3 | Condicional — requer um plugin que passe login_errors por wp_kses() com style permitido |
| 4.7 – 5.7 | Não explorável (o nome de usuário não é refletido) |
| 6.4.9 / 6.5.9 / 6.6.6 / 6.7.6+ / 6.8.7 / 6.9.6 / 7.0.3+ | Corrigido (esc_html) |
python3 banner_poc.py \
--out trigger.html \
--target http://192.0.2.10/wp-login.php \
--msg "Scheduled System Maintenance"
# subdiretório + caminho de login oculto + subtítulo
python3 banner_poc.py \
--out trigger.html \
--target http://10.0.0.5:8080/blog/my-secret-login \
--msg "Please sign in again" --sub "Session expired"
Hospede trigger.html em qualquer lugar. Quando a vítima o abre, ela é redirecionada para a página de login do alvo com o banner renderizado. O salto é silencioso: sem conteúdo intermediário visível, o fundo corresponde à tela de login do WordPress, e o carregamento ocorre em ~0,5 s.
| Flag | Descrição |
|---|---|
--out | Arquivo HTML de saída (obrigatório) |
--target | URL completa da página de login — inclui subdiretórios / caminhos de login ocultos (obrigatório) |
--msg | Texto do banner (padrão: Scheduled System Maintenance) |
--sub | Linha de subtítulo opcional |
wp-login.php reflete um nome de usuário com falha de login na mensagem de erro.
Versões vulneráveis o sanitizam com PHP strip_tags(), que permite qualquer coisa
em que < seja seguido por espaço em branco.< div style="..."> chega como um elemento real.< /strong> (barra precedida por espaço) também sobrevive ao strip_tags() e é
reconstruído como uma tag de fechamento real, permitindo que o payload feche o
<strong> do template (um elemento de formatação ativa do HTML5) como seu primeiro
token e mantenha controle exato do DOM.div final sem fechamento, de tamanho zero e fora da tela, engole o texto final
do template ("… is not registered on this site …").class que sobrevivem ao
safecss_filter_attr(). No 6.3+ / 6.4+, position:fixed renderiza uma sobreposição
de página inteira; no 5.8–6.2, essas propriedades são removidas e o mesmo payload
se degrada automaticamente para um banner vermelho no fluxo do conteúdo.HTML/CSS puro — nenhum JavaScript é executado no alvo. Regras de WAF direcionadas a
<script> ou manipuladores de eventos não se aplicam.
Esta ferramenta é publicada para pesquisa defensiva e testes de penetração autorizados. O autor não é responsável pelo uso indevido.