Aller au contenu

CVE-2026-60137 : injection SQL facilitée dans le paramètre author__not_in de wp_query sous WordPress core

HERMES

SCORE DE MENACE HERMES & COMPROMISSION DU CMS D'ENTREPRISE

Cible : WordPress Core CMS
Confiance : 98%
88 / 100
ELEVE

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

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

Le CVSS v3.1 classe la CVE-2026-60137 avec un score de 5.9 Moyen (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N) en raison du prérequis d'un appelant ou plugin tiers transmettant des entrées non validées. Le score de menace Hermes évalue la vulnérabilité à 88 (ELEVE), reflétant son inscription au catalogue CISA KEV des vulnérabilités exploitées et son rôle de maillon critique chaîné avec la confusion de route REST (CVE-2026-63030) aboutissant à une exécution de code à distance non authentifiée.

🕸️ Graphe de connaissances connecté & Provenance

CVE-2026-60137: WordPress Core Facilitated SQL Injection via WP_Query author__not_inVULNÉ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 »

WordPress motorise plus de 40% des sites web mondiaux. La classe WP_Query constitue l’interface universelle d’extraction des contenus et articles depuis la base de données relationnelle MySQL/MariaDB.

ParamètreSpécification TechniqueContexte Threat Intelligence
Identifiant CVECVE-2026-60137Enregistrement officiel NVD & CISA KEV
Faiblesse CWECWE-89 (SQL Injection)Défaut de transtypage et d’assainissement de tableau dans le générateur SQL
Vecteur réseauHTTP/HTTPS (80/TCP, 443/TCP)Requêtes ciblées vers les points de recherche et l’API REST
Composant vulnérablewp-includes/class-wp-query.phpMéthode WP_Query::get_posts()
Versions affectées6.8.0 à 6.8.5, 6.9.0 à 6.9.4, 7.0.0 à 7.0.1Toutes les branches WordPress non patchées
Versions corrigées6.8.6, 6.9.5, 7.0.2Correctifs officiels de sécurité (juillet 2026)

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

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

Dans le fichier wp-includes/class-wp-query.php, la génération de la clause SQL relative aux auteurs exclut les identifiants de la manière suivante :

// Logique vulnérable dans WP_Query::get_posts()
if ( ! empty( $q['author__not_in'] ) ) {
$author__not_in = (array) $q['author__not_in'];
$clean_authors = array();
foreach ( $author__not_in as $author_id ) {
if ( is_numeric( $author_id ) ) {
$clean_authors[] = absint( $author_id );
} else {
// Dans certaines structures d'entrées imbriquées, l'échappement addslashes
// ne neutralise pas les contextes numériques dépourvus de guillemets
$clean_authors[] = $wpdb->_escape( $author_id );
}
}
$whichauthor .= " AND {$wpdb->posts}.post_author NOT IN (" . implode( ',', $clean_authors ) . ')';
}

La fonction _escape() (équivalente à addslashes) ne protège que contre les injections brisant les chaînes délimitées par des guillemets. Dans une clause NOT IN (1, 2, ...), l’absence de guillemets permet à un attaquant d’injecter des expressions arithmétiques, des sous-requêtes ou des clauses UNION SELECT sans générer d’erreur de syntaxe.


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

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

L’exploitation autonome de la CVE-2026-60137 requiert un point d’entrée passant $_GET à WP_Query. Les attaquants ont industrialisé son exploitation en la combinant avec la faille de confusion de route :

  1. Chaînage avec la CVE-2026-63030 : via le point d’entrée REST /wp-json/batch/v1, les attaquants contournent les filtres frontaux et forcent l’exécution de requêtes internes non assainies.
  2. Exfiltration aveugle temporelle : injection de charges SLEEP() pour reconstruire bit par bit les jetons de réinitialisation de mot de passe administrateur.
  3. Élévation de privilèges : connexion à l’interface /wp-admin/ puis téléversement d’une extension malveillante contenant un web shell PHP.

alert http any any -> $HTTP_SERVERS any (
msg:"HERMES EXPLOIT - Injection SQL WordPress WP_Query author__not_in (CVE-2026-60137)";
flow:to_server,established;
http.uri; content:"author__not_in"; nocase;
pcre:"/author__not_in(\[|\%5b)[^\]]*(\]|\%5d)=(\s*select|\s*union|\s*sleep|\s*0x)/Ui";
classtype:web-application-attack;
sid:202660137; rev:1;
)
index=web_proxy sourcetype=access_combined
(uri_path="*wp-json*" OR uri_path="*/index.php*")
(uri_query="*author__not_in*" OR form_data="*author__not_in*")
| eval suspect=if(match(uri_query, "(?i)(union|select|sleep|benchmark|information_schema)"), 1, 0)
| where suspect=1
| stats count earliest(_time) as premiere_vue latest(_time) as derniere_vue by src_ip, dest_ip, uri_path, uri_query

  1. Appliquer la mise à jour de maintenance WordPress : Mettre à niveau le cœur de WordPress vers la version 6.8.6, 6.9.5 ou 7.0.2 à l’aide de WP-CLI :

    Fenêtre de terminal
    wp core update --version=7.0.2
  2. Validation stricte dans les développements sur-mesure : S’assurer que les thèmes et plugins personnalisés effectuent un transtypage strict :

    $safe_authors = array_map( 'absint', (array) $request->get_param( 'author__not_in' ) );
    $query = new WP_Query( [ 'author__not_in' => $safe_authors ] );
  3. Renforcement WAF : Bloquer au niveau du pare-feu applicatif toute requête non authentifiée comportant des valeurs non purement numériques dans author__not_in.