
コーダーズ・コンカー・コンカー・セキュリティ:シェア&ラーニング・シリーズ-OS コマンド・インジェクション
Une attaque par injection de commande du système d'exploitation peut se produire lorsqu'une application permet aux utilisateurs de saisir des données dans un shell, mais ne prend aucune mesure pour vérifier que les chaînes de caractères saisies sont valides. Cela permet à un attaquant d'introduire des commandes directement dans le système d'exploitation hébergeant l'application, et ce quel que soit le niveau d'autorisation défini pour l'application compromise.
Les attaques par injection de commandes du système d'exploitation peuvent être réalisées par des pirates débutants ou peu qualifiés, ce qui en fait l'une des faiblesses les plus courantes auxquelles les équipes de sécurité sont confrontées. Heureusement, il existe plusieurs moyens très efficaces d'empêcher ces attaques de réussir. Dans cet épisode, nous allons apprendre :
Comment ils fonctionnent
Pourquoi ils sont si dangereux
Comment vous pouvez mettre en place des défenses pour les arrêter.
Comment les attaquants utilisent-ils l'injection de commandes dans le système d'exploitation ?
La première chose qu'un attaquant doit faire pour lancer une attaque par injection de commande de système d'exploitation est de localiser les entrées de l'utilisateur dans une application. Les formulaires que les utilisateurs remplissent sont potentiellement de bons points de départ. Les attaquants les plus astucieux peuvent également utiliser des éléments tels que les cookies ou même les en-têtes HTTP comme point de départ, un élément utilisé par presque toutes les applications ou tous les sites web.
La deuxième chose à faire est de déterminer le système d'exploitation qui héberge l'application. Étant donné qu'il n'existe qu'une poignée de choix, la méthode des essais et des erreurs peut très bien fonctionner pour cette phase. La plupart des serveurs d'application seront soit basés sur Windows (la version de Windows n'a normalement pas d'importance), soit sur un boîtier Linux, soit éventuellement sur Unix.
À ce stade, le pirate modifie l'entrée pour injecter une commande du système d'exploitation dans une entrée apparemment inoffensive. Cela peut inciter le système d'exploitation hôte à exécuter des commandes non souhaitées, quel que soit le niveau d'autorisation de l'application.
Par exemple, la commande suivante peut être utilisée par des utilisateurs valides au sein d'une application pour voir le contenu d'un fichier, dans ce cas les notes d'une réunion mensuelle du conseil d'administration.
exec("cat " + nom de fichier)
Dans notre exemple, la commande suivante sera exécutée et les notes de réunion seront renvoyées à l'utilisateur.
./cat MeetingNotes.txt
Trois membres du comité exécutif étaient présents à la réunion de juillet. Le nouveau projet de budget a été discuté, mais aucune action ou vote n'a été effectué.
C'est ce qui se produit lorsqu'un attaquant ajoute des commandes supplémentaires à la fin de l'entrée, comme celle utilisée pour lister le contenu d'un répertoire sous Linux. Dans ce cas, la commande originale, qui consiste à afficher les notes de réunion, est toujours exécutée. Mais l'utilisateur malveillant voit également tout ce qui se trouve dans le répertoire et les autres commandes qu'il peut utiliser dans le cadre d'attaques par injection de commandes du système d'exploitation. Il entre :
$ ./cat MeetingNotes.txt && ls
Et obtenez ceci à la place :
Trois membres du comité exécutif étaient présents à la réunion de juillet. Le nouveau projet de budget a été discuté, mais aucune action ou vote n'a été effectué.
MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c
Comme vous pouvez le voir, dans ce cas, non seulement le pirate a vu le contenu du répertoire, mais il a également reçu un menu d'autres commandes qu'il pouvait utiliser " des commandes qu'il sait maintenant pouvoir exécuter sur le système d'exploitation hôte ".
Pourquoi les attaques par injection de commande du système d'exploitation sont-elles si dangereuses ?
Permettre aux utilisateurs de contourner l'objectif de l'application ciblée et de l'utiliser pour exécuter des commandes du système d'exploitation est extrêmement risqué. Un pirate peut facilement réaliser des actions dévastatrices telles que le vol de données confidentielles ou le formatage de l'ensemble du disque du serveur, par exemple. Les options dont dispose un pirate ne sont limitées que par les commandes autorisées dans le système d'exploitation et par la créativité dont il fait preuve pour les utiliser.
Les commandes du système d'exploitation sont exécutées au même niveau d'autorisation que l'application. Les applications fonctionnant avec des privilèges administratifs signifient que les pirates qui les compromettent peuvent exécuter toutes les commandes du système d'exploitation.
Les schémas d'attaque pour l'injection de commandes dans les systèmes d'exploitation sont bien connus et documentés. Une application vulnérable est tout aussi susceptible d'être attaquée par des "script kiddies" que par des pirates professionnels. Les attaquants ayant très peu de compétences peuvent essayer de copier et de coller des commandes de système d'exploitation dans des applications pour voir ce qui se passe.
Obtenir un OK de sécurité contre les injections de commandes du système d'exploitation
Il existe plusieurs techniques efficaces pour empêcher les injections de commandes dans le système d'exploitation. La première étape consiste à exécuter les applications avec le minimum de privilèges nécessaires à l'accomplissement de leur fonction. Cela n'empêchera pas une attaque, mais si une brèche se produit, les dommages seront minimisés.
La plupart des langages de programmation et des frameworks fournissent des appels API pour les méthodes courantes du système d'exploitation, telles que l'énumération du contenu des répertoires, la création ou la lecture de fichiers sur le disque dur. Un moyen idéal d'éliminer les injections de commandes du système d'exploitation de votre environnement consiste à faire en sorte que toutes les applications utilisent ces appels d'API au lieu des commandes du système d'exploitation directement.
Lorsque cela n'est pas possible, validez les entrées de l'utilisateur avant de les utiliser dans les commandes du système d'exploitation. Les listes blanches peuvent être utilisées pour s'assurer que seul un petit ensemble de valeurs de confiance peut être utilisé. Techniquement, il est également possible d'utiliser une liste noire, mais les commandes autorisées étant probablement beaucoup moins nombreuses, l'établissement d'une liste blanche est presque toujours plus facile. N'oubliez pas d'inclure les paramètres POST et GET valides dans votre liste blanche, ainsi que les vecteurs d'entrée utilisateur souvent négligés comme les cookies.
Enfin, s'il n'existe pas d'API de programmation et qu'il n'est pas possible d'utiliser une liste blanche, utilisez une bibliothèque d'assainissement pour échapper à tout caractère spécial dans les entrées utilisateur avant de les utiliser dans les commandes du système d'exploitation.
Plus d'informations sur les attaques par injection de commandes du système d'exploitation
Pour en savoir plus, vous pouvez consulter l'article de l'OWASP sur les attaques par injection de commandes du système d'exploitation. Vous pouvez également mettre à l'épreuve vos nouvelles connaissances en matière de défense grâce à la démo gratuite de la plateforme Secure Code Warrior , qui forme les équipes de cybersécurité à devenir les meilleurs cyber-guerriers. Pour en savoir plus sur la manière de vaincre cette vulnérabilité et d'autres menaces, visitez le blogSecure Code Warrior .


