Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
POC-WP-XSS2Shell-CVE-2026-64638 — PoC fonctionnel de CVE-2026-64638 (XSS2Shell) : chaîne XSS pre-auth vers RCE dans WordPress Core. Laboratoire Docker + serveur attaquant Python + analyse technique et atténuation. | Kitploit
Outils/GitHubGitHub/686f6c61/poc-wp-xss2shell-cve-2026-64638
Analyse des VulnérabilitésExploitationExploitation d'Applications WebApprentissage et ÉducationDéveloppement de Charges UtilesLabs et Pratique
GitHub686f6c61/poc-wp-xss2shell-cve-2026-64638

POC-WP-XSS2Shell-CVE-2026-64638

PoC fonctionnel de CVE-2026-64638 (XSS2Shell) : chaîne XSS pre-auth vers RCE dans WordPress Core. Laboratoire Docker + serveur attaquant Python + analyse technique et atténuation.

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt
1il y a 13 joursPas encore vérifié

XSS2Shell — PoC de CVE-2026-64638

Preuve de concept éducative de la chaîne XSS2Shell (CVE-2026-64638), vulnérabilité pré-authentification XSS → RCE dans WordPress Core découverte de manière autonome par pwn.ai et divulguée le 7 août 2026.


Table des matières

  1. Résumé exécutif
  2. Avis légal
  3. Architecture de la chaîne
  4. Prérequis
  5. Structure du dépôt
  6. Guide de démarrage rapide
  7. Vérification de l'exploitation
  8. Documentation complémentaire

Résumé exécutif

CVE-2026-64638 est une vulnérabilité de type cross-site scripting (XSS) réfléchi, pré-authentification, dans l'écran de connexion de WordPress (wp-login.php). Elle affecte toutes les versions de WordPress sous maintenance antérieures à la 7.0.3, publiée le 6 août 2026 en tant que security release d'urgence. Un score CVSS v4.0 de 8.9 lui a été attribué.

La chaîne baptisée XSS2Shell démontre comment, à partir uniquement d'une tentative de login échouée avec un username manipulé, un attaquant peut :

  1. Injecter des éléments DOM vivants dans la page de login en exploitant une divergence entre deux analyseurs syntaxiques de PHP (strip_tags) et de WordPress (wp_kses_post).
  2. Détourner le flux d'exécution du JavaScript propre à WordPress (user-profile.js) pour effectuer une requête REST JSONP vers la même origine.
  3. Convertir la réponse JSONP en exécution de JavaScript dans l'origine de WordPress via jQuery.globalEval().
  4. Enchaîner le tout avec la technique Same Origin Method Execution (SOME) de Paulos Yibelo (2022) pour cliquer automatiquement sur le bouton d'approbation des Application Passwords dans la session authentifiée d'un administrateur.
  5. Capturer la crédential Application Password résultante, publier une page avec du JavaScript malveillant et, finalement, téléverser un plugin au format ZIP qui exécute du PHP sur le serveur.

Le résultat est l'exécution de code à distance (RCE) sur le serveur WordPress, sous l'utilisateur du processus web (typiquement www-data), à partir d'un unique click de l'administrateur sur un lien contrôlé par l'attaquant.


Avis légal

Ce dépôt contient du matériel strictement éducatif et défensif.

  • Objectif : démontrer la chaîne d'exploitation à des fins de formation, d'audit personnel et de validation de patches.
  • Utilisation autorisée : exécutez-le uniquement contre des installations WordPress qui vous appartiennent ou pour lesquelles vous disposez d'une autorisation écrite explicite.
  • Interdit : toute utilisation contre des systèmes tiers sans consentement. L'auteur du dépôt décline toute responsabilité en cas d'utilisation abusive du matériel inclus ici.
  • Responsabilité : l'opérateur est seul responsable du respect de la législation applicable (LOPD/RGPD en Espagne, CFAA aux États-Unis, etc.).

La PoC est fournie avec un environnement Docker autonome dont l'unique finalité est de servir de cible locale et reproductible.


Architecture de la chaîne

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────┐
│  1. XSS pré-auth dans wp-login.php                                   │
│     log=< area id=ajaxurl href=/?rest_route=/&_jsonp=...>           │
│     (divergence strip_tags ↔ wp_kses_post)                          │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  2. user-profile.js déclenche .trigger('click')                      │
│     DOM clobbering de ajaxurl → requête POST vers l'origine         │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  3. REST JSONP répond application/javascript                        │
│     jQuery.globalEval() exécute le callback dans l'origine WP       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │  callback = window.opener
                                           │            .approve.click
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  4. SOME : click() franchit la frontière opener→admin               │
│     authorize-application.php#approve est cliqué dans la session admin │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  5. WP crée Application Password → redirige vers success_url        │
│     L'attaquant capture user_login + password dans callback.php     │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │  HTTP Basic REST
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  6. POST /wp-json/wp/v2/pages  → publie une page avec <script>      │
│     L'admin visite la page → JS dans l'origine WP avec session admin │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  7. fetch update.php?action=upload-plugin  → téléverse payload.zip  │
│     Le PHP du plugin est accessible directement sans l'activer      │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  8. RCE confirmée : GET /wp-content/plugins/payload/shell.php       │
└─────────────────────────────────────────────────────────────────────┘

