
RCE non authentifiée dans WordPress Core (CVE-2026-63030, CVE-2026-60137)
__ ______ ____ ____ _ _ _____ _ _ \ \ / / _ \___ \/ ___|| | | | ____| | | | \ \ /\ / /| |_) |__) \___ \| |_| | _| | | | | \ V V / | __// __/ ___) | _ | |___| |___| |___ \_/\_/ |_| |_____|____/|_| |_|_____|_____|_____|wp2shell-checker | Détecteur de désynchronisation de l'API Batch WordPress
Détecteur de la RCE avant authentification de l'API REST Batch du noyau de WordPress
Créé par 0xjessie21 — Cybersecurity ILCS
| Signature | wp2shell / WP Core REST Batch API Desync |
| Sévérité | 9.8 CRITICAL — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Versions affectées | WordPress 6.9.0-6.9.4 et 7.0.0-7.0.1 |
| Corrigé dans | 6.9.5, 7.0.2 |
| Préconditions | Aucune — non authentifié, aucun plugin, configuration par défaut |
| Mode | Non destructif / sonde en lecture seule |
Capture d'écran de l'outil détectant une instance WordPress vulnérable lors d'un engagement VAPT interne autorisé.

Cet outil est strictement réservé aux tests de sécurité autorisés et à la vérification défensive.
| Utilisez uniquement contre des instances WordPress que vous possédez, ou pour lesquelles vous disposez d'une autorisation écrite explicite de test (par ex. un périmètre VAPT interne approuvé). | |
Cette sonde est conçue pour être non destructive — elle cible un ID de catégorie inexistant (0) et s'arrête au niveau de la couche de vérification des permissions ; aucune donnée n'est donc jamais créée, modifiée ou supprimée. | |
| Ne modifiez pas la charge utile (par ex. remplacez l'ID de catégorie par un ID réel, ou pointez-la vers d'autres routes REST) pour tenter une exploitation réelle. Cela transformerait l'outil de détecteur en exploit armé — ce pour quoi il n'est explicitement pas conçu et qu'il ne prend pas en charge. | |
| Ne publiez pas, ne redistribuez pas et n'exécutez pas cet outil contre des systèmes hors de votre périmètre autorisé. Une utilisation non autorisée contre des systèmes tiers peut violer la loi ITE (UU ITE) en Indonésie et les lois équivalentes sur les abus informatiques ailleurs. | |
| Fourni en l'état, sans aucune garantie. L'auteur et toute organisation associée déclinent toute responsabilité en cas d'utilisation abusive, de dommages ou de conséquences juridiques découlant de l'utilisation de cet outil. |
En utilisant cet outil, vous acceptez d'être seul responsable de la conformité de votre utilisation avec la loi applicable et les politiques d'autorisation de votre organisation.
L'API REST Batch du noyau de WordPress (/wp-json/batch/v1) maintient trois tableaux parallèles synchronisés lors de la résolution d'un lot de sous-requêtes. Une sous-requête volontairement malformée les désynchronise — ce qui entraîne l'envoi de chaque sous-requête suivante avec le mauvais gestionnaire et la mauvaise fonction de rappel de permissions.
Cet outil envoie une seule requête batch spécialement conçue et n'inspecte que les codes de réponse, sans jamais franchir le seuil d'une opération modifiant l'état.
| # | Sous-requête | Objectif |
|---|---|---|
| 0 | POST http://: | Volontairement malformée — déclenche la désynchronisation de l'index |
| 1 | DELETE /wp/v2/categories/0 | Capteur sûr — l'ID de catégorie 0 n'existe jamais |
| 2 | POST /wp/v2/block-renderer/core/paragraph | Gestionnaire de référence utilisé pour détecter la fuite |
Logique de verdict
| Résultat | Verdict |
|---|---|
block_cannot_read | VULNÉRABLE — la vérification des permissions a fuité depuis le gestionnaire block-renderer |
rest_term_invalid | CORRIGÉ — le gestionnaire des catégories a répondu correctement |
| aucun marqueur trouvé | NON CONCLUSIF — WAF, API désactivée, ou site non WordPress |
De plus, l'outil effectue une prise d'empreinte passive WAF/CDN à partir des en-têtes de réponse :
Cloudflare · Sucuri · Akamai · AWS CloudFront · Imperva · Fastly · F5 BIG-IP · Wordfence
# Analyse de base
./wp2shell_checker.py https://your-site.com
# Plusieurs cibles en une seule exécution
./wp2shell_checker.py https://site1.com https://site2.com https://site3.com
# Délai d'expiration personnalisé
./wp2shell_checker.py https://your-site.com --timeout 20
# Afficher la requête/réponse brute complète (charge utile, en-têtes, corps)
./wp2shell_checker.py https://your-site.com --raw
# Désactiver les couleurs/l'animation (pour journaliser dans un fichier)
./wp2shell_checker.py https://your-site.com --no-color > scan_report.txt
Toutes les options
| Option | Description |
|---|---|
targets | Une ou plusieurs URL de base à analyser (obligatoire) |
--timeout N | Délai d'expiration des requêtes en secondes (défaut : 10) |
--no-color | Désactive les couleurs ANSI et l'animation d'analyse |
--raw | Affiche la charge utile et les en-têtes bruts complets de la requête/réponse |
Si une cible revient VULNÉRABLE :
7.0.2 (ou 6.9.5 sur la branche 6.9). Vérifiez que la mise à jour a bien été appliquée./wp-json/batch/v1 et ?rest_route=/batch/v1 au niveau de votre WAF/pare-feu inverse — les deux formes doivent être bloquées.| wp2shell.com | vérificateur original et avis de sécurité, Searchlight Cyber |
| Hadrian Security — Analyse technique | analyse des causes racines |
Ce projet est sous licence MIT — voir le fichier LICENSE pour plus de détails.
Cybersecurity ILCS · conçu pour un usage défensif interne