OS コマンドインジェクション攻撃は、初級レベルの熟練度の低いハッカーが実行する可能性があり、セキュリティチームが経験する最も一般的な弱点の 1 つとなっています。ありがたいことに、攻撃を阻止するための非常に効果的な方法は数多くあります。
Jaap Karan Singhは、セキュア・コーディング・エバンジェリストであり、チーフ・シンであり、セキュア・コード・ウォリアーの共同創設者です。

Secure Code Warrior vous assiste dans la protection de votre code tout au long du cycle de vie du développement logiciel et dans la création d'une culture qui accorde la priorité à la cybersécurité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou professionnel de la sécurité, nous vous aidons à réduire les risques liés au code non sécurisé.
Veuillez réserver une démonstration.Jaap Karan Singhは、セキュア・コーディング・エバンジェリストであり、チーフ・シンであり、セキュア・コード・ウォリアーの共同創設者です。


Une attaque par injection de commande du système d'exploitation peut se produire lorsqu'une application permet aux utilisateurs de saisir des données dans un shell, mais ne prend aucune mesure pour vérifier que les chaînes de caractères saisies sont valides. Cela permet à un attaquant d'introduire des commandes directement dans le système d'exploitation hébergeant l'application, et ce quel que soit le niveau d'autorisation défini pour l'application compromise.
Les attaques par injection de commandes du système d'exploitation peuvent être réalisées par des pirates débutants ou peu qualifiés, ce qui en fait l'une des faiblesses les plus courantes auxquelles les équipes de sécurité sont confrontées. Heureusement, il existe plusieurs moyens très efficaces d'empêcher ces attaques de réussir. Dans cet épisode, nous allons apprendre :
Comment ils fonctionnent
Pourquoi ils sont si dangereux
Comment vous pouvez mettre en place des défenses pour les arrêter.
Comment les attaquants utilisent-ils l'injection de commandes dans le système d'exploitation ?
La première chose qu'un attaquant doit faire pour lancer une attaque par injection de commande de système d'exploitation est de localiser les entrées de l'utilisateur dans une application. Les formulaires que les utilisateurs remplissent sont potentiellement de bons points de départ. Les attaquants les plus astucieux peuvent également utiliser des éléments tels que les cookies ou même les en-têtes HTTP comme point de départ, un élément utilisé par presque toutes les applications ou tous les sites web.
La deuxième chose à faire est de déterminer le système d'exploitation qui héberge l'application. Étant donné qu'il n'existe qu'une poignée de choix, la méthode des essais et des erreurs peut très bien fonctionner pour cette phase. La plupart des serveurs d'application seront soit basés sur Windows (la version de Windows n'a normalement pas d'importance), soit sur un boîtier Linux, soit éventuellement sur Unix.
À ce stade, le pirate modifie l'entrée pour injecter une commande du système d'exploitation dans une entrée apparemment inoffensive. Cela peut inciter le système d'exploitation hôte à exécuter des commandes non souhaitées, quel que soit le niveau d'autorisation de l'application.
Par exemple, la commande suivante peut être utilisée par des utilisateurs valides au sein d'une application pour voir le contenu d'un fichier, dans ce cas les notes d'une réunion mensuelle du conseil d'administration.
exec("cat " + nom de fichier)
Dans notre exemple, la commande suivante sera exécutée et les notes de réunion seront renvoyées à l'utilisateur.
./cat MeetingNotes.txt
Trois membres du comité exécutif étaient présents à la réunion de juillet. Le nouveau projet de budget a été discuté, mais aucune action ou vote n'a été effectué.
C'est ce qui se produit lorsqu'un attaquant ajoute des commandes supplémentaires à la fin de l'entrée, comme celle utilisée pour lister le contenu d'un répertoire sous Linux. Dans ce cas, la commande originale, qui consiste à afficher les notes de réunion, est toujours exécutée. Mais l'utilisateur malveillant voit également tout ce qui se trouve dans le répertoire et les autres commandes qu'il peut utiliser dans le cadre d'attaques par injection de commandes du système d'exploitation. Il entre :
$ ./cat MeetingNotes.txt && ls
Et obtenez ceci à la place :
Trois membres du comité exécutif étaient présents à la réunion de juillet. Le nouveau projet de budget a été discuté, mais aucune action ou vote n'a été effectué.
MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c
Comme vous pouvez le voir, dans ce cas, non seulement le pirate a vu le contenu du répertoire, mais il a également reçu un menu d'autres commandes qu'il pouvait utiliser " des commandes qu'il sait maintenant pouvoir exécuter sur le système d'exploitation hôte ".
Pourquoi les attaques par injection de commande du système d'exploitation sont-elles si dangereuses ?
Permettre aux utilisateurs de contourner l'objectif de l'application ciblée et de l'utiliser pour exécuter des commandes du système d'exploitation est extrêmement risqué. Un pirate peut facilement réaliser des actions dévastatrices telles que le vol de données confidentielles ou le formatage de l'ensemble du disque du serveur, par exemple. Les options dont dispose un pirate ne sont limitées que par les commandes autorisées dans le système d'exploitation et par la créativité dont il fait preuve pour les utiliser.
Les commandes du système d'exploitation sont exécutées au même niveau d'autorisation que l'application. Les applications fonctionnant avec des privilèges administratifs signifient que les pirates qui les compromettent peuvent exécuter toutes les commandes du système d'exploitation.
Les schémas d'attaque pour l'injection de commandes dans les systèmes d'exploitation sont bien connus et documentés. Une application vulnérable est tout aussi susceptible d'être attaquée par des "script kiddies" que par des pirates professionnels. Les attaquants ayant très peu de compétences peuvent essayer de copier et de coller des commandes de système d'exploitation dans des applications pour voir ce qui se passe.
Obtenir un OK de sécurité contre les injections de commandes du système d'exploitation
Il existe plusieurs techniques efficaces pour empêcher les injections de commandes dans le système d'exploitation. La première étape consiste à exécuter les applications avec le minimum de privilèges nécessaires à l'accomplissement de leur fonction. Cela n'empêchera pas une attaque, mais si une brèche se produit, les dommages seront minimisés.
La plupart des langages de programmation et des frameworks fournissent des appels API pour les méthodes courantes du système d'exploitation, telles que l'énumération du contenu des répertoires, la création ou la lecture de fichiers sur le disque dur. Un moyen idéal d'éliminer les injections de commandes du système d'exploitation de votre environnement consiste à faire en sorte que toutes les applications utilisent ces appels d'API au lieu des commandes du système d'exploitation directement.
Lorsque cela n'est pas possible, validez les entrées de l'utilisateur avant de les utiliser dans les commandes du système d'exploitation. Les listes blanches peuvent être utilisées pour s'assurer que seul un petit ensemble de valeurs de confiance peut être utilisé. Techniquement, il est également possible d'utiliser une liste noire, mais les commandes autorisées étant probablement beaucoup moins nombreuses, l'établissement d'une liste blanche est presque toujours plus facile. N'oubliez pas d'inclure les paramètres POST et GET valides dans votre liste blanche, ainsi que les vecteurs d'entrée utilisateur souvent négligés comme les cookies.
Enfin, s'il n'existe pas d'API de programmation et qu'il n'est pas possible d'utiliser une liste blanche, utilisez une bibliothèque d'assainissement pour échapper à tout caractère spécial dans les entrées utilisateur avant de les utiliser dans les commandes du système d'exploitation.
Plus d'informations sur les attaques par injection de commandes du système d'exploitation
Pour en savoir plus, vous pouvez consulter l'article de l'OWASP sur les attaques par injection de commandes du système d'exploitation. Vous pouvez également mettre à l'épreuve vos nouvelles connaissances en matière de défense grâce à la démo gratuite de la plateforme Secure Code Warrior , qui forme les équipes de cybersécurité à devenir les meilleurs cyber-guerriers. Pour en savoir plus sur la manière de vaincre cette vulnérabilité et d'autres menaces, visitez le blogSecure Code Warrior .

