Injection SQL
Qu'est-ce que Injection SQL ?
Injection SQLAttaque par injection de code qui insère du SQL contrôlé par l'attaquant dans une requête de base de données, permettant de lire, modifier ou détruire des données.
L'injection SQL (SQLi) exploite des applications qui concatènent des entrées non fiables dans des instructions SQL au lieu d'utiliser des requêtes paramétrées. En injectant des guillemets, des commentaires ou des clauses UNION, un attaquant réécrit la requête prévue pour vider des tables, contourner l'authentification, élever ses privilèges ou exécuter des commandes au niveau de la base. Les variantes incluent l'injection in-band classique, celle basée sur les erreurs, l'injection aveugle booléenne ou temporelle (déduisant les données bit par bit à partir des réponses ou de leurs délais), et l'injection de second ordre, où une entrée stockée se déclenche lorsqu'elle est réutilisée ultérieurement.
L'injection SQL existe depuis des décennies, mais reste dévastatrice. La CVE-2023-34362, une injection SQL zero-day dans Progress MOVEit Transfer, a été exploitée à partir de fin mai 2023 par le groupe de rançongiciels Cl0p : des attaquants non authentifiés ont injecté du SQL pour déployer le web shell LEMURLOOT et exfiltrer le contenu des bases de données, avec des répercussions en cascade sur des milliers d'organisations en aval. La fuite de données TalkTalk de 2015, qui a exposé environ 157 000 enregistrements de clients, était elle aussi une injection SQL contre une page web vieillissante. Le SQLi relève de l'OWASP Top 10 A03:2021 (Injection).
La défense principale repose sur les requêtes paramétrées / instructions préparées, qui séparent le code des données afin qu'une entrée ne puisse jamais altérer la structure de la requête. Renforcez avec des frameworks ORM utilisés de façon sûre, une validation des entrées par liste d'autorisation, des comptes de base de données à privilèges minimaux (pas de droits DBA pour les comptes applicatifs), une bonne hygiène des procédures stockées et un WAF en défense en profondeur. L'échappement manuel seul est fragile et déconseillé.
flowchart TD
U[Entrée non fiable] --> C{Comment la requête est-elle construite ?}
C -->|Concaténation de chaînes| I["' OR 1=1 -- injecté dans le SQL"]
I --> DB[(La base exécute le SQL de l'attaquant)]
DB --> X[Vidage de données / contournement d'authentification]
C -->|Requête paramétrée| S[Entrée liée en tant que donnée, pas en tant que code]
S --> OK[Structure de la requête préservée — sûre]● Exemples
- 01
Un formulaire de connexion où saisir ' OR '1'='1 renvoie le premier utilisateur et contourne l'authentification.
- 02
Un endpoint de rapport dont un paramètre forgé déclenche un UNION SELECT pour extraire les empreintes de mots de passe.
● Questions fréquentes
Qu'est-ce que Injection SQL ?
Attaque par injection de code qui insère du SQL contrôlé par l'attaquant dans une requête de base de données, permettant de lire, modifier ou détruire des données. Cette notion relève de la catégorie Attaques et menaces en cybersécurité.
Que signifie Injection SQL ?
Attaque par injection de code qui insère du SQL contrôlé par l'attaquant dans une requête de base de données, permettant de lire, modifier ou détruire des données.
Comment se défendre contre Injection SQL ?
Les défenses contre Injection SQL combinent habituellement des contrôles techniques et des pratiques opérationnelles, comme détaillé dans la définition ci-dessus.
Quels sont les autres noms de Injection SQL ?
Noms alternatifs courants : SQLi.