Tout le monde adore les scripts shell ! Il n'est donc pas étonnant qu'ils soient largement utilisés dans la plupart des produits de sécurité Linux. Leur développement est généralement plus simple que celui des programmes C/C++, car ils ne nécessitent pas de compilation complexe et sont faciles à prototyper.
Cependant, outre leurs applications infinies, les scripts shell présentent de nombreux dangers cachés dans le contexte de la sécurité – ils sont souvent négligés lors de l’écriture de scripts shell.
Par exemple, considérons un script shell qui utilise simplement la commande ping pour vérifier la connectivité entre deux hôtes.
#! / Bin / bash
ping –c1 « $1 »
Dans ce cas d'utilisation, $1 est une entrée pouvant provenir d'un CGI ou d'un autre script. Si une entrée n'est pas correctement validée, un pirate peut facilement exploiter la substitution de commande.
ping –c1 « 8.8.8.8 && commande »
Dans cet exemple, un script shell traitera les arguments passés à la commande ping comme une commande distincte lors de son exécution. Cependant, il existe plusieurs autres façons de réaliser cette substitution de commande.
ping –c1 « 8.8.8.8`commande` »
ping –c1 8.8.8.8| commande
ping –c1 8.8.8.8; commande
Dans la plupart des solutions de sécurité de passerelle, comme la gestion unifiée des menaces (UTM) , les pare-feu proposent des portails aux utilisateurs finaux. Ces portails facilitent de nombreux services, notamment le téléchargement d'outils d'accès à distance, la récupération des courriels mis en quarantaine, la modification des préférences utilisateur, etc.
Ces services attendent une certaine forme d'entrée utilisateur et peuvent invoquer un script shell dans le backend du produit logiciel.
Grâce à ces exploits, un attaquant peut obtenir l'autorisation root en exécutant des commandes à distance sur un appareil vulnérable en envoyant des entrées malveillantes. Une fois l'appareil vulnérable accédé, un attaquant peut s'infiltrer dans le réseau d'une organisation.
Bien que les entrées utilisateur soient validées la plupart du temps, il existe toujours une possibilité que certaines validations manquent à plusieurs reprises.
Cette attaque par substitution de commande est également connue sous le nom d'« exécution de commande à distance avant authentification », car un attaquant peut exécuter cet exploit sans aucune information d'identification valide.
Très récemment, cette faille a été découverte dans un pare-feu d'une marque réputée.
In Seqrite UTM, nous nous concentrons explicitement sur ces domaines lors du développement afin que les appareils ne soient pas vulnérables à ces exploits courants.
Voici quelques directives pour écrire des scripts shell sécurisés :
- Utilisez des chemins absolus ou relatifs pour les commandes utilisées dans les scripts.
- Définissez les valeurs correctes de la variable PATH dans les scripts.
- Utilisez des guillemets appropriés pour les variables passées en arguments.



