WP2Shell - CVE-2026-63030

Date de publication :

Il s'agit d'une vulnérabilité de confusion de route dans l'endpoint REST API batch (/wp-json/batch/v1), au sein de la fonction WP_REST_Server::serve_batch_request_v1().

WordPress est un système de gestion de contenu open source utilisé pour créer, publier et administrer des sites web, dont le cœur logiciel (Core) peut être enrichi par des thèmes et des extensions tierces.

Lorsqu'une sous-requête d'un lot échoue à la validation, l'objet WP_Error produit est ajouté au tableau interne $validation[] mais pas au tableau parallèle $matches[] utilisé pour le routage, ce qui crée un décalage d'index d'une position. La sous-requête « i » est alors dispatchée avec le gestionnaire prévu pour la sous-requête « i+1 ». Cette confusion permet de faire passer une requête vers un gestionnaire non destiné à la recevoir et de contourner le contrôle d'authentification qui protège normalement l'injection SQL du paramètre author__not_in de WP_Query (CVE-2026-60137).

Elle permet à un attaquant distant non authentifié, en chaînant cette confusion avec l'injection SQL, d'obtenir une exécution de code arbitraire sur le serveur.

Informations

La faille est activement exploitée : Oui

Un correctif existe : Oui

Une mesure de contournement existe : Oui

Risques

Exécution de code arbitraire (à distance)

Exploitation

La vulnérabilité exploitée est du type
CWE-436 : Interpretation Conflict

Détails sur l'exploitation
•   Vecteur d'attaque : Réseau
•   Complexité de l'attaque : Faible
•   Privilèges nécessaires pour réaliser l'attaque : Aucun
•   Interaction d'un utilisateur ayant accès au produit est-elle nécessaire : Non
•   L'exploitation de la faille permet d'obtenir des droits privilégiés : Oui

Preuve de concept
Une preuve de concept est disponible en sources ouvertes.

Systèmes ou composants affectés

•   WordPress Core versions 6.9.0 jusqu'à 6.9.4
•   WordPress Core versions 7.0.0 jusqu'à 7.0.1
•   Note : les versions 6.8.0 à 6.8.5 restent exposées à l'injection SQL sous-jacente (CVE-2026-60137) mais pas à la chaîne complète de RCE, l'endpoint batch confus n'ayant été introduit qu'en version 6.9.

Contournement provisoire

•   Bloquer les routes /wp-json/batch/v1 et ?rest_route=/batch/v1 au niveau du pare-feu applicatif, les deux devant être couvertes simultanément.
•   Désactiver l'accès REST API non authentifié.
•   Rejeter les requêtes batch anonymes via un plugin must-use dédié.
 
Ces mesures sont présentées comme des solutions temporaires uniquement, à privilégier en attendant l'application du correctif.

Solutions ou recommandations

•   Branche 6.9.x : corrigé en version 6.9.5
•   Branche 7.0.x : corrigé en version 7.0.2
•   Branche de développement : corrigé en version 7.1 bêta 2