
Preuve de concept exploitant une XSS pré-authentification sur WordPress pour aboutir à une RCE via le clobbering du DOM, l'abus de l'API REST et le téléversement d'un plugin malveillant en vue d'une exécution côté serveur. Tests autorisés uniquement.
Miroir de distribution HackSpeak. Ce dépôt est un miroir de distribution du PoC éducatif XSS2Shell (CVE-2026-64638) publié par WordSec, le code est identique à celui de l'amont ; l'amont est sous licence MIT, Copyright (c) 2026 WordSec.
⚠️ Réservé à la recherche en sécurité et aux tests autorisés, à exécuter uniquement sur des sites WordPress que vous possédez ou pour lesquels vous disposez d'une autorisation écrite d'évaluation ; le PoC génère et nettoie des publications temporaires, ne l'utilisez pas contre des administrateurs tiers ou des systèmes de production.
XSS2Shell (CVE-2026-64638) est une XSS réfléchie pré-auth sur la page de connexion de WordPress (wp-login.php), qui peut être élevée via une chaîne complète en exécution de code PHP côté serveur (RCE).
strip_tags() et WordPress KSES (wp_kses_post()) — en insérant une espace entre < et le nom de la balise (ex. < area), la première la traite comme du texte brut conservé, la seconde l'analyse comme un élément HTML valide (<area>/<div>/<button> étant tous sur la liste blanche) ;ajaxurl → le user-profile.js intégré à la page de connexion déclenche automatiquement un POST jQuery → REST API JSONP (_jsonp) → Same Origin Method Execution (SOME, Paulos Yibelo 2022) → clic inter-fenêtres sur le bouton d'autorisation Application Password de l'administrateur → vol des identifiants API → publication d'une page contenant <script> → téléversement d'un ZIP de plugin malveillant → exécution PHP directe (sans activation) ;python3 xss2shell_poc.py -t http://wordpress.test --lhost 192.168.1.100 --lport 8080 -c "whoami"
Dépendances : Python 3.7+, zéro paquet tiers ; nécessite qu'un administrateur soit connecté au site cible et ouvre l'URL de l'attaquant (une seule interaction).
| Paramètre | Description |
|---|
-t, --target | Adresse de base de WordPress (inclut http/https, normalisation automatique de la barre oblique finale) |
-c, --command | Commande à exécuter une fois le shell prêt |
--lhost / --lport | Adresse/port d'écoute (lport 0 = aléatoire) |
--keep | Conserver la page de publication temporaire (suppression par défaut) |