Une attaque par injection de commande du système d'exploitation peut se produire lorsqu'une application permet aux utilisateurs de saisir des données dans un shell, mais ne prend aucune mesure pour vérifier que les chaînes de caractères saisies sont valides. Cela permet à un attaquant d'introduire des commandes directement dans le système d'exploitation hébergeant l'application, et ce quel que soit le niveau d'autorisation défini pour l'application compromise.
Les attaques par injection de commandes du système d'exploitation peuvent être réalisées par des pirates débutants ou peu qualifiés, ce qui en fait l'une des faiblesses les plus courantes auxquelles les équipes de sécurité sont confrontées. Heureusement, il existe plusieurs moyens très efficaces d'empêcher ces attaques de réussir. Dans cet épisode, nous allons apprendre :
Comment ils fonctionnent
Pourquoi ils sont si dangereux
Comment vous pouvez mettre en place des défenses pour les arrêter.
Comment les attaquants utilisent-ils l'injection de commandes dans le système d'exploitation ?
La première chose qu'un attaquant doit faire pour lancer une attaque par injection de commande de système d'exploitation est de localiser les entrées de l'utilisateur dans une application. Les formulaires que les utilisateurs remplissent sont potentiellement de bons points de départ. Les attaquants les plus astucieux peuvent également utiliser des éléments tels que les cookies ou même les en-têtes HTTP comme point de départ, un élément utilisé par presque toutes les applications ou tous les sites web.
La deuxième chose à faire est de déterminer le système d'exploitation qui héberge l'application. Étant donné qu'il n'existe qu'une poignée de choix, la méthode des essais et des erreurs peut très bien fonctionner pour cette phase. La plupart des serveurs d'application seront soit basés sur Windows (la version de Windows n'a normalement pas d'importance), soit sur un boîtier Linux, soit éventuellement sur Unix.
À ce stade, le pirate modifie l'entrée pour injecter une commande du système d'exploitation dans une entrée apparemment inoffensive. Cela peut inciter le système d'exploitation hôte à exécuter des commandes non souhaitées, quel que soit le niveau d'autorisation de l'application.
Par exemple, la commande suivante peut être utilisée par des utilisateurs valides au sein d'une application pour voir le contenu d'un fichier, dans ce cas les notes d'une réunion mensuelle du conseil d'administration.
exec("cat " + nom de fichier)
Dans notre exemple, la commande suivante sera exécutée et les notes de réunion seront renvoyées à l'utilisateur.
./cat MeetingNotes.txt
Trois membres du comité exécutif étaient présents à la réunion de juillet. Le nouveau projet de budget a été discuté, mais aucune action ou vote n'a été effectué.
C'est ce qui se produit lorsqu'un attaquant ajoute des commandes supplémentaires à la fin de l'entrée, comme celle utilisée pour lister le contenu d'un répertoire sous Linux. Dans ce cas, la commande originale, qui consiste à afficher les notes de réunion, est toujours exécutée. Mais l'utilisateur malveillant voit également tout ce qui se trouve dans le répertoire et les autres commandes qu'il peut utiliser dans le cadre d'attaques par injection de commandes du système d'exploitation. Il entre :
$ ./cat MeetingNotes.txt && ls
Et obtenez ceci à la place :
Trois membres du comité exécutif étaient présents à la réunion de juillet. Le nouveau projet de budget a été discuté, mais aucune action ou vote n'a été effectué.
MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c
Comme vous pouvez le voir, dans ce cas, non seulement le pirate a vu le contenu du répertoire, mais il a également reçu un menu d'autres commandes qu'il pouvait utiliser " des commandes qu'il sait maintenant pouvoir exécuter sur le système d'exploitation hôte ".
Pourquoi les attaques par injection de commande du système d'exploitation sont-elles si dangereuses ?
Permettre aux utilisateurs de contourner l'objectif de l'application ciblée et de l'utiliser pour exécuter des commandes du système d'exploitation est extrêmement risqué. Un pirate peut facilement réaliser des actions dévastatrices telles que le vol de données confidentielles ou le formatage de l'ensemble du disque du serveur, par exemple. Les options dont dispose un pirate ne sont limitées que par les commandes autorisées dans le système d'exploitation et par la créativité dont il fait preuve pour les utiliser.
Les commandes du système d'exploitation sont exécutées au même niveau d'autorisation que l'application. Les applications fonctionnant avec des privilèges administratifs signifient que les pirates qui les compromettent peuvent exécuter toutes les commandes du système d'exploitation.
Les schémas d'attaque pour l'injection de commandes dans les systèmes d'exploitation sont bien connus et documentés. Une application vulnérable est tout aussi susceptible d'être attaquée par des "script kiddies" que par des pirates professionnels. Les attaquants ayant très peu de compétences peuvent essayer de copier et de coller des commandes de système d'exploitation dans des applications pour voir ce qui se passe.
Obtenir un OK de sécurité contre les injections de commandes du système d'exploitation
Il existe plusieurs techniques efficaces pour empêcher les injections de commandes dans le système d'exploitation. La première étape consiste à exécuter les applications avec le minimum de privilèges nécessaires à l'accomplissement de leur fonction. Cela n'empêchera pas une attaque, mais si une brèche se produit, les dommages seront minimisés.
La plupart des langages de programmation et des frameworks fournissent des appels API pour les méthodes courantes du système d'exploitation, telles que l'énumération du contenu des répertoires, la création ou la lecture de fichiers sur le disque dur. Un moyen idéal d'éliminer les injections de commandes du système d'exploitation de votre environnement consiste à faire en sorte que toutes les applications utilisent ces appels d'API au lieu des commandes du système d'exploitation directement.
Lorsque cela n'est pas possible, validez les entrées de l'utilisateur avant de les utiliser dans les commandes du système d'exploitation. Les listes blanches peuvent être utilisées pour s'assurer que seul un petit ensemble de valeurs de confiance peut être utilisé. Techniquement, il est également possible d'utiliser une liste noire, mais les commandes autorisées étant probablement beaucoup moins nombreuses, l'établissement d'une liste blanche est presque toujours plus facile. N'oubliez pas d'inclure les paramètres POST et GET valides dans votre liste blanche, ainsi que les vecteurs d'entrée utilisateur souvent négligés comme les cookies.
Enfin, s'il n'existe pas d'API de programmation et qu'il n'est pas possible d'utiliser une liste blanche, utilisez une bibliothèque d'assainissement pour échapper à tout caractère spécial dans les entrées utilisateur avant de les utiliser dans les commandes du système d'exploitation.
Plus d'informations sur les attaques par injection de commandes du système d'exploitation
Pour en savoir plus, vous pouvez consulter l'article de l'OWASP sur les attaques par injection de commandes du système d'exploitation. Vous pouvez également mettre à l'épreuve vos nouvelles connaissances en matière de défense grâce à la démo gratuite de la plateforme Secure Code Warrior , qui forme les équipes de cybersécurité à devenir les meilleurs cyber-guerriers. Pour en savoir plus sur la manière de vaincre cette vulnérabilité et d'autres menaces, visitez le blogSecure Code Warrior .

