
Scanner di rilevamento non intrusivo per la catena RCE pre-autenticazione wp2shell di WordPress (CVE-2026-63030 + CVE-2026-60137). Solo rilevamento, nessuno sfruttamento.
Scanner di rilevamento non intrusivo per le recenti vulnerabilità del core di WordPress — inclusa la catena RCE pre-autenticazione wp2shell.
wp2shell_scanner.py identifica la versione del core di un sito WordPress e legge la
sua superficie dell'API REST pubblicamente esposta, quindi classifica ogni CVE del
core tracciata singolarmente rispetto alla versione rilevata. I verdetti sono
consapevoli del ramo (branch-aware) — ad esempio un sito 6.8.x viene
correttamente segnalato come esposto alla CVE di SQL injection ma non all'intera
catena RCE. Effettua solo rilevamento: nessun payload di exploit viene mai inviato.
Un singolo file, una dipendenza (requests), codici di uscita compatibili con le CI e report HTML / JSON / e-mail pronti per il cliente.
⚠️ Solo uso autorizzato. Scansiona sistemi di tua proprietà o per i quali hai ricevuto esplicita autorizzazione (per iscritto) al test. Lo scanner invia uno
User-Agentidentificativo così i blue team possono attribuire il traffico — non si nasconde.
| CVE | Debolezza | Accesso | Core interessato | Corretta in |
|---|---|---|---|---|
| CVE-2026-63030 — wp2shell | CWE-436 — confusione di route batch REST → RCE (Critica; CVSS 9.8 WPScan CNA / 7.5 CISA-ADP; GHSA-ff9f-jf42-662q) | Senza autenticazione | 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.9.5, 7.0.2 |
| CVE-2026-60137 | CWE-89 — SQL injection in WP_Query author__not_in (Moderata da sola, CVSS 5.9; Critica in catena; GHSA-fpp7-x2x2-2mjf) | Senza autenticazione | 6.8.0–6.8.5, 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.8.6, 6.9.5, 7.0.2 |
| CVE-2026-3906 | CWE-862 — API REST Notes con autorizzazione mancante (Moderata, CVSS 4.3, GHSA-6x83-fcf5-r65g) | Subscriber+ | 6.9.0–6.9.1 | 6.9.2 |
La catena RCE wp2shell = CVE-2026-63030 + CVE-2026-60137 insieme → esecuzione
di codice remoto pre-autenticazione su un'installazione predefinita. Lo scanner segnala
la catena come esposta solo quando entrambe le CVE risultano vulnerabili per la versione rilevata.
Sfumature di ramo che lo scanner gestisce correttamente:
6.8.x contiene solo la SQL injection (CVE-2026-60137) — non la catena RCE.
Sul ramo 6.9, CVE-2026-3906 (Notes) è corretta in 6.9.2, ma la catena
wp2shell non è chiusa fino alla 6.9.5. Quindi 6.9.2/6.9.4 risultano
corrette per il bug di Notes ma restano vulnerabili alla catena RCE — lo scanner
quindi raccomanda solo 6.9.5 o successiva su quel ramo, mai 6.9.4.
Importante dal punto di vista operativo: analisi tecniche e una PoC funzionante per wp2shell sono già pubbliche. Il rilevamento della versione è ora il minimo assoluto — la priorità è il patching. L'aggiornamento chiude il percorso vulnerabile ma non rimuove una backdoor piazzata prima della patch — da qui il passaggio di valutazione della compromissione nel report.
Questo è uno scanner della versione del core. Le CVE di plugin e temi — la grande maggioranza del catalogo WPScan / Patchstack — richiedono un feed vivo e curato e l'enumerazione della versione per singolo plugin, e sono intenzionalmente fuori ambito qui. Nel suo campo (recenti CVE del core di WordPress), mira a essere preciso e accurato per ramo piuttosto che a duplicare un database commerciale di vulnerabilità.
<meta name="generator"> nella home page/readme.html<generator> del feed RSS / Atom/wp-links-opml.php (OPML)/wp-json/ per vedere se
WordPress pubblicizza il namespace batch/v1 nel suo indice REST. Questo
conferma che il namespace è registrato, non che l'endpoint sia raggiungibile
attraverso un WAF. Nessuna richiesta batch e nessun payload vengono inviati.Non sfrutta nulla. Nessun payload di SQL injection, nessuna richiesta di confusione di route batch, nessun tentativo di eseguire codice o leggere dati. Il rilevamento si basa sulla versione più una lettura passiva della superficie API pubblicamente pubblicizzata.
pip install requests
# single target
python3 wp2shell_scanner.py -t https://site.example --authorized
# list of targets (one per line, # comments allowed)
python3 wp2shell_scanner.py -T scope.txt --authorized -o ./reports
# preview the output formats with synthetic data — no network, no auth needed
python3 wp2shell_scanner.py --demo -o ./reports
| Flag | Significato |
|---|---|
-t, --target | URL o host singolo del target |
-T, --targets-file | File con un target per riga |
--demo | Genera un report/e-mail DI ESEMPIO da dati sintetici (nessuna rete) |
-o, --output-dir | Directory di output (predefinita ./wp2shell_reports) |
--formats | Elenco separato da virgole: json,html,email (predefinito: tutti) |
--authorized | Gate di autorizzazione — richiesto per le scansioni live |
--timeout | Timeout HTTP in secondi (predefinito 12) |
--delay | Secondi tra i target (sii gentile; predefinito 1.0) |
--insecure | Non verificare i certificati TLS |
--quiet | Sopprime il riepilogo sulla console |
Il flag --authorized è un esplicito gate di autorizzazione — le scansioni live
rifiutano di essere eseguite senza di esso.
| Codice | Significato |
|---|---|
2 | Almeno un target vulnerabile |
1 | Almeno un target inconcludente / errore |
0 | Pulito (corretto / non interessato / non WordPress) |
Il destinatario dell'e-mail di notifica è la costante CSSLTD_CONTACT vicino all'inizio
dello script (predefinito [email protected]). Modificala con il tuo indirizzo di ricezione.
| Verdetto | Significato |
|---|---|
VULNERABLE | La versione rilevata rientra in un intervallo interessato — applica subito la patch |
PATCHED | Su una release corretta; non esposta alle CVE tracciate |
NOT_AFFECTED | La versione precede la prima vulnerabilità tracciata (< 6.8.0 — CVE-2026-60137) |
UNKNOWN | La versione non ha potuto essere confermata, i vettori discordavano o è stata vista una build pre-release — verifica manualmente |
NOT_WORDPRESS | Nessun fingerprint di WordPress trovato |