Introduction
Les failles d’injection figurent parmi les problèmes de sécurité logicielle les plus dangereux et les plus persistants. Elles surviennent lorsqu'une entrée non fiable est transmise directement à des requêtes, des commandes ou des interpréteurs de code sans validation ou échappement approprié. Cela peut entraîner un accès non autorisé, une corruption de données ou une compromission complète du système.
Alors que les outils SAST traditionnels se concentrent sur les langages courants comme JavaScript, Python ou Java, le moteur de qualité de code basé sur l'IA d'Aikido détecte désormais les vulnérabilités d'injection dans des langages que les outils SAST manquent généralement, tels que Perl, Haskell, Groovy, Erlang, Zig, Delphi, PowerShell, COBOL, ABAP, Visual Basic, Pascal et ColdFusion.
Cette règle garantit que, quelle que soit la langue utilisée par votre équipe, la construction de requêtes ou de commandes non sécurisées est détectée avant qu'elle n'atteigne la production.
Pourquoi c'est important
Les failles d’injection restent l'un des Top 10 OWASP des risques de sécurité.
Ils sont faciles à introduire mais souvent difficiles à détecter par une revue manuelle, surtout dans les langages hérités ou moins courants.
Sans mesures de protection :
- Les attaquants peuvent injecter des commandes SQL ou OS dans des chaînes construites dynamiquement.
- Les données sensibles peuvent être exfiltrées ou détruites.
- Des systèmes entiers peuvent être compromis si l'exécution de code est possible.
En appliquant cette règle, chaque morceau de code qui construit des requêtes ou des commandes doit utiliser des API paramétrées, des bibliothèques sécurisées ou des fonctions d'échappement, réduisant ainsi drastiquement la surface d'attaque.
❌ Exemple non conforme
Ci-dessous un exemple en PowerShell, mais le même problème apparaît dans de nombreux langages.
# Non sécurisé : l'entrée utilisateur est directement concaténée dans une commande système
$userInput = Read-Host "Enter username"
Invoke-Expression ("net user " + $userInput)Pourquoi c'est dangereux : Invoke-Expression exécute une commande construite dynamiquement.
Un attaquant pourrait saisir john && del C:\* /Q et provoquer un comportement destructeur.
✅ Exemple conforme
# Safe: use parameterized or validated command execution
$userInput = Read-Host "Enter username"
if ($userInput -match '^[a-zA-Z0-9_-]+$') {
Start-Process "net" -ArgumentList "user", $userInput
} else {
Write-Host "Invalid input"
}Pourquoi c'est sûr :
- Les arguments de commande sont passés sous forme de liste, non pas comme une chaîne concaténée.
- L'entrée est validée à l'aide d'une regex de liste blanche.
- Aucune donnée non fiable n'atteint jamais le shell sans être échappée.
Essayez-le dans Aikido Security
Vous pouvez activer cette règle directement dans l'outil Code QualityAikido.
Une fois active, elle recherche automatiquement les schémas d'injection dans tous les langages pris en charge, y compris ceux sans couverture SAST native.
Chaque fois qu'un développeur ouvre une pull request :
- Le système examine le code nouveau et modifié.
- Il signale toute utilisation de concaténation ou d'interpolation de chaînes dans les appels de commande, de requête ou d'interpréteur.
- Le rapport met en évidence la ligne exacte et fournit une courte suggestion de correction (par exemple, « Utilisez des API paramétrées ou des entrées validées »).
Cette règle s'exécute sur chaque PR, assurant une protection cohérente même dans les dépôts multilingues.
Conclusion
La construction dynamique de chaînes est l'une des erreurs les plus simples pouvant entraîner des failles de sécurité critiques.
En détectant les concaténations non sécurisées et en imposant des pratiques de construction de requêtes sécurisées, cette règle prévient des classes entières d'attaques par injection avant qu'elles n'atteignent la production.
Quelle que soit la langue, l'analyse intelligente Aikidocombine une protection statique et assistée par IA pour couvrir un champ d'action plus large que les outils traditionnels.
.avif)
