
Scanner de detecção não intrusivo para a cadeia RCE pré-autenticação wp2shell do WordPress (CVE-2026-63030 + CVE-2026-60137). Apenas detecção, sem exploração.
Scanner de deteção não intrusivo para vulnerabilidades recentes do core do WordPress — incluindo a cadeia RCE wp2shell de pré-autenticação.
wp2shell_scanner.py recolhe a impressão digital da versão do core de um site WordPress e lê a sua superfície REST API publicamente anunciada, depois classifica cada CVE de core monitorizada de forma independente contra a versão detetada. Os veredictos são conscientes do ramo — por exemplo, um site 6.8.x é corretamente reportado como exposto à CVE de injeção SQL mas não à cadeia RCE completa. Apenas deteta: nunca é enviado qualquer payload de exploração. Ficheiro único, uma dependência (requests), códigos de saída amigáveis para CI, e relatórios HTML / JSON / e-mail prontos para o cliente.
⚠️ Uso autorizado apenas. Analise sistemas que possui ou para os quais tem autorização explícita (por escrito) para testar. O scanner envia um
User-Agentidentificador para que as equipas azuis possam atribuir o tráfego — não se esconde.
A cadeia RCE wp2shell = CVE-2026-63030 + CVE-2026-60137 juntas → execução remota de código pré-autenticação numa instalação padrão. O scanner reporta a cadeia como exposta apenas quando ambas as CVEs classificam como vulneráveis para a versão detetada.
Nuances de ramo que o scanner acerta:
6.8.x contém a injeção SQL (CVE-2026-60137) apenas — não a cadeia RCE.6.9, a CVE-2026-3906 (Notas) é corrigida em 6.9.2, mas a cadeia wp2shell só é encerrada em 6.9.5. Portanto, 6.9.2/6.9.4 lêem corrigido para o bug das Notas, mas permanecem vulneráveis à cadeia RCE — o scanner, portanto, recomenda apenas 6.9.5 ou posterior nesse ramo, nunca 6.9.4.Operacionalmente importante: artigos técnicos e um PoC funcional para wp2shell já são públicos. A deteção de versão é agora o mínimo absoluto — a prioridade é aplicar a correção. A atualização fecha o caminho vulnerável mas não remove uma backdoor plantada antes da correção — daí o passo de avaliação de compromisso no relatório.
Este é um scanner de versão do core. CVEs de plugins e temas — a grande maioria do catálogo WPScan / Patchstack — requerem um feed vivo e curado e enumeração de versão por plugin, e estão intencionalmente fora do âmbito aqui. Dentro da sua área (CVEs recentes do core do WordPress), pretende ser preciso e preciso ao nível do ramo, em vez de duplicar uma base de dados de vulnerabilidades comerciais.
<meta name="generator"> na página inicial/readme.html<generator> do feed RSS / Atom/wp-links-opml.php (OPML)/wp-json/ para ver se o WordPress anuncia o espaço de nomes batch/v1 no seu índice REST. Isto confirma que o espaço de nomes está registado, não que o endpoint está acessível através de um WAF. Nenhum pedido batch e nenhum payload são enviados.Não explora nada. Nenhum payload de injeção SQL, nenhum pedido de confusão de rota batch, nenhuma tentativa de executar código ou ler dados. A deteção é baseada na versão mais uma leitura passiva da superfície API publicamente anunciada.
pip install requests
# alvo único
python3 wp2shell_scanner.py -t https://site.exemplo --authorized
# lista de alvos (um por linha, comentários # permitidos)
python3 wp2shell_scanner.py -T escopo.txt --authorized -o ./relatorios
# pré-visualizar os formatos de saída com dados sintéticos — sem rede, sem autorização necessária
python3 wp2shell_scanner.py --demo -o ./relatorios
A flag --authorized é uma gate de autorização explícita — scans ao vivo recusam-se a executar sem ela.
| Código | Significado |
|---|---|
2 | Pelo menos um alvo vulnerável |
1 | Pelo menos um alvo inconclusivo / erro |
0 | Limpo (corrigido / não afetado / não é WordPress) |
O destinatário do e-mail de notificação é a constante CSSLTD_CONTACT perto do topo do script (padrão [email protected]). Edite para o seu próprio endereço de receção.
O diretório examples/ contém saída sintética (--demo) para um anfitrião vulnerável fictício (exemplo.com, WordPress 6.9.1 — exposto a todas as três CVEs monitorizadas):
wp2shell_report_example.com.html — o relatório HTML pronto para o clientewp2shell_example.com.json — o registo JSONwp2shell_email_example.com.txt — o e-mail de notificação de rascunhoEstes são gerados a partir de dados fabricados para ilustrar o formato do relatório. Não são o resultado da análise de nenhum site real.
6.9.5+ está limpo — 6.9.4 ainda tem a cadeia wp2shell.)uploads/, wp-config.php, wp-cron e contas de admin; execute verificações de integridade de ficheiros contra o core conhecido como bom./wp-json/batch/v1).Esta ferramenta destina-se apenas a testes de segurança autorizados. É da sua responsabilidade garantir que tem permissão para analisar qualquer alvo. Análises não autorizadas podem ser ilegais. Os autores não aceitam qualquer responsabilidade por uso indevido.
| CVE | Fraqueza | Acesso | Core afetado | Corrigido em |
|---|
| CVE-2026-63030 — wp2shell | CWE-436 — Confusão de rota batch REST → RCE (Crítica; CVSS 9.8 WPScan CNA / 7.5 CISA-ADP; GHSA-ff9f-jf42-662q) | Não autenticado | 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.9.5, 7.0.2 |
| CVE-2026-60137 | CWE-89 — Injeção SQL em WP_Query author__not_in (Moderada isolada, CVSS 5.9; Crítica em cadeia; GHSA-fpp7-x2x2-2mjf) | Não autenticado | 6.8.0–6.8.5, 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.8.6, 6.9.5, 7.0.2 |
| CVE-2026-3906 | CWE-862 — API REST de Notas sem autorização (Moderada, CVSS 4.3, GHSA-6x83-fcf5-r65g) | Subscritor+ | 6.9.0–6.9.1 | 6.9.2 |
| Flag | Significado |
|---|
-t, --target | URL ou host alvo único |
-T, --targets-file | Ficheiro com um alvo por linha |
--demo | Gerar um relatório/e-mail AMOSTRA a partir de dados sintéticos (sem rede) |
-o, --output-dir | Diretório de saída (padrão ./wp2shell_reports) |
--formats | Lista separada por vírgulas: json,html,email (padrão: todos) |
--authorized | Gate de autorização — necessário para scans ao vivo |
--timeout | Timeout HTTP em segundos (padrão 12) |
--delay | Segundos entre alvos (seja educado; padrão 1.0) |
--insecure | Não verificar certificados TLS |
--quiet | Suprimir o resumo na consola |
| Veredicto | Significado |
|---|
VULNERABLE | A versão detetada está dentro de um intervalo afetado — aplique correção imediatamente |
PATCHED | Numa versão corrigida; não exposta às CVEs monitorizadas |
NOT_AFFECTED | A versão é anterior à falha mais antiga monitorizada (< 6.8.0 — CVE-2026-60137) |
UNKNOWN | A versão não pôde ser confirmada, vetores discordaram, ou foi vista uma build de pré-lançamento — verifique manualmente |
NOT_WORDPRESS | Nenhuma impressão digital WordPress encontrada |