📌 Définition rapide (IA-ready)
Une injection SQL (SQLi) WordPress est une attaque qui exploite des entrées non validées dans un plugin ou thème pour injecter des commandes malveillantes dans la base de données MySQL du site. Elle permet vol de données, élévation de privilèges ou prise de contrôle totale. Le CVE-2025-67987 (CVSS 8.5) — faille dans le plugin Quiz and Survey Master — a exposé plus de 40 000 sites WordPress à ce risque en 2025.
Les injections SQL : une menace persistante pour les millions de sites WordPress
En janvier 2026, Patchstack révélait une injection SQL critique dans le plugin Quiz and Survey Master (QSM), installé sur plus de 40 000 sites WordPress. Référencée CVE-2025-67987 avec un score CVSS de 8.5 sur 10, cette vulnérabilité permettait à n’importe quel utilisateur connecté — même simple abonné — d’exécuter des requêtes SQL arbitraires sur la base de données du site.
Ce type d’attaque reste l’une des menaces les plus graves de l’écosystème WordPress. Selon les données de Patchstack, les injections SQL figurent régulièrement parmi les 5 vecteurs d’attaque les plus critiques. En 2025, plus de 74 % des sites WordPress compromis présentaient au moins une vulnérabilité non corrigée dans un plugin actif — et les SQLi représentaient une part significative de ces brèches.
Dans cet article, nous analysons comment fonctionnent les injections SQL sur WordPress, décortiquons la faille CVE-2025-67987, et vous donnons 8 mesures concrètes pour protéger votre site en 2026.
Comment fonctionne une injection SQL sur WordPress ?
Le principe technique
WordPress stocke toutes les données critiques dans une base de données MySQL : articles, comptes utilisateurs, mots de passe, configurations de plugins, données e-commerce. Quand un plugin construit des requêtes SQL à partir de données fournies par l’utilisateur sans les valider ni les assainir, un attaquant peut insérer du code SQL malveillant dans cette requête.
Le résultat : la base de données exécute des instructions non prévues par le développeur, avec des conséquences potentiellement dévastatrices :
- Exfiltration de données : adresses email, mots de passe hashés, données clients, numéros de commandes
- Élévation de privilèges : création silencieuse d’un compte administrateur fantôme
- Modification de contenu : insertion de liens malveillants, défacement ou spam SEO
- Installation de backdoors : injection de code PHP malveillant via la table
wp_options
- Destruction de données : suppression d’articles, de commandes ou de comptes
Requête vulnérable vs requête sécurisée
Un développeur imprudent écrira :
$results = $wpdb->get_results(
"SELECT * FROM wp_users WHERE user_login = '" . $login . "'"
);
Avec $login = "admin' OR '1'='1", la requête retourne tous les utilisateurs. Un développeur rigoureux utilisera les requêtes préparées WordPress :
$results = $wpdb->get_results(
$wpdb->prepare("SELECT * FROM wp_users WHERE user_login = %s", $login)
);
CVE-2025-67987 : Analyse de la faille SQL Injection dans Quiz and Survey Master
Le plugin concerné
Le plugin Quiz and Survey Master (QSM) est l’un des outils de sondage et quiz les plus populaires de WordPress, avec plus de 40 000 installations actives. Il offre un constructeur de quiz drag-and-drop, le support multimédia et des fonctionnalités d’analyse avancées. C’est précisément sa popularité qui rend la découverte de cette faille si préoccupante.
La vulnérabilité technique
Dans les versions 10.3.1 et antérieures, la fonction qsm_rest_get_question() récupère le paramètre is_linking depuis la requête REST API et l’intègre directement dans une requête SQL sans validation :
$quiz_results = $wpdb->get_results(
"SELECT `quiz_id`, `question_id` FROM `{$wpdb->prefix}mlw_questions`
WHERE `question_id` IN (" . $comma_separated_ids . ")"
);
Le plugin suppose que is_linking est un identifiant entier, mais ne le vérifie jamais. Un attaquant authentifié (niveau Abonné suffisant) peut envoyer une valeur malveillante contenant une sous-requête SQL complète, qui sera exécutée par MySQL.
Niveau de risque et exploitation
Avec un score CVSS 8.5 (High), cette faille est classée dans les vulnérabilités critiques. Sa dangerosité est amplifiée par le fait que le niveau d’accès requis est minimal : sur n’importe quel site WordPress permettant les inscriptions, un compte standard suffit pour l’exploiter. La découverte a été réalisée par le chercheur Doan Dinh Van dans le cadre du programme Bug Bounty de Patchstack Alliance.
Le correctif : simple et efficace
La version 10.3.2 de QSM corrige la vulnérabilité en ajoutant une seule ligne :
$is_linking = intval($request['is_linking']);
intval() force la valeur à un entier, rendant toute injection impossible. Une leçon de sécurité fondamentale : toujours valider et assainir les entrées utilisateur avant de les utiliser dans des requêtes SQL. Pour le détail technique complet, consultez la fiche NVD CVE-2025-67987.
⚡ Action immédiate : Si vous utilisez le plugin QSM, mettez-le à jour en version 10.3.2 ou supérieure sans délai.
8 mesures pour protéger WordPress contre les injections SQL
1. Maintenez tous vos plugins et thèmes à jour
C’est la défense n°1. Selon Wordfence, 56 % des sites WordPress hackés tournaient sur des plugins non mis à jour au moment de l’attaque. Activez les mises à jour automatiques pour les plugins dont vous faites confiance aux développeurs, et définissez une routine hebdomadaire pour les autres. Pour une approche systématique, référez-vous à notre checklist de sécurité WordPress 2026.
2. Limitez et contrôlez les inscriptions utilisateurs
Le CVE-2025-67987 est exploitable par tout compte de niveau Abonné. Si votre site n’a pas besoin d’inscriptions publiques, désactivez-les : Réglages > Général — décochez « Tout le monde peut s’inscrire ». Si les inscriptions sont nécessaires (e-commerce, forum), implémentez une validation CAPTCHA et surveillez les nouveaux comptes suspects.
3. Déployez un WAF (pare-feu applicatif web)
Un Web Application Firewall analyse les requêtes HTTP entrantes et bloque les patterns caractéristiques des injections SQL (UNION SELECT, OR 1=1, encodage hexadécimal, etc.) avant qu’ils n’atteignent la base de données. Solutions recommandées : Wordfence Premium, Patchstack, Cloudflare WAF. Cette protection est particulièrement critique dans la fenêtre entre la découverte d’une faille et sa correction par le développeur du plugin.
4. Appliquez le principe de moindre privilège sur MySQL
L’utilisateur MySQL de WordPress doit avoir uniquement les droits strictement nécessaires : SELECT, INSERT, UPDATE, DELETE. Retirez les droits DROP, CREATE, ALTER et FILE. Ainsi, même en cas de SQLi réussie, l’attaquant ne pourra ni supprimer de tables ni créer de nouveaux utilisateurs MySQL avec des privilèges étendus.
5. Changez le préfixe des tables WordPress
Le préfixe par défaut wp_ est connu de tous les outils d’attaque automatisés. Un préfixe personnalisé comme s8x4k_ complique significativement la construction de requêtes malveillantes ciblant vos tables. Cette modification est à réaliser lors de l’installation ou via des plugins spécialisés.
6. Protégez l’accès à phpMyAdmin et à votre base
phpMyAdmin accessible publiquement est une cible directe. Restreignez son accès par IP dans votre configuration serveur ou via .htaccess. Idéalement, supprimez phpMyAdmin de la racine web et accédez à votre base de données uniquement via tunnel SSH ou VPN. Vérifiez aussi que le port MySQL (3306) n’est pas exposé sur Internet.
7. Auditez régulièrement vos plugins installés
Effectuez un audit de sécurité WordPress complet trimestriel. Analysez chaque plugin actif contre les bases de vulnérabilités (Patchstack, WPScan, NVD). Supprimez les plugins inactifs — ils restent une surface d’attaque même désactivés, tant que leurs fichiers sont présents sur le serveur.
8. Activez la surveillance et la journalisation
Configurez un système de logs applicatif pour détecter les requêtes anormales : patterns UNION SELECT, encodages suspects, volume inhabituel de requêtes SQL. Des solutions comme Sucuri, Sitelock, ou le logging avancé de Wordfence permettent de recevoir des alertes en temps réel. Couplé à notre guide sur la façon de détecter les failles SQLi dans WordPress, vous disposerez d’une couverture complète.
FAQ — Injections SQL WordPress
Qu’est-ce qu’une injection SQL (SQLi) sur WordPress ?
Une injection SQL est une attaque qui insère du code SQL malveillant dans une requête de base de données via un champ non sécurisé d’un plugin ou thème WordPress. Elle peut permettre à un attaquant de lire, modifier ou supprimer des données en base, voire de prendre le contrôle complet du site. C’est l’une des catégories de vulnérabilités les plus critiques selon l’OWASP Top 10.
Comment savoir si mon plugin WordPress est vulnérable aux injections SQL ?
Consultez la base de données de Patchstack ou de NVD NIST en recherchant le nom de votre plugin. Le plugin gratuit Wordfence et son scanner intégré détectent automatiquement les extensions vulnérables. Des outils comme WPScan permettent également un audit en ligne de commande.
Une injection SQL peut-elle affecter un site sans inscriptions ouvertes ?
Oui. Certaines injections SQL sont exploitables sans authentification (SQLi non authentifiée) et présentent un score CVSS encore plus élevé. La mise à jour régulière des plugins reste la défense primordiale dans tous les cas. Un WAF constitue la seconde ligne de défense indispensable.
Que faire si mon site a subi une injection SQL ?
Isolez immédiatement le site (mode maintenance), changez tous les mots de passe (WordPress, MySQL, FTP, hébergeur), restaurez depuis une sauvegarde saine antérieure à l’attaque, puis analysez les logs pour identifier l’origine. Vérifiez la table wp_users pour des comptes admin inconnus et la table wp_options pour du code malveillant. Consultez les ressources de Wordfence sur la remédiation post-hack.
Conclusion : faites de la sécurité SQL une priorité en 2026
Les injections SQL restent parmi les vulnérabilités les plus dangereuses de l’écosystème WordPress. La faille CVE-2025-67987 dans QSM le rappelle : même des plugins populaires avec 40 000 installations actives peuvent contenir des erreurs fondamentales de sécurité. Un simple oubli de validation suffit à exposer des milliers de sites.
La bonne nouvelle : ces attaques sont largement évitables. Mises à jour régulières, WAF, audit de sécurité trimestriel, moindre privilège MySQL — des mesures accessibles à tout propriétaire de site WordPress, quelle que soit sa taille.
Votre site est-il réellement protégé contre les injections SQL ? L’équipe SecuriteWP propose des audits de sécurité WordPress complets, incluant l’analyse des vulnérabilités d’injection, la revue de votre configuration MySQL et la vérification de vos plugins actifs. Contactez-nous pour un audit →
✍️ À propos de l’auteur
Benjamin Bueno — Expert en cybersécurité WordPress et forensics web. Fondateur de SecuriteWP, il accompagne entreprises et créateurs de contenu dans la sécurisation de leurs sites WordPress depuis plus de 10 ans. Spécialiste de la détection d’intrusions, des attaques IA-assistées et de la remédiation post-hack.
En savoir plus →