Vulnérabilité d’injection de commandes

L’injection de commandes OS (également appelée injection shell) est une vulnérabilité de sécurité Web qui permet à un attaquant d’exécuter des commandes arbitraires du système d’exploitation (OS) sur le serveur qui exécute une application, et généralement de compromettre complètement l’application et toutes ses données.

Pourquoi les Applications Web Doivent-elles exécuter des Commandes Système ?

Les applications Web doivent parfois exécuter des commandes du système d’exploitation (commandes du système d’exploitation) pour communiquer avec le système d’exploitation hôte sous-jacent et le système de fichiers. Cela peut être fait pour exécuter des commandes système, lancer des applications écrites dans un autre langage de programmation ou exécuter des scripts shell, python, perl ou PHP. Pour tout système d’exploitation, y compris Windows, Unix et Linux, des fonctions sont disponibles pour exécuter une commande qui est transmise aux autres scripts en tant que commande shell. Bien qu’extrêmement utile, cette fonctionnalité peut être dangereuse lorsqu’elle est utilisée de manière incorrecte et peut entraîner des problèmes de sécurité des applications Web, comme expliqué dans cet article.

Pourquoi Vous devez être prudent Lorsque Vous utilisez des commandes Système dans des Applications Web

En exploitant une vulnérabilité d’injection de commandes dans une application vulnérable, les attaquants peuvent ajouter des commandes supplémentaires ou injecter leurs propres commandes du système d’exploitation. Cela signifie que lors d’une attaque par injection de commande, un attaquant peut facilement prendre le contrôle complet du système d’exploitation hôte du serveur Web. Par conséquent, les développeurs doivent faire très attention à la manière de transmettre les entrées utilisateur à l’une de ces fonctions lors du développement d’applications Web.

Exemple de vulnérabilité d’injection de commande

Dans cet exemple de vulnérabilité d’injection de commande, nous utilisons la fonctionnalité ping, qui est notoirement non sécurisée sur de nombreux routeurs. Imaginez une application vulnérable dotée d’une fonction commune qui transmet une adresse IP d’une entrée utilisateur à la commande ping du système. Par conséquent, si l’entrée utilisateur est 127.0.0.1, la commande suivante est exécutée sur le système d’exploitation hôte:

ping -c 5 127.0.0.1

Étant donné que nous avons affaire à une application Web vulnérable, il est possible de sortir de la commande ping ou de provoquer une erreur qui renvoie des informations utiles à l’attaquant. L’attaquant peut alors utiliser cette fonctionnalité pour exécuter ses propres commandes arbitraires. Un exemple d’ajout de commandes système supplémentaires pourrait ressembler à ceci:

ping -c 5 127.0.0.1; id

Dans l’exemple ci-dessus, la commande ping est d’abord exécutée et directement après l’exécution de la commande id. Par conséquent, la sortie de la commande sur la page ressemblera à ceci:

Lors d’une attaque par injection de commande du système d’exploitation, l’attaquant peut également configurer une attaque basée sur les erreurs. Par exemple, une injection de code dans ce cas ressemblera généralement à ce qui suit :

ping -c 5 "$(id)"

L’injection de code ci-dessus renvoie une réponse comme celle-ci:

ping: unknown host uid=0(root) gid=0(root) groups=0(root)

Comment empêcher les vulnérabilités d’injection de commandes système

Afin d’empêcher un attaquant d’exploiter une application Web vulnérable et d’insérer des caractères spéciaux dans la commande du système d’exploitation, vous devriez essayer de généralement évitez les appels système lorsque cela est possible. Dans tous les cas, évitez toute saisie de l’utilisateur, sauf si cela est absolument nécessaire. Et si cela est nécessaire, assurez–vous qu’une validation d’entrée appropriée est en place – la validation d’entrée est toujours indispensable pour vous assurer que le code de votre application Web n’est pas vulnérable à d’autres vulnérabilités à fort impact, y compris l’injection XSS et SQL.

Désactivez également cette fonctionnalité dans le fichier de configuration de votre langue si vous n’en avez pas besoin, afin que les attaquants ne parviennent jamais à accéder au shell système du système d’exploitation hôte via des applications Web vulnérables. Dans certaines langues, vous pouvez séparer l’exécution du processus des paramètres d’entrée. Vous pouvez également créer une liste blanche d’entrées possibles et vérifier les formats, par exemple en n’acceptant que des entiers pour un identifiant numérique.

Tableau de classification et de gravité des vulnérabilités

Restez à jour sur les tendances de sécurité Web

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.