
CVE-2026-63030 - Prova di concetto di SQL Injection di Route-Confusion nel batch REST di WordPress
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
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.
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).
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.
/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.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.pip install richiesto.exploit.py).WP_Post fittizia (1 richiesta per valore).EXTRACTVALUE() se WP_DEBUG_DISPLAY è abilitato.cd).Non sono richiesti pacchetti di terze parti. Assicurati di avere installato Python 3.8 o superiore.
# 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
L'exploit è diviso in tre sotto-comandi principali: check, read e shell.
Queste opzioni si applicano a tutti i sotto-comandi:
| Opzione | Descrizione | Predefinito |
|---|---|---|
url | URL di base del target (es. http://target.com) | Obbligatorio |
--rest-route | Usa /?rest_route=/batch/v1 invece di /wp-json/batch/v1 (per siti con permalink disabilitati). | False |
--timeout | Timeout delle richieste HTTP in secondi. | 30.0 |
--proxy | Proxy HTTP/HTTPS (es. http://127.0.0.1:8080). | None |
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.
| Opzione | Descrizione | Predefinito |
|---|---|---|
--sleep | Ritardo di temporizzazione SQL (secondi) usato dal fallback --confirm-sqli. | 3.0 |
--samples | Numero di coppie di temporizzazione SQL baseline/ritardate da testare. | 3 |
--confirm-sqli | Invia un payload attivo di conferma SQLi (aggiunge un lieve ritardo). | False |
read - Estrazione dal DatabaseEstrae i dati direttamente dal database tramite l'iniezione SQL.
| Opzione | Descrizione | Predefinito |
|---|---|---|
--preset | Preset di estrazione rapida: fingerprint (versione/utente/db) o users (login/hash). | fingerprint |
--query | Esegue un'espressione SQL scalare personalizzata (es. "SELECT @@version"). | None |
--prefix | Prefisso delle tabelle del database. | wp_ |
--max-length | Numero massimo di caratteri da estrarre per valore. | 128 |
--technique | Tecnica di estrazione: auto, union, error o blind. | auto |
shell - Esecuzione Remota di CodiceDistribuisce la webshell ed esegue i comandi. Se non vengono fornite credenziali, attiva automaticamente il bridge di creazione dell'admin in pre-autenticazione.
| Opzione | Descrizione | Predefinito |
|---|---|---|
--user | Nome utente admin. (Ometti per usare il bridge di pre-autenticazione). | None |
--password | Password admin. (Ometti per usare il bridge di pre-autenticazione). | None |
--cmd | Comando singolo da eseguire sul target. | None |
-i, --interactive | Apre una shell interattiva (REPL) dopo la distribuzione. | False |
Di seguito alcuni esempi reali dello strumento in azione.
$ python3 exploit.py check http://vulnerable-wordpress.local --confirm-sqli