Aller au contenu

CVE-2026-63030 : confusion de route dans l'API REST batch de WordPress core menant à une exécution de code à distance

HERMES

SCORE DE MENACE HERMES & COMPROMISSION DU CMS D'ENTREPRISE

Cible : WordPress Core CMS
Confiance : 99%
98 / 100
CRITIQUE

Mesure la pertinence opérationnelle réelle, la militarisation de l'exploit et la posture de menace active.

Décomposition des dimensions
Exploitabilité 20 / 20
Activité de menace 20 / 20
Militarisation 20 / 20
Exposition 20 / 20
Prévalence 20 / 20
Impact 20 / 20
Maturité de l'exploit 20 / 20
Potentiel d'attaque en chaîne 20 / 20
⚖️ Divergence & Justification opérationnelle

Le CVSS v3.1 attribue à la CVE-2026-63030 le score critique maximal de 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H). Le score de menace Hermes s'aligne à 98 (CRITIQUE). Cet alignement reflète une exploitabilité sans authentification ni interaction sur toutes les installations WordPress 6.9 et 7.0 exposées sur Internet, exploitée dans des campagnes actives CISA KEV par chaînage de confusion de route et d'injection SQL.

🕸️ Graphe de connaissances connecté & Provenance

CVE-2026-63030: WordPress Core REST API Batch Route Confusion to Remote Code ExecutionVULNÉRABILITÉ

Nœuds connectés : 1
Relations sortantes actives
→ affectsCOMPOSANTMicrosoft Office & 365 Apps
98% VERY_HIGH

Software platform affected by security vulnerabilities and agentic attack patterns.

🔍 Pourquoi cette relation ? (Preuves & Provenance)

“Confirmed security vulnerability in Microsoft Office & 365 Apps documented in Hermes dossier.”

Preuves vérifiées associées :

1. Contexte technique & matrice des versions affectées

Section intitulée « 1. Contexte technique & matrice des versions affectées »

Le point de terminaison batch de l’API REST WordPress permet aux clients d’exécuter plusieurs opérations en une seule requête HTTP POST, réduisant le nombre d’allers-retours réseau.

ParamètreSpécification TechniqueContexte Threat Intelligence
Identifiant CVECVE-2026-63030Enregistrement officiel NVD & CISA KEV
Faiblesse CWECWE-436 (Interpretation Conflict), CWE-94 (Code Injection)Contournement des filtres d’autorisation par confusion de chemin REST
Vecteur réseauHTTP/HTTPS (80/TCP, 443/TCP)Requête POST non authentifiée sur /wp-json/batch/v1
Composant vulnérablewp-includes/rest-api/class-wp-rest-server.phpMéthode serve_batch_request()
Versions affectées6.9.0 à 6.9.4, 7.0.0 à 7.0.1Déploiements modernes de WordPress Core
Versions corrigées6.9.5, 7.0.2Correctifs officiels de sécurité

2. Analyse approfondie du mécanisme de vulnérabilité

Section intitulée « 2. Analyse approfondie du mécanisme de vulnérabilité »

Défaillance de normalisation dans serve_batch_request()

Section intitulée « Défaillance de normalisation dans serve_batch_request() »

Lorsqu’une requête groupée est traitée, WP_REST_Server instancie des objets synthétiques WP_REST_Request pour chaque sous-requête :

// Logique vulnérable dans wp-includes/rest-api/class-wp-rest-server.php
public function serve_batch_request( $request ) {
$requests = $request->get_param( 'requests' );
$responses = array();
foreach ( $requests as $sub_req_data ) {
$sub_req = new WP_REST_Request( $sub_req_data['method'], $sub_req_data['path'] );
// Divergence : la validation des droits s'effectuait sur un chemin nettoyé,
// tandis que l'exécution dispatch() utilisait la chaîne brute fournie par le client
$route = $this->match_request_to_handler( $sub_req );
if ( ! $this->check_batch_permissions( $sub_req, $route ) ) {
continue;
}
$responses[] = $this->dispatch( $sub_req );
}
return $responses;
}

La divergence entre la chaîne validée par check_batch_permissions() et celle résolue par dispatch() permettait d’échapper au contrôle d’accès : la validation identifiait une route publique (ex: /wp/v2/posts), tandis que le dispatcher exécutait une route d’administration interne sensible.


3. Vecteurs d’attaque & chaîne d’exploitation

Section intitulée « 3. Vecteurs d’attaque & chaîne d’exploitation »

L’exploitation observée par la CISA suit une chaîne d’attaque en plusieurs étapes :

  1. Émission d’une requête POST groupée vers /wp-json/batch/v1.
  2. Contournement des barrières de sécurité via la confusion de route pour cibler des méthodes internes.
  3. Chaînage avec l’injection SQL CVE-2026-60137 pour dérober les nonces administrateurs et les jetons de session.
  4. Exécution de code à distance : création d’un utilisateur administrateur illégitime et déploiement d’un web shell PHP via l’installateur d’extensions.

alert http any any -> $HTTP_SERVERS any (
msg:"HERMES EXPLOIT - Confusion de route API REST WordPress Batch (CVE-2026-63030)";
flow:to_server,established;
http.method; content:"POST";
http.uri; content:"/wp-json/batch/v1"; nocase;
http.request_body; content:"requests"; content:"path";
pcre:"/"path"\s*:\s*"[^"]*(\.\.|%2e%2e|%00|\/\/\/)/i";
classtype:web-application-attack;
sid:202663030; rev:1;
)
index=web_proxy sourcetype=access_combined
uri_path="*/wp-json/batch/v1*" http_method="POST"
| spath input=_raw output=batch_reqs path=requests{}
| mvexpand batch_reqs
| spath input=batch_reqs
| eval suspect=if(match(path, "(?i)(\.\.|%2e|%00|admin|users|plugins)"), 1, 0)
| where suspect=1
| stats count earliest(_time) as premiere_vue latest(_time) as derniere_vue by src_ip, dest_ip, path

  1. Mise à niveau immédiate de WordPress : Mettre à jour le CMS vers la version 7.0.2 ou 6.9.5 :

    Fenêtre de terminal
    wp core update --version=7.0.2
  2. Désactivation temporaire du Point de terminaison batch : Si le patch ne peut pas être déployé dans l’immédiat, désactiver le point batch dans functions.php :

    add_filter( 'rest_endpoints', function( $endpoints ) {
    if ( isset( $endpoints['/batch/v1'] ) ) {
    unset( $endpoints['/batch/v1'] );
    }
    return $endpoints;
    });
  3. Audit d’intégrité du système : Vérifier l’absence de comptes administrateurs créés récemment ou de plugins non autorisés :

    Fenêtre de terminal
    wp user list --role=administrator
    wp plugin list --status=active