
Blackbox, détecteur non-intrusif pour wp2shell (WordPress core pre-auth RCE, CVE-2026-63030 / CVE-2026-60137). Détection uniquement.
Détecteur blackbox, non intrusif pour wp2shell — la chaîne RCE sans authentification préalable dans le noyau WordPress divulguée le 2026-07-17 :
/wp-json/batch/v1) : une sous-requête dont le chemin échoue dans wp_parse_url() atterrit
dans le tableau de validation mais pas dans le tableau des gestionnaires, désynchronisant les deux.author__not_in de WP_Query,
accessible sans authentification via cette confusion de route.Enchaînées, elles permettent à un attaquant anonyme de forger un compte administrateur et de déposer un webshell plugin — sur une installation par défaut, sans plugin ni thème requis.
Analyse technique complète : https://own2pwn.fr/articles/appsec/wp2shell-wordpress-rce
Il détecte l'exposition. Il n'exploite rien. Chaque requête qu'il envoie est une requête normale en lecture seule qu'un crawler pourrait envoyer :
generator soit quand même identifiée : la
balise meta generator, les actifs du noyau ?ver= (sur les actifs de /wp-includes/ et
/wp-admin/, qui suivent le noyau), le générateur de flux RSS (?v=),
/wp-links-opml.php, les actifs de la page de connexion, /wp-includes/version.php,
readme.html, et l'index /wp-json/. Les sources sont recoupées et une
confiance (high quand ≥2 concordent) est rapportée.OPTIONS bénigne (et l'index
REST) — qui renvoie le schéma de route —
pour savoir si une atténuation périphérique est en place.Aucune requête ne déclenche la vulnérabilité. Pas de POST /wp-json/batch/v1, pas de
author_exclude, pas de SQL. Si la version du noyau est masquée, l'outil le dit plutôt
que de deviner (confirmer wp2shell aveuglément nécessiterait de l'exploiter).
Résilience : tentatives avec backoff, décodage gzip/deflate, repli https→http,
suivi de redirections inter-hôtes, un User-Agent semblable à un navigateur (modifiable),
et scan parallèle multi-cibles.
| Plage | Exposition | Corrigé dans |
|---|---|---|
| 6.8.0 – 6.8.5 | Injection SQL uniquement (pas de RCE) | 6.8.6 |
| 6.9.0 – 6.9.4 | RCE sans authentification |
pip install wp2shell-detect
Ou exécutez-le directement depuis les sources (fichier unique, sans dépendances, Python 3.8+) :
git clone https://github.com/own2pwn-fr/wp2shell-detect
./wp2shell-detect/wp2shell_detect.py https://example.com
Zéro dépendance. Python 3.8+.
wp2shell-detect https://example.com
wp2shell-detect --json https://a.example https://b.example
wp2shell-detect --targets hosts.txt --workers 16 # balayage parallèle
wp2shell-detect --discover https://front.example # suivre un WP sans tête
(Installé depuis PyPI, la commande est wp2shell-detect. Depuis un clone, appelez
./wp2shell_detect.py avec les mêmes arguments.)
Options : --json, --discover, --workers N, --timeout S, --user-agent UA,
--insecure, --targets FILE. Code de sortie 2 si une cible est trouvée vulnérable
(pratique dans les tâches CI / cron).
Les sites modernes servent souvent un front JS/Next.js sur www. et gardent WordPress sur un
hôte voisin (wordpress., wp., cms.). Scanner www. renvoie alors
not WordPress — correctement, car cet hôte n'est pas WordPress. Pointez le scan sur
l'hôte WordPress, ou passez --discover pour que l'outil le trouve et le scanne à partir du
CSP / en-tête Link / URL d'actifs du front automatiquement.
Exemple :
[!!] https://blog.example.com -> VULNÉRABLE (RCE sans authentification)
version : 6.9.3 (balise meta generator=6.9.3, générateur de flux RSS=6.9.3)
batch : accessible (/wp-json/batch/v1)
cves : CVE-2026-63030, CVE-2026-60137
note : WordPress 6.9.3 est dans la plage RCE sans authentification de wp2shell. Point de terminaison REST batch accessible — aucune atténuation périphérique.
Mettez à jour le noyau WordPress vers 6.8.6 / 6.9.5 / 7.0.2 ou ultérieur. Si la mise à jour
doit attendre, bloquez la route batch au niveau périphérique (/wp-json/batch/v1 et
?rest_route=/batch/v1) ou via un plugin « must-use » accrochant rest_pre_dispatch,
puis auditez les comptes administrateurs indésirables et les plugins inconnus.
Réservé aux évaluations autorisées. L'exécution de cet outil contre des systèmes que vous ne possédez pas ni n'êtes mandaté pour tester peut être illégale dans votre juridiction. Vous êtes responsable de la manière dont vous l'utilisez.
MIT. Voir LICENSE. Par own2pwn.
Link ou
des URL d'actifs — courant avec les fronts headless/Next.js), l'outil le signale,
et --discover le scanne aussi.| 6.9.5 |
| 7.0.0 – 7.0.1 | RCE sans authentification | 7.0.2 |