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
xss2shell-check — Détecteur non destructif pour CVE-2026-64638 (XSS2Shell) — primitive de réflexion XSS pré-authentification WordPress | Kitploit
Outils/GitHubGitHub/sanaullahamanullah/xss2shell-check
Outils DéfensifsScanners de VulnérabilitésScanners de Vulnérabilités WebAnalyse des VulnérabilitésCollecte d'InformationsSécurité WebTests d'Intrusion
GitHubsanaullahamanullah/xss2shell-check

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

xss2shell-check

Détecteur non destructif pour CVE-2026-64638 (XSS2Shell) — primitive de réflexion XSS pré-authentification WordPress

Voir le dépôt
il y a 4 joursPas encore vérifié

xss2shell-check

Détecteur non destructif et sans dépendances de la primitive de réflexion CVE-2026-64638 (« XSS2Shell ») dans wp-login.php de WordPress.

Contexte

CVE-2026-64638 est une XSS réfléchie pré-authentification dans le cœur de WordPress, divulguée par PWN.AI le 2026-08-07 (CVSS 8.9, CWE-79) et corrigée dans la version 7.0.3 avec des rétroportages vers toutes les branches maintenues (6.9.6, 6.8.7, 6.7.6, 6.6.6, 6.5.9, …).

La cause racine est une différence d’analyse syntaxique entre strip_tags() de PHP et l’assainisseur KSES de WordPress :

  • strip_tags() refuse de reconnaître une balise lorsque des espaces suivent <, donc un nom d’utilisateur comme < area id=x> survit en tant que texte brut.
  • KSES n’a pas cette règle et réanalyse le texte en un élément vivant <area id="x"> dans le message d’erreur de connexion.

Cela produit une injection DOM choisie par l’attaquant avec des attributs id/class/href choisis — la primitive derrière la chaîne multi-étapes publiée (dom clobbering → REST JSONP → vol de mot de passe d’application → téléversement d’extension → RCE contre une victime administrateur connectée).

Ce que fait cet outil

Deux sondes non destructives (un échec de connexion avec un nom d’utilisateur marqueur aléatoire) :

  1. RAW_HTML — <b>marker</b> apparaît non échappé dans la réponse d’erreur.
  2. AREA_BYPASS — < area id=marker> survit à strip_tags() et réapparaît comme élément vivant/normalisé (p. ex. area id="marker") dans la réponse.

Aucun payload n’exécute quoi que ce soit ; l’outil mesure uniquement si le HTML de l’attaquant est rendu comme DOM vivant. Extras facultatifs :

  • --version — identifier la version du cœur via la balise <generator> du flux.
  • --jsonp — vérifier que l’enveloppe REST JSONP (_jsonp/_envelope) utilisée par la chaîne publiée est accessible.

Utilisation

root@kitploit:~
python3 xss2shell_check.py https://example.com
python3 xss2shell_check.py --jsonp --verbose https://example.com
python3 xss2shell_check.py --version https://example.com
python3 xss2shell_check.py --json https://example.com

Python 3.6+, bibliothèque standard uniquement. Aucune dépendance.

Codes de sortie

CodeSignification
0VULNÉRABLE (primitive de réflexion présente)
1CORRIGÉ / NON VULNÉRABLE
2ERREUR (inaccessible, défi WAF, réponse inattendue)

Matrice de détection

Remarques sur la détection

  • La signature vulnérable est l’élément normalisé (<area id="…">). Le style de guillemets varie selon la génération de KSES (ancien analyseur personnalisé : <area id=x> ; DOMDocument : <area id="x"> / <area id="x" />), donc toutes les formes sont recherchées. Un passage brut de < area …> sans réanalyse est un texte inerte dans le navigateur, pas la primitive — il est signalé comme RAW_TEXT_ONLY et ne déclenche pas de faux positif.
  • L’étiquette de version est fournie à titre indicatif uniquement : les rétroportages corrigés (6.9.6, 6.8.7, 6.7.6, 6.6.6, 6.5.9, 4.7.34, …) tombent dans la série 4.7.0–7.0.2 et sont pris en compte par branche ; le contrôle de réflexion reste la référence.
  • Requêtes : 1 GET (page de connexion — capture également les cookies WAF/sticky et l’URL effective après redirections) + 2 POST avec des marqueurs aléatoires uniques. Les redirections POST sont relancées en POST. Les blocages WAF apparaissent comme sortie 2, pas comme un silencieux « non vulnérable ».
  • Un faux négatif est possible si un filtre login_errors personnalisé ou un CDN/WAF réécrit les réponses, ou si le message d’erreur de connexion ne réfléchit jamais le nom d’utilisateur.

Avertissement

Tests de sécurité autorisés uniquement. Cet outil est destiné exclusivement aux tests de systèmes que vous possédez ou pour lesquels vous disposez d’une autorisation écrite explicite. Les tests non autorisés sont illégaux dans la plupart des juridictions.

Références

  • Criminal IP — WordPress Vulnerability CVE-2026-64638: Login Page XSS to Server-Side Code Execution
  • CUHK ITS — WordPress Pre-Authenticated XSS Vulnerability "XSS2Shell" (CVE-2026-64638)

Licence

MIT

Télécharger l’outil
OptionRôle
--versionidentifier la version du cœur (balise generator du flux, méta page d’accueil en secours)
--jsonpvérifier également que l’enveloppe REST JSONP (_jsonp/_envelope) est accessible
-v, --verboseafficher des extraits de réponse des sondes (preuves pour les rapports)
--jsonrésultat JSON lisible par machine (CI / automatisation)
Comportement observéVerdictSortie
<b>marker</b> renvoyé non échappéRAW_HTML — vulnérable0
< area id=marker> réanalysé en un <area id="marker"> vivant (toute forme de guillemets / forme vide)AREA_BYPASS — vulnérable0
Nom d’utilisateur échappé en HTMLESCAPED — non vulnérable1
Balises supprimées, le texte resteSTRIPPED — non vulnérable1
< area …> brut traverse mais n’est jamais réanalyséRAW_TEXT_ONLY — texte inerte, non vulnérable1
Aucune réflexion du toutNOT_REFLECTED — non vulnérable1
Sonde bloquée (HTTP ≥ 400 / page de défi) ou cible inaccessibleERROR2