Injection de commandes
Qu'est-ce que Injection de commandes ?
Injection de commandesAttaque où une entrée utilisateur est transmise sans assainissement à un shell système, amenant l'application à exécuter des commandes fournies par l'attaquant.
L'injection de commandes (OS command injection) survient lorsqu'une application construit une commande système en concaténant des entrées non fiables et transmet le résultat à un shell. Des métacaractères comme ;, &, |, $() ou les guillemets inversés permettent à l'attaquant d'enchaîner des commandes supplémentaires qui s'exécutent avec les privilèges du processus applicatif. Les conséquences vont de la lecture-écriture arbitraire de fichiers au mouvement latéral, en passant par des shells inverses et la prise de contrôle complète du serveur. Elle figure dans l'OWASP Top 10 sous la catégorie « Injection » (A03:2021) et est répertoriée sous le code CWE-78.
La cause profonde est l'interpréteur de métacaractères du shell, et non l'entrée elle-même : la distinction déterminante oppose donc l'appel d'un shell (system(), os.system, Runtime.exec("sh -c ..."), guillemets inversés) à l'appel direct du binaire cible avec un vecteur d'arguments (execve, subprocess.run([...], shell=False), ProcessBuilder). Les API à tableaux d'arguments transmettent chaque jeton comme un littéral, de sorte que les métacaractères n'atteignent jamais un analyseur. Une variante connexe, l'injection d'arguments, détourne les propres options d'un programme (par exemple en glissant --output ou -o ProxyCommand dans git, curl ou ssh) même lorsqu'aucun shell n'est invoqué.
L'impact réel est sévère sur les équipements en périphérie de réseau. CVE-2024-3400 (CVSS 10.0) était une injection de commandes système non authentifiée dans la fonctionnalité GlobalProtect de PAN-OS de Palo Alto Networks, exploitée comme zero-day dès avril 2024 par l'acteur que Volexity suit sous le nom UTA0218 pour déployer des shells inverses et exfiltrer les configurations de pare-feu. CVE-2024-21887 dans Ivanti Connect Secure, chaînée au contournement d'authentification CVE-2023-46805, permettait l'exécution de commandes sans authentification et a fait l'objet d'une exploitation massive début 2024. Le bug Shellshock de 2014 (CVE-2014-6271) permettait aux attaquants d'injecter des commandes via des variables d'environnement forgées analysées par Bash, atteignables via CGI, DHCP et SSH.
Défenses : éviter totalement le shell grâce aux API à tableaux d'arguments ; appliquer des listes blanches strictes de valeurs attendues ; supprimer les options et métacaractères dangereux ; exécuter les services sous des comptes à privilèges minimaux dans des sandbox/conteneurs ; et mettre en place un filtrage du trafic sortant afin qu'un point d'appui ne puisse pas communiquer avec l'extérieur.
flowchart TD
A[Entrée utilisateur : hostname] --> B{Intégrée à la commande}
B -->|"os.system('ping ' + host)"| C[Le shell interprète les métacaractères]
C --> D["host = 127.0.0.1; cat /etc/shadow"]
D --> E[La commande de l'attaquant s'exécute en tant qu'utilisateur de l'app]
E --> F[Shell inverse / exfiltration de données / prise de contrôle]
B -->|"subprocess.run(['ping', host], shell=False)"| G[Argument passé comme jeton littéral]
G --> H[Aucune analyse par le shell : injection neutralisée]
style F fill:#c0392b,color:#fff
style H fill:#27ae60,color:#fff● Exemples
- 01
Un utilitaire ping qui concatène un nom d'hôte permet à 127.0.0.1; cat /etc/shadow d'exposer des empreintes de mots de passe.
- 02
Un endpoint de traitement d'images appelant ImageMagick exécute une commande de l'attaquant via un nom de fichier forgé.
● Questions fréquentes
Qu'est-ce que Injection de commandes ?
Attaque où une entrée utilisateur est transmise sans assainissement à un shell système, amenant l'application à exécuter des commandes fournies par l'attaquant. Cette notion relève de la catégorie Attaques et menaces en cybersécurité.
Que signifie Injection de commandes ?
Attaque où une entrée utilisateur est transmise sans assainissement à un shell système, amenant l'application à exécuter des commandes fournies par l'attaquant.
Comment se défendre contre Injection de commandes ?
Les défenses contre Injection de commandes 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 de commandes ?
Noms alternatifs courants : Injection de commandes système, Shell injection.