L’Injection SQL (SQLi) : fonctionnement, failles historiques et bonnes pratiques de protection
Cet article fait partie de la série Les types de failles informatiques : classement par sévérité et guide complet.
Niveau de sévérité dans cette série : Élevée. Classification indicative (reste l’une des failles web les plus exploitées malgré des décennies de sensibilisation) ; la gravité réelle d’une faille dépend toujours du contexte précis et, idéalement, de son score CVSS.
Une simple guillemet mal neutralisée dans un formulaire en ligne peut suffire à faire basculer l’ensemble de la sécurité d’une entreprise. L’injection SQL, couramment désignée par le sigle SQLi, demeure l’une des failles applicatives les plus dévastatrices de l’histoire du Web. Bien qu’elle soit parfaitement comprise et que des contre-mesures efficaces existent depuis plus de vingt ans, elle continue de figurer en tête des rapports d’incidents informatiques à travers le monde.
Dans le cadre de notre série dédiée aux failles informatiques, l’injection SQL est classée au niveau de sévérité Élevée. Sur l’échelle d’évaluation globale du score CVSS, une vulnérabilité SQLi franchit très régulièrement le seuil de 8.0/10 (sévérité Élevée à Critique). Ce niveau s’explique par le fait qu’un attaquant distant, souvent sans la moindre authentification, peut réussir à lire la totalité des tables d’une base de données confidentielle, en modifier ou en supprimer le contenu, et parfois effectuer une escalade de privilèges jusqu’à exécuter des commandes arbitraires sur le système d’exploitation du serveur.

Origine
L’émergence des injections SQL est intimement liée à l’avènement du Web dynamique à la fin des années 1990. Pour afficher des contenus personnalisés, les développeurs ont commencé à interconnecter les serveurs web avec des systèmes de gestion de bases de données relationnelles (SGBDR). À cette période, la méthode la plus rapide de codage consistait à construire des requêtes SQL dynamiques en concaténant directement des chaînes de caractères brutes fournies par les utilisateurs (champs de formulaires, paramètres dans l’URL ou cookies).
La première publication formelle documentant ce vecteur d’attaque remonte à décembre 1998. Dans le volume 8 (numéro 54) du légendaire magazine hacker Phrack, le chercheur en sécurité Jeff Forristal (écrivant sous le pseudonyme RRF64) publie un article révélant comment manipuler des instructions SQL non filtrées dans Microsoft SQL Server. Ce concept s’est rapidement propagé à l’ensemble des moteurs de base de données du marché (MySQL, PostgreSQL, Oracle SQL, SQLite), dévoilant une fragilité structurelle dans la manière dont les applications séparaient le code exécutable des données.

