
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.
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
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.
La directory examples/ contiene output sintetici (--demo) per un
host vulnerabile fittizio (example.com, WordPress 6.9.1 — esposto a tutte e tre le CVE tracciate):
wp2shell_report_example.com.html — il report HTML pronto per il clientewp2shell_example.com.json — il record JSONwp2shell_email_example.com.txt — la bozza dell'e-mail di notificaQuesti sono generati da dati di fantasia per illustrare il formato del report. Non sono il risultato della scansione di alcun sito reale.
6.9.5+ è pulita — 6.9.4 ha ancora la catena wp2shell.)uploads/, wp-config.php,
wp-cron e account admin; esegui controlli di integrità dei file rispetto al core noto integro./wp-json/batch/v1).author__not_in (GHSA-fpp7-x2x2-2mjf)Questo strumento è solo per test di sicurezza autorizzati. Sei responsabile di garantire di avere il permesso di scansionare qualsiasi target. La scansione non autorizzata potrebbe essere illegale. Gli autori non accettano alcuna responsabilità per un uso improprio.
| 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 |
| 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 |
| 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 |