Veuillez cliquer sur le lien ci-dessous pour télécharger le PDF de cette ressource.
Secure Code Warrior vous assiste dans la protection de votre code tout au long du cycle de vie du développement logiciel et dans la création d'une culture qui accorde la priorité à la cybersécurité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou professionnel de la sécurité, nous vous aidons à réduire les risques liés au code non sécurisé.
Afficher le rapportVeuillez réserver une démonstration.Jaap Karan Singhは、セキュア・コーディング・エバンジェリストであり、チーフ・シンであり、セキュア・コード・ウォリアーの共同創設者です。
Une attaque par injection de commande du système d'exploitation peut se produire lorsqu'une application permet aux utilisateurs de saisir des données dans un shell, mais ne prend aucune mesure pour vérifier que les chaînes de caractères saisies sont valides. Cela permet à un attaquant d'introduire des commandes directement dans le système d'exploitation hébergeant l'application, et ce quel que soit le niveau d'autorisation défini pour l'application compromise.
Les attaques par injection de commandes du système d'exploitation peuvent être réalisées par des pirates débutants ou peu qualifiés, ce qui en fait l'une des faiblesses les plus courantes auxquelles les équipes de sécurité sont confrontées. Heureusement, il existe plusieurs moyens très efficaces d'empêcher ces attaques de réussir. Dans cet épisode, nous allons apprendre :
Comment ils fonctionnent
Pourquoi ils sont si dangereux
Comment vous pouvez mettre en place des défenses pour les arrêter.
Comment les attaquants utilisent-ils l'injection de commandes dans le système d'exploitation ?
La première chose qu'un attaquant doit faire pour lancer une attaque par injection de commande de système d'exploitation est de localiser les entrées de l'utilisateur dans une application. Les formulaires que les utilisateurs remplissent sont potentiellement de bons points de départ. Les attaquants les plus astucieux peuvent également utiliser des éléments tels que les cookies ou même les en-têtes HTTP comme point de départ, un élément utilisé par presque toutes les applications ou tous les sites web.
La deuxième chose à faire est de déterminer le système d'exploitation qui héberge l'application. Étant donné qu'il n'existe qu'une poignée de choix, la méthode des essais et des erreurs peut très bien fonctionner pour cette phase. La plupart des serveurs d'application seront soit basés sur Windows (la version de Windows n'a normalement pas d'importance), soit sur un boîtier Linux, soit éventuellement sur Unix.
À ce stade, le pirate modifie l'entrée pour injecter une commande du système d'exploitation dans une entrée apparemment inoffensive. Cela peut inciter le système d'exploitation hôte à exécuter des commandes non souhaitées, quel que soit le niveau d'autorisation de l'application.
Par exemple, la commande suivante peut être utilisée par des utilisateurs valides au sein d'une application pour voir le contenu d'un fichier, dans ce cas les notes d'une réunion mensuelle du conseil d'administration.
exec("cat " + nom de fichier)
Dans notre exemple, la commande suivante sera exécutée et les notes de réunion seront renvoyées à l'utilisateur.
./cat MeetingNotes.txt
Trois membres du comité exécutif étaient présents à la réunion de juillet. Le nouveau projet de budget a été discuté, mais aucune action ou vote n'a été effectué.
C'est ce qui se produit lorsqu'un attaquant ajoute des commandes supplémentaires à la fin de l'entrée, comme celle utilisée pour lister le contenu d'un répertoire sous Linux. Dans ce cas, la commande originale, qui consiste à afficher les notes de réunion, est toujours exécutée. Mais l'utilisateur malveillant voit également tout ce qui se trouve dans le répertoire et les autres commandes qu'il peut utiliser dans le cadre d'attaques par injection de commandes du système d'exploitation. Il entre :
$ ./cat MeetingNotes.txt && ls
Et obtenez ceci à la place :
Trois membres du comité exécutif étaient présents à la réunion de juillet. Le nouveau projet de budget a été discuté, mais aucune action ou vote n'a été effectué.
MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c
Comme vous pouvez le voir, dans ce cas, non seulement le pirate a vu le contenu du répertoire, mais il a également reçu un menu d'autres commandes qu'il pouvait utiliser " des commandes qu'il sait maintenant pouvoir exécuter sur le système d'exploitation hôte ".
Pourquoi les attaques par injection de commande du système d'exploitation sont-elles si dangereuses ?
Permettre aux utilisateurs de contourner l'objectif de l'application ciblée et de l'utiliser pour exécuter des commandes du système d'exploitation est extrêmement risqué. Un pirate peut facilement réaliser des actions dévastatrices telles que le vol de données confidentielles ou le formatage de l'ensemble du disque du serveur, par exemple. Les options dont dispose un pirate ne sont limitées que par les commandes autorisées dans le système d'exploitation et par la créativité dont il fait preuve pour les utiliser.
Les commandes du système d'exploitation sont exécutées au même niveau d'autorisation que l'application. Les applications fonctionnant avec des privilèges administratifs signifient que les pirates qui les compromettent peuvent exécuter toutes les commandes du système d'exploitation.
Les schémas d'attaque pour l'injection de commandes dans les systèmes d'exploitation sont bien connus et documentés. Une application vulnérable est tout aussi susceptible d'être attaquée par des "script kiddies" que par des pirates professionnels. Les attaquants ayant très peu de compétences peuvent essayer de copier et de coller des commandes de système d'exploitation dans des applications pour voir ce qui se passe.
Obtenir un OK de sécurité contre les injections de commandes du système d'exploitation
Il existe plusieurs techniques efficaces pour empêcher les injections de commandes dans le système d'exploitation. La première étape consiste à exécuter les applications avec le minimum de privilèges nécessaires à l'accomplissement de leur fonction. Cela n'empêchera pas une attaque, mais si une brèche se produit, les dommages seront minimisés.
La plupart des langages de programmation et des frameworks fournissent des appels API pour les méthodes courantes du système d'exploitation, telles que l'énumération du contenu des répertoires, la création ou la lecture de fichiers sur le disque dur. Un moyen idéal d'éliminer les injections de commandes du système d'exploitation de votre environnement consiste à faire en sorte que toutes les applications utilisent ces appels d'API au lieu des commandes du système d'exploitation directement.
Lorsque cela n'est pas possible, validez les entrées de l'utilisateur avant de les utiliser dans les commandes du système d'exploitation. Les listes blanches peuvent être utilisées pour s'assurer que seul un petit ensemble de valeurs de confiance peut être utilisé. Techniquement, il est également possible d'utiliser une liste noire, mais les commandes autorisées étant probablement beaucoup moins nombreuses, l'établissement d'une liste blanche est presque toujours plus facile. N'oubliez pas d'inclure les paramètres POST et GET valides dans votre liste blanche, ainsi que les vecteurs d'entrée utilisateur souvent négligés comme les cookies.
Enfin, s'il n'existe pas d'API de programmation et qu'il n'est pas possible d'utiliser une liste blanche, utilisez une bibliothèque d'assainissement pour échapper à tout caractère spécial dans les entrées utilisateur avant de les utiliser dans les commandes du système d'exploitation.
Plus d'informations sur les attaques par injection de commandes du système d'exploitation
Pour en savoir plus, vous pouvez consulter l'article de l'OWASP sur les attaques par injection de commandes du système d'exploitation. Vous pouvez également mettre à l'épreuve vos nouvelles connaissances en matière de défense grâce à la démo gratuite de la plateforme Secure Code Warrior , qui forme les équipes de cybersécurité à devenir les meilleurs cyber-guerriers. Pour en savoir plus sur la manière de vaincre cette vulnérabilité et d'autres menaces, visitez le blogSecure Code Warrior .
Table des matières
Jaap Karan Singhは、セキュア・コーディング・エバンジェリストであり、チーフ・シンであり、セキュア・コード・ウォリアーの共同創設者です。

