Lexique · Sécurité des données
Injection SQL
Attaque qui consiste à glisser des instructions SQL dans une donnée saisie ou transmise à une application, de sorte que la base de données exécute une requête détournée. Elle permet de lire, modifier ou supprimer des données, et se prévient d'abord par des requêtes paramétrées.
Ce que ça change pour une organisation
Une injection SQL survient lorsqu’une application construit une requête en y intégrant sans précaution une donnée fournie par l’utilisateur : la base de données ne distingue plus la donnée de la commande et exécute l’instruction glissée par l’attaquant. Selon les droits du compte utilisé par l’application, celui-ci peut alors lire des tables entières, modifier ou supprimer des enregistrements, ou obtenir des privilèges plus élevés.
La parade principale consiste à séparer strictement les données du code au moyen de requêtes paramétrées ou préparées, ou d’une bibliothèque d’accès aux données éprouvée. La validation des entrées côté serveur reste utile en complément, mais ne constitue pas à elle seule une défense suffisante. Il convient aussi de limiter les droits du compte de base de données au strict nécessaire et d’éviter que les messages d’erreur ne révèlent la structure des requêtes.
L’enjeu dépasse le code développé en interne : une faille de ce type dans un logiciel ou un service tiers expose également ses clients, ce qui rend déterminants l’application rapide des correctifs et le suivi des avis de sécurité des éditeurs.
Exemple
Le 7 juin 2023, la CISA a publié un avis sur la vulnérabilité CVE-2023-34362 du logiciel de transfert de fichiers MOVEit Transfer (Progress Software), qu’elle décrit comme une injection SQL jusque-là inconnue. Selon cet avis, qui s’appuie sur des sources ouvertes, le groupe de rançongiciel CL0P l’exploitait depuis le 27 mai 2023 pour installer un web shell nommé LEMURLOOT et dérober des données dans les bases sous-jacentes.
À ne pas confondre avec
- Les autres injections : l’injection SQL vise un interpréteur de requêtes de bases de données, alors que la catégorie « injection » de l’OWASP (A03:2021) regroupe les attaques où des données fournies par l’utilisateur sont transmises à un interpréteur sans contrôle suffisant.
- Une vulnérabilité de jour zéro : cette expression désigne une faille exploitée avant qu’un correctif n’existe, quel que soit son type ; une injection SQL peut en être une, comme dans le cas de MOVEit.