
Template Nuclei per la rilevazione non intrusiva di XSS2Shell, un parser differenziale pre-autenticazione nel WordPress Core che consente l'iniezione di elementi DOM nella pagina di login, fungendo da base per una catena XSS → RCE.
Template Nuclei per il rilevamento non intrusivo di XSS2Shell, un parser differenziale pre-autenticato nel WordPress Core che consente l'iniezione di elementi DOM nella pagina di login, fungendo da base per una catena XSS → RCE.
⚠️ Questo template rileva solo il difetto di sanitizzazione (fase di riflesso del marcatore nella risposta HTML). Non esegue l'intera catena di sfruttamento (DOM clobbering, JSONP/SOME, furto di Application Password o upload di plugin). Uso rigoroso su asset con autorizzazione esplicita.
Il WordPress Core, nel renderizzare il messaggio di errore "utente non registrato" in wp-login.php, inserisce lo username inviato in HTML senza escape coerente tra due filtri distinti:
wp_strip_all_tags() (basato su strip_tags() del PHP) riconosce un tag solo se < è seguito immediatamente da una lettera — uno spazio dopo < fa sì che il filtro tratti il contenuto come testo puro.wp_kses_post(), applicato subito dopo, usa il proprio tokenizer, che tollera tale spazio e ricostruisce la stringa come un elemento HTML reale (<area>, <div> e <button> sono nella allowlist).Il risultato è che un attaccante non autenticato può iniettare elementi DOM arbitrari nella pagina di login che — combinati con gli handler legacy dello script user-profile.js, DOM clobbering della variabile ajaxurl e JSONP della REST API — consentono l'esecuzione di JavaScript nell'origine del WordPress e, a catena completa, RCE sull'account di un amministratore.
Scoperta e divulgata da pwn.ai. Corretto in WordPress 7.0.3 (backport fino al ramo 4.7).
Il template invia una richiesta POST a /wp-login.php con un payload nel campo log contenente:
< area id=xss2shell-marker href=/x>< div id=xss2shell-div>
Se WordPress è vulnerabile, wp_kses_post() ricostruisce queste stringhe come elementi HTML reali nella risposta. Il template utilizza due matcher in regex (condizione and) per confermare che entrambi i tag appaiano ricostruiti — riducendo i falsi positivi di WAF che riflettono l'input parzialmente.
# Validare la sintassi del template
nuclei -t CVE-2026-64638.yaml -validate
# Eseguire contro un singolo target
nuclei -t CVE-2026-64638.yaml -u https://target.com
# Eseguire contro un elenco di target
nuclei -t CVE-2026-64638.yaml -l targets.txt
# Debug (vedi request/response completi)
nuclei -t CVE-2026-64638.yaml -u https://target.com -debug-req -debug-resp
| Risultato | Significato |
|---|---|
| Match positivo | I tag iniettati sono stati riflessi come HTML reale → parser differenziale presente → target vulnerabile (non corretto) |
| Nessun match | Il payload è stato escapato o rimosso → target corretto (WordPress ≥ 7.0.3) o protetto da WAF/proxy che normalizza gli spazi all'interno dei tag |
Aggiornare a WordPress 7.0.3 o superiore. La patch è stata retroportata a tutti i rami mantenuti a partire dalla 4.7.
Questo template è fornito a scopo di ricerca sulla sicurezza e test di penetrazione autorizzati. L'uso contro sistemi senza autorizzazione esplicita è illegale. L'autore non si assume alcuna responsabilità per un uso improprio.
Renzi