
🔥 XSS2Shell — Scanner CVE-2026-64638 e Toolkit PoC
Scanner di massa behavior-first e generatore di PoC di livello probatorio per la catena
XSS-to-RCE pre-autenticazione di WordPress che colpisce oltre 500 milioni di siti web.
Solo rilevamento. Nessuna weaponizzazione. Progettato per programmi bug bounty e blue team.
Cos'è? • Avvio rapido • Shodan Dorks • Utilizzo • Matrice decisionale • Rilevamento • FAQ
Caccia alle istanze WordPress potenzialmente vulnerabili su internet prima della scansione:
http.component:"wordpress" -http.title:"Just a moment"
Trova i siti WordPress escludendo le pagine della modalità "I'm Under Attack" / protezione bot di Cloudflare che bloccheranno o sottoporranno a sfida le richieste automatizzate.
http.component:"wordpress" http.title:"Log In"
Restituisce solo le pagine di login di WordPress — l'esatta superficie d'attacco di CVE-2026-64638.
http.component:"wordpress" "wp-content" "?ver=7.0" -"?ver=7.0.3"
Contrassegna le istanze WordPress 7.0.x senza la patch 7.0.3 tramite fingerprinting della versione delle risorse.
http.component:"wordpress" http.html:"wp-login.php"
Individua i siti in cui wp-login.php è raggiungibile ma potrebbe non essere la pagina corrente — copertura più ampia.
http.component:"wordpress" -http.title:"Just a moment" -http.title:"Attention Required" -org:"Cloudflare"
Filtro aggressivo che elimina la maggior parte dei target protetti da Cloudflare. Da usare quando si scansiona su larga scala con --active — Cloudflare limiterà la frequenza o bloccherà la richiesta del probe.
Suggerimento: Esporta i risultati di Shodan con
shodan downloade convoglia i nomi host direttamente inxss2shell_mass.py -i.
Il 7 agosto 2026, pwn.ai ha divulgato CVE-2026-64638 (XSS2Shell) — una vulnerabilità critica di cross-site scripting pre-autenticazione nel core di WordPress che si estende fino alla remote code execution sul server. [citazione: blog pwn.ai]
La vulnerabilità sfrutta un disaccordo di parsing tra strip_tags() di PHP e wp_kses_post() di WordPress:
strip_tags() usa < immediatamente seguito da una lettera per identificare i tag HTML. < area id=...> (con uno spazio) viene trattato come testo — sopravvive.wp_kses_post() (KSES) riconosce < area come un elemento <area> valido — e <area> è in allowlist in KSES. [citazione: blog pwn.ai]Un singolo login fallito con un nome utente appositamente costruito < area id=ajaxurl href=/?rest_route=/&_method=GET&_jsonp=alert>... bypassa entrambi i sanitizer, viene renderizzato come DOM attivo nella pagina di login, dirotta lo script user-profile.js di WordPress tramite DOM clobbering e attiva alert() nell'origine di WordPress — zero click, zero autenticazione, zero cookie richiesti. [citazione: blog pwn.ai]
Scalato a un amministratore autenticato? La stessa primitiva ruba le Application Password tramite Same Origin Method Execution (SOME), carica un plugin malevolo ed esegue PHP come www-data. [citazione: blog pwn.ai] [citazione: blog hadrian.io]
Versioni interessate: WordPress 6.4 fino a 7.0.2 — corretto nella 7.0.3 con backport fino alla 4.7+.
Impatto: ~500 milioni di siti web al momento della divulgazione. [citazione: blog pwn.ai]
| Risorsa | Link |
|---|---|
| Divulgazione originale (pwn.ai) | pwn.ai/blog/xss2shell |
| Analisi tecnica di Hadrian | hadrian.io/blog/wordpress-xss2shell |
| Advisory WordPress (GHSA) | GHSA-52p2-r8wf-jcrf |
| Ricerca sull'attacco SOME (2022) | pwn.ai/blog/bypass-csp-using-wordpress |
| Rilascio WordPress 7.0.3 | wordpress.org/news/2026/08/wordpress-7-0-3-release |
Questo è un toolkit solo per il rilevamento. Non weaponizza la vulnerabilità — offre a ricercatori di sicurezza, cacciatori di bug bounty e blue team tutto ciò che serve per:
"Una stringa di versione dice quale livello di patch il codice dovrebbe avere.
Solo il comportamento del sanitizer della pagina di login dice se la vulnerabilità si attiva."
Gli host gestiti applicano silenziosamente backport di sicurezza senza aggiornare le stringhe di versione. I plugin di hardening del login sostituiscono completamente il messaggio di errore, eliminando il canale di riflessione anche su versioni non sicure. Gli scanner basati solo sulla versione producono falsi positivi e falsi negativi. Questo scanner invia un singolo probe benigno e classifica il comportamento effettivo del sanitizer.
git clone https://github.com/jakestone/xss2shell.git
cd xss2shell
pip install -r requirements.txt
# Passive — no probes sent to target, version + endpoint fingerprinting only
python3 xss2shell_mass.py -i domains.txt -o results
# Active — sends ONE benign failed-login per host (authorized assets only!)
python3 xss2shell_mass.py -i domains.txt -o results --active --workers 80
# Single target
python3 make_poc.py --target https://blog.example.com
# Batch from scanner output
python3 make_poc.py --from-results results.csv -o pocs/
Apri il file .poc.html generato nel tuo browser mentre registri un video → se alert() si attiva, hai catturato la prova dell'XSS pre-autenticazione.
xss2shell_mass.py)usage: xss2shell_mass.py [-h] -i INPUT [-o OUTPUT]
[--active] [--workers WORKERS]
[--timeout TIMEOUT] [--quiet]