Attaques & vulnérabilités techniques

Injection SQL

Julien THÉRIN

L'injection SQL est une attaque qui exploite les failles de validation des données pour manipuler la base de données d'un site WordPress.

L’injection SQL (ou SQLi, pour SQL Injection) est l’une des techniques d’attaque les plus répandues sur le web. Elle consiste à insérer du code SQL malveillant dans un champ de formulaire, une URL ou tout autre paramètre transmis à la base de données, afin d’en modifier le comportement.

Comment fonctionne une injection SQL

Lorsqu’une application web construit une requête SQL en concaténant directement des données saisies par l’utilisateur sans les valider, elle est potentiellement vulnérable. Un attaquant peut injecter des instructions SQL arbitraires pour modifier la logique de la requête : contourner l’authentification, extraire des données sensibles, modifier des enregistrements ou supprimer des tables entières.

La classe $wpdb de WordPress intègre une méthode prepare() qui protège contre ce type d’attaque en paramétrant les requêtes. Les développeurs de plugins qui la contournent exposent leurs utilisateurs.

WordPress et les injections SQL : les points d’entrée courants

Même avec WordPress core protégé, des plugins ou thèmes tiers mal codés peuvent introduire des failles :

  • Formulaires de recherche personnalisés passant des paramètres non filtrés dans WP_Query
  • Plugins de filtrage (WooCommerce, LMS) avec des paramètres GET construits en concaténation directe
  • Champs de tri et de pagination non validés dans les requêtes de listing
  • API REST personnalisée avec des endpoints qui acceptent des paramètres SQL sans préparation

Comment protéger son WordPress contre les injections SQL

La protection passe par plusieurs niveaux complémentaires :

  • Mises à jour régulières : la majorité des failles SQLi connues sont documentées sous forme de CVE et corrigées dans les mises à jour de plugins
  • Utiliser $wpdb->prepare() dans tout code personnalisé accédant à la base
  • Activer un pare-feu applicatif (WAF) qui filtre les payloads SQL avant qu’ils atteignent la base de données
  • Restreindre les privilèges MySQL : l’utilisateur DB WordPress ne doit pas avoir les droits DROP ou FILE
  • Scanner régulièrement les plugins installés via un scanner de vulnérabilités pour détecter les failles connues avant qu’elles ne soient exploitées

Questions fréquentes

Une injection SQL est une technique d’attaque qui consiste à insérer du code SQL malveillant dans les paramètres d’une application web pour manipuler sa base de données. Elle peut permettre à un attaquant de lire, modifier ou supprimer des données, voire de prendre le contrôle du serveur via une exécution de code à distance.

WordPress core intègre des protections via la classe $wpdb et sa méthode prepare(). Cependant, des plugins ou thèmes tiers mal codés ou obsolètes peuvent introduire des failles. Il est essentiel de maintenir tous les composants à jour et de n’utiliser que des extensions auditées.

Les signes d’une injection SQL active incluent des erreurs de base de données visibles, un comportement anormal des formulaires, des redirections vers des pages inconnues ou un ralentissement inexpliqué du site. Un scan de sécurité régulier permet de détecter les plugins vulnérables avant qu’ils soient exploités.

Sources

  • OWASP – définition et mécanismes de l’injection SQL
Avatar Julien THERIN
Julien THÉRIN

Entrepreneur passionné du web, ma relation avec WordPress commence il y a plus de 15 ans - par curiosité, en autodidacte. À l'époque je m'intéressais à plusieurs CMS : DotClear, CMS Made Simple, SPIP, Joomla... C'est WordPress qui l'a emporté…

À propos de l'auteur →
Retour en haut