Secure Code Warrior vous assiste dans la protection de votre code tout au long du cycle de vie du développement logiciel et dans la création d'une culture qui accorde la priorité à la cybersécurité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou professionnel de la sécurité, nous vous aidons à réduire les risques liés au code non sécurisé.
Veuillez réserver une démonstration.[Télécharger]Ressources pour débuter
Sujets et contenu de la formation sur le code sécurisé
Notre contenu, leader dans le secteur, évolue constamment en fonction de l'environnement de développement logiciel en constante mutation, tout en tenant compte du rôle de nos clients. Il couvre tous les sujets, de l'IA à l'injection XQuery, et s'adresse à divers rôles, des architectes et ingénieurs aux chefs de produit et responsables de l'assurance qualité. Nous vous invitons à consulter le catalogue de contenu pour découvrir son contenu par sujet et par rôle.
La Chambre de commerce établit la norme en matière de sécurité à grande échelle axée sur les développeurs
La Chambre de commerce néerlandaise explique comment elle a intégré le codage sécurisé dans le développement quotidien grâce à des certifications basées sur les rôles, à l'évaluation comparative du Trust Score et à une culture de responsabilité partagée en matière de sécurité.
Modélisation des menaces avec l'IA : transformer chaque développeur en modélisateur de menaces
Vous repartirez mieux équipé pour aider les développeurs à combiner les idées et les techniques de modélisation des menaces avec les outils d'IA qu'ils utilisent déjà pour renforcer la sécurité, améliorer la collaboration et créer des logiciels plus résilients dès le départ.
Ressources pour débuter
Cybermon est de retour : la mission IA consistant à vaincre le boss est désormais disponible à la demande.
Cybermon 2025 Beat the Boss est désormais disponible toute l'année sur SCW. Renforcez considérablement le développement sécurisé de l'IA en introduisant des défis de sécurité avancés en matière d'IA/LLM.
Explication de la loi sur la cyber-résilience : implications pour le développement de logiciels sécurisés dès la conception
Découvrez les exigences de la loi européenne sur la résilience cybernétique (CRA), à qui elle s'applique et comment les équipes d'ingénierie peuvent se préparer en matière de pratiques de sécurité dès la conception, de prévention des vulnérabilités et de développement des compétences des développeurs.
Facilitateur 1 : Critères de réussite prédéfinis et mesurables
Enabler 1 est le premier volet d'une série de dix intitulée « Enablers of Success » (Les catalyseurs de la réussite). Il présente comment associer le codage sécurisé à des résultats commerciaux tels que la réduction des risques et l'accélération des processus afin de faire évoluer le programme à long terme.




%20(1).avif)
.avif)