Définition
Techniquement, une injection SQL survient lorsqu’une application web intègre des données non fiables fournies par un utilisateur directement dans la structure d’une requête SQL sans assainissement ni typage strict. Lorsqu’un navigateur transmet des caractères de contrôle SQL (tels que la simple quote ', la double quote " ou le double tiret de commentaire --), l’interpréteur du serveur SGBD ne fait plus la différence entre les instructions prévues par le développeur et les données saisies.
L’attaquant exploite ce défaut de conception pour détourner la logique initiale de la commande. Par exemple, dans un formulaire de connexion bancaire demandant un nom d’utilisateur, l’injection de la chaîne ' OR '1'='1 transforme la condition d’accès en une tautologie toujours vraie, permettant au pirate de contourner totalement la phase d’authentification sans connaître le mot de passe.
En fonction des retours fournis par l’application, on distingue plusieurs catégories de SQLi :
- In-band SQLi (ou classique) : l’attaquant extrait les données directement via l’interface web (méthodes
UNIONou messages d’erreurs SQL détaillés). - Inferential SQLi (ou Blind SQLi) : le serveur ne renvoie aucune donnée brute, mais l’attaquant reconstruit l’information bit par bit en observant le comportement de l’application (réponses Vrai/Faux ou délais de réponse provoqués par la fonction
SLEEP()). - Out-of-band SQLi : l’attaque pousse le serveur de base de données à effectuer des requêtes DNS ou HTTP vers un serveur sous le contrôle de l’attaquant.
C’est en raison de cette flexibilité offensive et de la prévalence historique du problème que la fondation OWASP classe l’injection SQL au premier rang de ses préoccupations depuis la création de son classement OWASP Top 10 en 2003 (aujourd’hui regroupée dans la catégorie A03:2021-Injection).
Exemples réels
Les conséquences financières et réputationnelles d’une faille SQLi mal corrigée sont illustrées par plusieurs attaques majeures :
Heartland Payment Systems (2007-2008)
Entre la fin de l’année 2007 et 2008, l’un des plus grands processeurs de paiement américains, Heartland Payment Systems, subit ce qui restera longtemps la plus vaste brèche de données de cartes bancaires. Le cybercriminel Albert Gonzalez et ses complices ont exploité une vulnérabilité d’injection SQL sur une page web d’identification pour pénétrer le réseau interne de l’entreprise. Une fois infiltrés, ils ont déployé un sniffer de paquets pour intercepter les flux monétiques. Révélé publiquement en janvier 2009, le piratage a compromis plus de 130 millions de numéros de cartes de crédit et de débit, coûtant à l’entreprise plus de 200 millions de dollars en pénalités et indemnités.
TalkTalk (Octobre 2015)
En octobre 2015, le fournisseur d’accès à Internet britannique TalkTalk est ciblé par des hackers qui exploitent une faille SQLi élémentaire sur des pages web anciennes, héritées du rachat du groupe Tiscali UK. En quelques minutes, les pirates dérobent les données personnelles de 156 959 clients (noms, adresses, adresses email, numéros de téléphone) ainsi que les coordonnées bancaires de plus de 15 000 personnes. L’autorité de contrôle britannique, l’ICO, a condamné TalkTalk à une amende record de 400 000 livres sterling pour négligence grave d’infrastructures informatiques obsolètes.

MOVEit Transfer (Mai 2023)
Plus récemment, en mai 2023, l’application de transfert de fichiers sécurisé MOVEit Transfer a été victime d’une exploitation massive de la vulnérabilité zero-day répertoriée CVE-2023-34362, cataloguée par le NIST et le registre officiel des vulnérabilités de la CVE géré par le MITRE. Le groupe de rançongiciel Cl0p a exploité cette injection SQL non authentifiée pour voler des millions de fichiers sensibles auprès de plus de 2 700 organisations mondiales (gouvernements, banques, hôpitaux), affectant plus de 90 millions d’individus à travers la chaîne logistique logicielle.
Comment s’en protéger
La neutralisation des injections SQL ne nécessite pas de dispositifs complexes si les bonnes pratiques d’ingénierie logicielle sont appliquées dès le départ :
- Employer des requêtes préparées (requêtes paramétrées) : C’est la protection fondamentale et suffisante. En utilisant des paramètres liés (prepared statements), le moteur SGBD compile la requête SQL indépendamment des valeurs fournies. Les données saisies par l’utilisateur ne peuvent plus jamais modifier la logique de la commande.
- Utiliser un ORM (Object-Relational Mapping) : Les frameworks de développement modernes (tels que Hibernate, Doctrine ou Entity Framework) s’appuient par défaut sur des requêtes paramétrées pour traiter les objets en base de données.
- Appliquer une validation stricte des entrées : Mettre en œuvre des listes blanches (whitelisting) et valider scrupuleusement le type, la longueur et le format attendu pour chaque champ du côté serveur.
- Respecter le principe du moindre privilège : Le compte utilisateur servant à la connexion entre l’application web et la base de données ne doit disposer que des droits strictement nécessaires à son fonctionnement (
SELECT,INSERT,UPDATE) et ne doit jamais posséder de privilèges d’administration système (root,saouDBA).

Avez-vous déjà fait face à des tentatives d’injection SQL dans les journaux de vos applications ? Quels outils d’analyse statique de code ou WAF privilégiez-vous dans votre quotidien d’administrateur ou développeur ? N’hésitez pas à partager vos expériences dans la section des commentaires ci-dessous !
Photo : Muhammed Ensar sur Pexels.
Pour aller plus loin
Liens affiliés Amazon : en tant que Partenaire Amazon, ce site perçoit une commission sur les achats éligibles réalisés via ces liens, sans coût supplémentaire pour vous.
Un guide complet et pratique expliquant le fonctionnement offensif des failles web comme la SQLi et la manière de coder défensivement pour les éradiquer.
Un ouvrage didactique passant en revue le top 10 OWASP, l’architecture web sécurisée et la protection des bases de données.
Un manuel synthétique permettant de comprendre l’ensemble des vulnérabilités applicatives et l’écosystème global de la sécurité du numérique.
Voir aussi
- Zero-Day : la faille que personne ne voit venir (Critique)
- L’Exécution de Code à Distance (RCE) : Comprendre, Prévenir et Contrôler la Faille Ultime (Critique)
- L’Élévation de Privilèges (Privilege Escalation) : Comprendre et Prévenir la Prise de Contrôle Absolue (Élevée)
- Le Rançongiciel (Ransomware) : Anatomie, Histoire et Stratégies de Protection (Élevée à Critique)
- Le Débordement de Tampon (Buffer Overflow) : Comprendre la Faille Légendaire de la Cybersécurité (Élevée)
- L’Attaque de l’Homme du Milieu (Man-in-the-Middle) : comprendre et contrer les interceptions de trafic (Moyenne)
- Le Cross-Site Scripting (XSS) : Comprendre, détecter et contrer la faille web omniprésente (Moyenne)
- Le Cross-Site Request Forgery (CSRF) : comprendre et contrer le piège de la session compromise (Faible à Moyenne)
- L’Ingénierie Sociale et le Phishing : Anatomie de la Première Porte d’Entrée des Cyberattaques (Variable (vecteur d’entrée n°1))
- Toutes les failles informatiques classées par sévérité