Quelles sont les vulnérabilités d’injection de commande ?

Introduction

Les vulnérabilités d’injection de commandes sont l’une des vulnérabilités Web les plus dangereuses. De nombreux testeurs de sécurité et chasseurs de primes visent à trouver des vulnérabilités d’injection de commandes en raison de l’impact qu’elles peuvent créer sur l’application cible.

Cet article fournira un aperçu des vulnérabilités d’injection de commande, ainsi qu’une introduction à diverses vulnérabilités pouvant éventuellement conduire à l’injection de commande.

Qu’est-ce que l’injection de commande ?

L’injection de commandes est un type de vulnérabilité Web qui permet aux attaquants d’exécuter des commandes arbitraires du système d’exploitation sur le serveur, où l’application est en cours d’exécution. Des vulnérabilités d’injection de commandes se produisent lorsque les applications utilisent des commandes shell ou des scripts qui exécutent des commandes shell en arrière-plan.

Considérons l’URL suivante d’une application, qui effectue le codage base64 de l’entrée utilisateur.

http://target-site.com/encode.php?text=helloworld

Cette entrée utilisateur est transmise en tant que paramètre get à l’encodage.fichier php.

Voici le code source d’encode.php:

<?php

inputinput=__GET;

système (« echo-n ». $entrée. » / base64″);

?>

Comme nous pouvons le remarquer dans l’extrait de code précédent, l’entrée utilisateur est transmise à la fonction php system(), qui est utilisée pour exécuter des commandes du système d’exploitation en PHP.

Si un utilisateur ajoute une commande système à l’entrée, elle sera exécutée en tant que commande du système d’exploitation, ce qui ressemble à ceci:

http://target-site.com/encode.php?text=test;id

Ce qui suit est la réponse renvoyée à l’utilisateur:

testdWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK

As we can see, the word test is not encoded but there is a long encoded text returned in response. Decoding this text looks like this:

$ echo -n « dWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK » | base64 -d

uid=33(www-data) gid=33(www-data) groups=33(www-data)

As you can see, the encoded text is the output of the id command passed to the application.

Why are command injection vulnerabilities dangerous?

La classe de vulnérabilités d’injection de commandes est considérée comme l’une des vulnérabilités Web les plus dangereuses car elle donne le contrôle du système d’exploitation sous-jacent à un attaquant. Ce contrôle peut être utilisé de plusieurs manières différentes, y compris le mouvement latéral à travers le réseau interne en utilisant la confiance que le serveur cible a avec les autres systèmes du réseau.

Vulnérabilités pouvant conduire à l’exécution de commandes

Bien que des vulnérabilités d’exécution de commandes se produisent lorsque l’application vulnérable permet à l’utilisateur final d’étendre les fonctionnalités par défaut de l’application et d’exécuter des commandes système, il est également possible d’exécuter des commandes via le code de l’application. Ceci est communément appelé exécution de code. Même en cas de vulnérabilité d’exécution de code, l’objectif final est d’exécuter des commandes système arbitraires à travers celle-ci. Considérant cela, discutons de certaines des vulnérabilités pouvant conduire à l’exécution de commandes par injection de commandes ou exécution de code.

Voici quelques-unes des vulnérabilités qui peuvent éventuellement conduire à des attaques par injection de commande.

Injection de commandes arbitraires

Comme nous l’avons discuté dans notre exemple précédent, il est possible pour les applications d’avoir des applications qui reçoivent directement des commandes système arbitraires de l’utilisateur et les exécutent sur l’hôte sous-jacent. Ceci est un exemple de classe de vulnérabilité d’injection de commande.

Téléchargements de fichiers arbitraires

Lorsque des applications permettent aux utilisateurs de télécharger des fichiers avec des extensions de fichiers arbitraires, cela peut entraîner une injection de commandes lorsque ces fichiers téléchargés sont placés dans la racine Web. C’est une autre façon courante pour les applications Web de devenir vulnérables à l’injection de commandes.

Sérialisation non sécurisée

Outre les vulnérabilités d’injection de commandes standard, l’exécution arbitraire de commandes peut également être possible à l’aide d’autres vulnérabilités telles que la désérialisation non sécurisée. Cela profite du fait que le code côté serveur désérialise le contenu sérialisé transmis par l’utilisateur, sans le valider correctement. Même si cela est communément appelé classe de vulnérabilités de sérialisation non sécurisée, cela conduit éventuellement à une injection de commandes si l’application cible répond à certaines exigences, telles que la disponibilité de gadgets appropriés dans le chemin de la classe.

Injection de modèles côté serveur

Lorsque les applications Web utilisent des technologies de modélisation côté serveur telles que Jinja2 ou Twig pour générer des réponses HTML dynamiques, il est possible d’avoir une injection de modèles côté serveur. Les vulnérabilités SSTI se produisent lorsque les entrées utilisateur sont intégrées dans un modèle de manière dangereuse et entraînent une exécution de code à distance sur le serveur.

Injection d’entité externe XML

La vulnérabilité d’entité externe XML est un autre type de vulnérabilité, qui se produit contre des applications qui analysent une entrée XML contrôlée par l’utilisateur à l’aide d’un analyseur XML faiblement configuré. Les vulnérabilités XXE conduisent généralement à la lecture de fichiers arbitraires du serveur et à des attaques par déni de service.

Cependant, ils peuvent également conduire à l’exécution de commandes sur le serveur lorsque certaines conditions sont remplies. Par exemple, si PHP expect://wrapper est activé sur le serveur vulnérable cible, il est possible d’exécuter des commandes arbitraires sur le serveur.

Veuillez noter qu’il ne s’agit pas d’une liste exhaustive de vulnérabilités pouvant conduire à une injection de commande et qu’il existe plusieurs autres vulnérabilités pouvant conduire à une injection de commande lorsqu’elles remplissent certaines conditions.

Conclusion

Il est évident qu’il existe plusieurs vulnérabilités différentes pouvant conduire à l’exécution de commandes sur le serveur. Les développeurs doivent être conscients de ces vulnérabilités d’injection de commandes car ces vulnérabilités ont un impact élevé, car elles peuvent donner un contrôle total sur l’infrastructure sous-jacente.

Dans les prochains articles de cette série, nous aborderons d’autres concepts liés à l’injection de commande tels que l’identification et l’exploitation de l’injection de commande aveugle.

Laisser un commentaire

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

More: