
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.
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
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.
Le répertoire examples/ contient une sortie synthétique (--demo) pour un
hôte vulnérable fictif (example.com, WordPress 6.9.1 — exposé aux trois CVE suivies) :
wp2shell_report_example.com.html — le rapport HTML prêt pour le clientwp2shell_example.com.json — l'enregistrement JSONwp2shell_email_example.com.txt — l'e-mail de notification provisoireCeux-ci sont générés à partir de données fabriquées pour illustrer le format du rapport. Ils ne sont pas le résultat du scan d'un site réel.
6.9.5+ est propre — 6.9.4 a encore la chaîne wp2shell.)uploads/, wp-config.php, wp-cron et comptes administrateurs ; vérifiez l'intégrité des fichiers par rapport au noyau connu bon./wp-json/batch/v1).Cet outil est destiné uniquement aux tests de sécurité autorisés. Vous êtes responsable de vous assurer que vous avez la permission de scanner toute cible. Le scan non autorisé peut être illégal. Les auteurs déclinent toute responsabilité en cas d'utilisation abusive.
| 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 |
| 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 |
| Verdict | Signification |
|---|
VULNERABLE | La version détectée se trouve dans une plage affectée — corrigez immédiatement |
PATCHED | Sur une version corrigée ; non exposé aux CVE suivies |
NOT_AFFECTED | Version antérieure à la première faille suivie (< 6.8.0 — CVE-2026-60137) |
UNKNOWN | La version n'a pas pu être confirmée, les vecteurs divergent, ou une version pré-release a été détectée — vérifiez manuellement |
NOT_WORDPRESS | Aucune empreinte WordPress trouvée |