Prérequis

La PoC est conçue pour fonctionner sur macOS ou Linux avec :

  • Docker 24+ et Docker Compose v2 (pour la cible locale).
  • Python 3.9+ (pour l'orchestrateur optionnel).
  • PHP 8.1+ avec l'extension zip (pour construire le payload manuellement, optionnel ; le ZIP déjà construit est inclus dans payload/).
  • Un navigateur moderne basé sur Chromium ou Firefox.

Il n'est pas nécessaire d'installer WordPress manuellement : le docker-compose.yml démarre un WordPress 7.0.2 vulnérable (la dernière version antérieure au correctif) avec MariaDB.


Structure du dépôt

root@kitploit:~
POC XSS2Shell (CVE-2026-64638)/
├── README.md                       ← Ce fichier
├── docker-compose.yml              ← Cible : WordPress 7.0.2 + MariaDB
├── .env.example                    ← Variables de configuration
├── exploit.py                      ← Orchestrateur en Python (optionnel)
├── attacker/                       ← Infrastructure de l'attaquant
│   ├── index.html                  ← Page leurre avec la chaîne SOME
│   ├── callback.php                ← Récepteur de l'Application Password
│   └── server.py                   ← Serveur statique + PHP embarqué
├── payload/                        ← Plugin ZIP malveillant
│   ├── build_payload.py            ← Générateur du ZIP
│   ├── shell.php                   ← Webshell minimal
│   └── payload.zip                 ← ZIP préconstruit (prêt à l'emploi)
└── docs/
    ├── ANALISIS.md                 ← Analyse technique détaillée
    └── MITIGACION.md               ← Guide de mitigation et de durcissement

Guide de démarrage rapide

1. Démarrer la cible (WordPress 7.0.2 vulnérable)

root@kitploit:~
cp .env.example .env
docker compose up -d

WordPress sera accessible sur http://localhost:8080. Suivez l'assistant d'installation et créez un utilisateur administrateur (par exemple admin / admin-password).

Le Dockerfile ancre l'image sur wordpress:7.0.2-php8.2-apache, qui est la dernière version antérieure au correctif 7.0.3.

2. Démarrer l'infrastructure de l'attaquant

root@kitploit:~
# Dans un autre terminal, dans attacker/
python3 server.py

Le serveur attaquant écoute sur http://localhost:9000 et expose :

  • / → index.html (la page leurre).
  • /callback.php → récepteur de l'Application Password.

3. Simuler le click de l'administrateur

  1. Connectez-vous en tant qu'administrateur sur http://localhost:8080/wp-admin.
  2. Dans la même session du navigateur, ouvrez un nouvel onglet et visitez http://localhost:9000/.
  3. Vous verrez un unique bouton « Approve Application ». En cliquant dessus, toute la chaîne s'exécute automatiquement.

4. Observer la capture de crédentials

Dans le terminal où tourne server.py, une ligne du type suivant apparaîtra :

root@kitploit:~
[+] Application Password reçue pour l'utilisateur 'admin' :
    XXXX XXXX XXXX XXXX XXXX XXXX

La crédential est également enregistrée dans attacker/captured_credentials.txt.

5. Voir le RCE

Après quelques secondes, l'orchestrateur de index.html aura :

  • Publié une page qui exécute du JavaScript dans l'origine de WordPress.
  • Téléversé le plugin payload.zip dans wp-content/plugins/payload/.

Vérifiez l'exécution de code avec :

root@kitploit:~
curl -sI http://localhost:8080/wp-content/plugins/payload/shell.php

Un en-tête Hacked: true et un corps JSON confirment le RCE.


Vérification de l'exploitation

Une fois la chaîne terminée, les endpoints suivants servent de preuve :

RessourcePreuve attendue
GET /wp-content/plugins/payload/shell.phpEn-tête Hacked: true + JSON {"rce":true,"user":"www-data"}

Documentation complémentaire

  • docs/ANALISIS.md — Analyse technique détaillée de chaque phase de la chaîne, avec références au code source de WordPress.
  • docs/MITIGACION.md — Mitigations recommandées, durcissement et vérification du patch 7.0.3.

Crédits

  • Recherche originale et divulgation : pwn.ai — https://pwn.ai/blog/xss2shell
  • Technique SOME sous-jacente : Paulos Yibelo (2022), publiée sur le blog de pwn.ai et nominée aux Top Web Hacking Techniques de 2022.
  • PoC et empaquetage de ce dépôt : travail personnel à des fins éducatives.

Licence

Distribué sous licence MIT. Consultez le fichier LICENSE pour plus de détails.

Télécharger l’outil
attacker/captured_credentials.txtApplication Password capturée
wp-admin → Applications → Mots de passe d'applicationUne nouvelle entrée nommée « SomeApp »