Les vulnérabilités d’injection de commandes et le danger qu’elles représentent

Aujourd’hui, nous allons aborder les vulnérabilités d’injection de commandes du système d’exploitation. Quelle est l’ampleur de la menace qu’elles représentent ? Comment pouvez-vous prévenir ces vulnérabilités ? Comment NexDAST aide à y remédier ? Nous répondrons à toutes ces questions en détail ci-dessous !

Qu’est-ce que les injections de commande de système d’exploitation ?

Ne confondez pas l’injection de commande avec l’injection de code. Un code malveillant se faisant injecter dans un langage de programmation est une vulnérabilité d’injection de code. Les injections de commande de système d’exploitation sont un type de charge utile que le hacker injecte. La charge utile est ensuite exécutée comme une commande du système d’exploitation.

Un pirate exécute une commande temporaire du système d’exploitation sur le serveur des applications, ce qui entraîne un risque de compromission de l’application et des données. Les vulnérabilités d’injection de commande du système d’exploitation sont souvent utilisées comme marchepied par les pirates. C’est le pire des scénarios avec les injections de commande de système d’exploitation, car il commence par des injections de commande de système d’exploitation et conduit à l’exploitation d’autres parties de l’infrastructure d’hébergement, ce qui entraîne l’exposition de toute une série d’autres systèmes.

Python, Ruby, Perl, Java, C, PHP. Tous ces langages de programmation permettent aux utilisateurs d’appeler une commande shell du système. Cela les rend vulnérables aux injections de commandes système. Pourtant, l’exécution de la commande temporaire injectée dépend des privilèges du serveur web. C’est pourquoi les vulnérabilités d’injection de commande ne sont pas si dangereuses en soi. Mais un pirate peut exploiter l’escalade des privilèges et accéder à davantage d’informations. Avec ces informations, d’autres vulnérabilités peuvent être trouvées et exploitées.

Exemples de vulnérabilités d’injection de commande OS

Disons que vous voulez acheter un clavier sur un site web. L’application doit d’abord vous permettre de voir si le clavier que vous voulez est en stock. Les utilisateurs obtiennent ces informations via des URL comme celle-ci :

https://Keyboard-website.com/StockStatus?ProductID=111&StoreID=22

L’application demande aux systèmes existants de fournir à l’utilisateur des informations sur les stocks. L’appel à une commande shell représente cette fonctionnalité. Les identifiants de produit et de magasin sont des arguments, de sorte que la commande shell ressemble à quelque chose comme ceci:

Keyboards.py 111 22

Les utilisateurs voient maintenant si leur clavier préféré est en stock. Pourtant, il y a un problème ici. L’application n’est pas sécurisée contre les injections de commandes du système d’exploitation. Les pirates peuvent maintenant soumettre une entrée qui exécute une commande temporaire. Cela ressemble à « & echo randomstring & » dans le paramètre storeID. L’application exécute alors cette commande :

Keyboards.py & echo randomstring & 22

Que fait cette commande ? Elle fait en sorte que la chaîne fournie fasse écho dans la sortie. Un moyen efficace de tester les types d’injections de commandes du système d’exploitation. Le séparateur de commande du shell ( & ) transforme une commande en trois. Les utilisateurs voient alors trois résultats:

Error - productID was not provided
Randomstring
22: command not found

La commande Keyboard.py originale s’est exécutée, mais les arguments attendus étaient manquants. C’est pourquoi nous avons obtenu un message d’erreur. La chaîne fournie (Randomstring) a fait écho dans la sortie. C’est le but de la commande echo injectée. Mais, 22 : command not found s’affiche. Pourquoi ? Parce que l’argument original 22 s’est exécuté comme une commande, provoquant une erreur.

Maintenant, couvrons les vulnérabilités d’injection de commande de l’OS aveugle. Cela se produit lorsqu’une application ne renvoie pas la sortie d’une commande dans sa réponse. Malgré cela, les pirates disposent de diverses techniques pour exploiter ces vulnérabilités :

  • délais
  • redirection de la sortie

L’utilisation d’une commande injectée pour déclencher un délai permet à un pirate de confirmer si la commande a été exécutée. Le temps qu’il faut à une application pour répondre est ce qui permet de savoir si la commande a été exécutée ou non. L’une des commandes les plus efficaces pour exploiter cette vulnérabilité aveugle est un ping. Cette commande vous permet de choisir un nombre exact de paquets ICMP à envoyer. Ce nombre sera le temps nécessaire à l’exécution de cette commande.

Rediriger la sortie est un autre exploit d’injection de commande OS. Vous redirigez la sortie de la commande injectée directement dans un fichier. Ce fichier se trouve dans le webroot qui est récupéré via votre navigateur.

Prévenir les injections de commande de système d’exploitation

Comment pouvez-vous prévenir les injections de commande de système d’exploitation ? Le moyen le plus simple et le plus efficace est de ne jamais utiliser shell_exec ou des appels similaires pour les commandes du système d’exploitation hôte. Appliquez plutôt les mêmes commandes dans le langage de programmation que vous utilisez. Un problème apparaît si votre langage de programmation ne dispose pas d’une commande correspondant à celle dont vous avez besoin. Dans ce cas, vous devez utiliser la désinfection des entrées. Il est utile de le faire avant d’attribuer la valeur à la commande shell. L’utilisation de la liste blanche est toujours l’option la plus sûre en matière d’injections.

Les autres options de validation d’entrée puissante comprennent :

  • Validation des caractères alphanumériques (Confirmer l’inclusion de seulement des caractères alphanumériques sans espace ou syntaxe dans l’entrée)
  • Validation des nombres (Confirmer que l’entrée est un nombre)
  • Liste blanche des valeurs autorisées (Confirmer contre les listes blanches des valeurs autorisées)

Vous ne devriez jamais éviter les métacaractères du shell et essayer de sanitiser l’entrée de cette façon. Puisque cela rend l’entrée vulnérable aux pirates intelligents, qu’ils peuvent contourner facilement.

Comment NexDAST peut aider à prévenir les injections de commande de système d’exploitation

La façon la plus simple et la plus efficace de prévenir les injections de commande de système d’exploitation est d’utiliser NexDAST. Notre solution de test de sécurité en boîte noire examine automatiquement votre application. Lorsqu’une OS Command Injection est détectée, des directives de remédiation sont envoyées au développeur ou à l’équipe SecOps. Plus besoin de tests manuels longs et lents avec NexDAST.

Exemple de NexDAST identifiant une OS Command Injection:

vulnerable.com/site/ping?ip=8.8.8.8%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd

La partie %3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd est la vulnérabilité. NexDAST fournit également des directives de remédiation qui vous aident à remédier à cette vulnérabilité aussi efficacement que possible.

Vous voulez en savoir plus sur NexDAST ? Nous l’avons déjà couvert en profondeur dans l’un de nos blogs, et si vous avez un problème pour lequel NexDAST peut vous aider, demandez une démonstration ici !

Laisser un commentaire

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