
Scanner de détection non intrusif pour la chaîne RCE pré-authentification wp2shell de WordPress (CVE-2026-63030 + CVE-2026-60137). Détection uniquement, pas d'exploitation.
Scanner de détection non-intrusif pour les récentes vulnérabilités core de WordPress — incluant la chaîne RCE pré-authentification wp2shell.
wp2shell_scanner.py identifie la version du noyau WordPress d'un site et lit sa
surface d'API REST publiquement annoncée, puis classe chaque CVE core suivie
indépendamment par rapport à la version détectée. Les verdicts sont conscients de la branche — par exemple un
site en 6.8.x est correctement signalé comme exposé à la CVE d'injection SQL mais pas à la
chaîne RCE complète. Il détecte uniquement : aucune charge utile d'exploitation n'est jamais envoyée. Fichier unique, une seule
dépendance (requests), codes de sortie adaptés à l'CI et rapports HTML / JSON / e-mail prêts pour le client.
⚠️ Utilisation autorisée uniquement. Scannez les systèmes que vous possédez ou pour lesquels vous êtes explicitement autorisé (par écrit) à tester. Le scanner envoie un
User-Agentd'identification afin que les blue teams puissent attribuer le trafic — il ne se cache pas.
| CVE | Faiblesse | Accès | Noyau affecté | Corrigé dans |
|---|---|---|---|---|
| CVE-2026-63030 — wp2shell | CWE-436 — Confusion de route batch REST → RCE (Critique ; CVSS 9.8 WPScan CNA / 7.5 CISA-ADP ; GHSA-ff9f-jf42-662q) | Non authentifié | 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.9.5, 7.0.2 |
| CVE-2026-60137 | CWE-89 — Injection SQL dans WP_Query author__not_in (Modéré seul, CVSS 5.9 ; Critique en chaîne ; GHSA-fpp7-x2x2-2mjf) | Non authentifié | 6.8.0–6.8.5, 6.9.0–6.9.4, 7.0.0–7.0.1 | 6.8.6, 6.9.5, 7.0.2 |
| CVE-2026-3906 | CWE-862 — API REST des notes manque d'autorisation (Modéré, CVSS 4.3, GHSA-6x83-fcf5-r65g) | Abonné+ | 6.9.0–6.9.1 | 6.9.2 |
La chaîne RCE wp2shell = CVE-2026-63030 + CVE-2026-60137 ensemble → exécution de code à distance
sans authentification sur une installation par défaut. Le scanner signale la chaîne comme exposée
uniquement lorsque les deux CVE sont classées comme vulnérables pour la version détectée.
Nuances de branche que le scanner gère correctement :
6.8.x porte l'injection SQL (CVE-2026-60137) uniquement — pas la chaîne RCE.6.9, CVE-2026-3906 (Notes) est corrigée dans 6.9.2, mais la chaîne wp2shell
n'est pas fermée avant 6.9.5. Ainsi 6.9.2/6.9.4 sont lus corrigés pour le bug des Notes,
mais restent vulnérables à la chaîne RCE — le scanner ne recommande donc que
6.9.5 ou ultérieur sur cette branche, jamais 6.9.4.Important sur le plan opérationnel : des articles techniques et un PoC fonctionnel pour wp2shell sont déjà publics. La détection de version est désormais le minimum absolu — la priorité est la correction. La mise à jour ferme le chemin vulnérable mais ne supprime pas une porte dérobée installée avant le correctif — d'où l'étape d'évaluation de compromission dans le rapport.
Ceci est un scanner de version du noyau. Les CVE de plugins et de thèmes — la grande majorité du catalogue WPScan / Patchstack — nécessitent un flux live et organisé et une énumération de version par plugin, et sont intentionnellement hors du périmètre ici. Dans son domaine (CVE récentes du noyau WordPress), il vise à être précis et exact sur les branches plutôt qu'à dupliquer une base de données de vulnérabilités commerciale.
<meta name="generator"> sur la page d'accueil/readme.html<generator> des flux RSS / Atom/wp-links-opml.php (OPML)/wp-json/ pour voir si WordPress
annonce l'espace de noms batch/v1 dans son index REST. Cela confirme que l'espace de noms est
enregistré, pas que le point de terminaison est atteignable via un WAF.
Aucune requête batch et aucune charge utile ne sont envoyées.Il n'exploite rien. Aucune charge utile d'injection SQL, aucune requête de confusion de route batch, aucune tentative d'exécuter du code ou de lire des données. La détection est basée sur la version plus une lecture passive de la surface d'API publiquement annoncée.
pip install requests
# cible unique
python3 wp2shell_scanner.py -t https://site.example --authorized
# liste de cibles (une par ligne, # commentaires autorisés)
python3 wp2shell_scanner.py -T scope.txt --authorized -o ./reports
# prévisualiser les formats de sortie avec des données synthétiques — pas de réseau, pas d'authentification nécessaire
python3 wp2shell_scanner.py --demo -o ./reports
| Option | Signification |
|---|---|
-t, --target | URL ou hôte cible unique |
-T, --targets-file | Fichier avec une cible par ligne |
--demo | Générer un rapport/e-mail EXEMPLE à partir de données synthétiques (pas de réseau) |
-o, --output-dir | Répertoire de sortie (par défaut ./wp2shell_reports) |
--formats | Liste séparée par des virgules : json,html,email (par défaut : tous) |
--authorized | Barrière d'autorisation — requis pour les scans en direct |
--timeout | Délai d'attente HTTP en secondes (par défaut 12) |
--delay | Secondes entre les cibles (soyez poli ; par défaut 1.0) |
--insecure | Ne pas vérifier les certificats TLS |
--quiet | Supprimer le résumé console |
L'option --authorized est une barrière d'autorisation explicite — les scans en direct refusent de s'exécuter
sans elle.
| Code | Signification |
|---|---|
2 | Au moins une cible vulnérable |
1 | Au moins une cible non concluante / erreur |
0 | Propre (corrigé / non affecté / pas WordPress) |
Le destinataire de l'e-mail de notification est la constante CSSLTD_CONTACT près du haut du
script (par défaut [email protected]). Modifiez-la pour votre propre adresse de réception.