Blog

Les codeurs vainquent la sécurité : Série "Partager et apprendre" - Injection de code

Jaap Karan Singh
Publié le 16 mai 2019

Les attaques par injection de code sont parmi les plus courantes, et aussi les plus dangereuses, que rencontrent de nombreux sites web et applications. Elles varient en termes de sophistication et de dangerosité, mais presque tous les sites ou applications qui acceptent des données d'entrée de l'utilisateur peuvent être vulnérables. En fait, presque tous les défenseurs de la cybersécurité seront confrontés à ce type d'attaque à un moment ou à un autre de leur carrière, et probablement à plusieurs reprises.

Une attaque par injection de code peut se produire chaque fois qu'une application ou un site web accepte une entrée de la part des utilisateurs. Il peut s'agir simplement de fournir une fonction de recherche ou de demander à un utilisateur de saisir ses informations d'identification. L'attaque se produit lorsqu'un utilisateur malveillant saisit un code dans le champ ouvert au lieu d'une saisie de texte normale. L'objectif est de faire en sorte que le serveur prenne l'entrée pour un code valide, puis exécute les fonctions souhaitées par l'attaquant.

Si les attaques par injection de code sont extrêmement courantes, les défenses disponibles pour les arrêter le sont tout autant. Dans cet épisode, vous apprendrez

  • 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 code ?

Bien que les détails spécifiques des attaques par injection de code varient en fonction du langage de programmation utilisé, toute application ou site web peut être vulnérable dès lors qu'il permet à un utilisateur de saisir des données. Des attaques par injection de code ont été déclenchées pour SQL, HTML, XML, CSS et tout autre langage de programmation courant.

Tout d'abord, un attaquant doit localiser le code vulnérable dans une application, normalement à un endroit où les utilisateurs sont autorisés à saisir leurs propres données. Par exemple, ce code prend la fonction PHP eval() et la transmet à un utilisateur pour qu'il la modifie, sans aucune sorte de validation de la chaîne de retour.

$myvar = "varname" ;
$x = $_GET[arg] ;
eval("\$myvar = \$x ;") ;

Un attaquant malin pourrait facilement ajouter sa propre chaîne à la fonction eval, et même exécuter des commandes système s'il le souhaite.

/index.php?arg=1 ; system(id)

Il est important de noter que si les attaques par injection de code peuvent impliquer l'envoi de commandes système, elles ne se limitent pas à cela. En fait, avec les attaques par injection de code, les pirates ne sont limités que par la fonctionnalité du langage lui-même. Dans notre exemple, un pirate pourrait programmer le système ciblé pour qu'il fasse presque tout ce qui est autorisé par le framework PHP.

Pourquoi les attaques par injection de code sont-elles si dangereuses ?

Les attaques par injection de code sont potentiellement très dangereuses en fonction des compétences de l'attaquant. Il peut faire tout ce que le langage de programmation permet, ce qui le met sur un pied d'égalité avec les programmeurs de l'application. Un attaquant peut pratiquement écrire sa propre application et la faire exécuter dans l'environnement cible.

Même les attaquants les moins compétents peuvent être dangereux. Au lieu d'écrire leurs propres applications ou chaînes de code, ils peuvent simplement ordonner au système ciblé d'accepter et d'installer des logiciels malveillants préprogrammés. Cela peut conduire à la défiguration d'un site, à des attaques par ransomware ou même devenir la base d'une campagne d'hameçonnage visant les utilisateurs du site.

La plupart du temps, les attaques par injection de code sont utilisées pour voler des éléments tels que des listes d'utilisateurs et des mots de passe, ou pour obtenir une reconnaissance précieuse dans un système ciblé pour une compromission ultérieure. Mais attention, un programmeur habile peut faire presque n'importe quoi avec une attaque par injection de code, c'est pourquoi il est essentiel que chaque instance potentielle de ces attaques soit découverte et supprimée de votre environnement.

Ne faites confiance à personne ! (Ou du moins, pas les utilisateurs)

Lors de l'élimination des vulnérabilités liées aux attaques par injection de code, le premier endroit à examiner est tout endroit où l'on demande ou autorise une entrée de la part de l'utilisateur. Tout ce qui est saisi par un utilisateur n'est en aucun cas digne de confiance. Si vous autorisez l'entrée d'un utilisateur sans filtrage ou examen, vous invitez en fait les attaquants à tenter de compromettre votre système ou même votre réseau.

Bien que cela ne soit pas toujours possible, la meilleure façon de contrecarrer les attaques par injection de code est d'empêcher les fonctions d'exécuter ou d'interpréter directement les entrées de l'utilisateur. Les utilisateurs peuvent se voir proposer un choix d'options statiques au lieu d'être libres de saisir leurs propres requêtes, l'application étant programmée pour n'accepter que ces choix limités comme étant valides. Il n'est pas toujours approprié de procéder de la sorte, mais lorsque c'est possible, cela permet d'éliminer les injections de code avant qu'elles ne commencent.

Dans les domaines où les utilisateurs doivent saisir leurs propres données, des contrôles stricts doivent être mis en place sur ces données. Partir du principe que tout est une attaque potentielle est un bon point de départ. L'application de politiques de moindre privilège, telles que l'accès des utilisateurs en lecture seule, tant du côté client que du côté serveur, peut empêcher l'exécution de la plupart des codes.

L'autre bonne défense consiste à mettre en place des filtres à l'échelle de l'application et à assainir toutes les entrées de l'utilisateur. Les développeurs sont conscients des attaques par injection de code depuis des années, et il existe des bibliothèques de filtres éprouvés pour chaque cadre et chaque langage. Lorsque vous appliquez ces filtres, veillez à le faire non seulement sur les zones d'entrée utilisateur évidentes ou sur les paramètres courants tels que les commandes Get et Post, mais aussi sur les cookies et les en-têtes HTTP.

Application d'une correction pour l'injection de code

En supprimant les zones d'entrée utilisateur inutiles de votre environnement, en appliquant les principes du moindre privilège et en utilisant les derniers outils de filtrage et d'assainissement pour inspecter et détecter les attaques potentielles, vous pouvez fermer la porte à cette dangereuse vulnérabilité. L'attitude consistant à ne jamais faire confiance aux données saisies par l'utilisateur vous sera également très utile à l'avenir. Faites tout cela et vous aurez une longueur d'avance sur ce type d'attaque dangereuse.

Pour en savoir plus, vous pouvez consulter l'article de l'OWASP sur l' injection de code. 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é pour qu'elles deviennent 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 .

Affrontez l'injection de code de front, dès maintenant. Relevez le défi sur notre plateforme de formation ludique : [Commencez ici]

Voir la ressource
Voir la ressource

Les attaques par injection de code sont parmi les plus courantes, et aussi les plus dangereuses, que rencontrent de nombreux sites web et applications. Elles varient en termes de sophistication et de dangerosité, mais presque tous les sites ou applications qui acceptent des données d'entrée de l'utilisateur peuvent être vulnérables.

Vous souhaitez en savoir plus ?

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

Secure Code Warrior est là pour vous aider à sécuriser le code tout au long du cycle de vie du développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Réservez une démonstration
Partager sur :
Auteur
Jaap Karan Singh
Publié le 16 mai 2019

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

Partager sur :

Les attaques par injection de code sont parmi les plus courantes, et aussi les plus dangereuses, que rencontrent de nombreux sites web et applications. Elles varient en termes de sophistication et de dangerosité, mais presque tous les sites ou applications qui acceptent des données d'entrée de l'utilisateur peuvent être vulnérables. En fait, presque tous les défenseurs de la cybersécurité seront confrontés à ce type d'attaque à un moment ou à un autre de leur carrière, et probablement à plusieurs reprises.

Une attaque par injection de code peut se produire chaque fois qu'une application ou un site web accepte une entrée de la part des utilisateurs. Il peut s'agir simplement de fournir une fonction de recherche ou de demander à un utilisateur de saisir ses informations d'identification. L'attaque se produit lorsqu'un utilisateur malveillant saisit un code dans le champ ouvert au lieu d'une saisie de texte normale. L'objectif est de faire en sorte que le serveur prenne l'entrée pour un code valide, puis exécute les fonctions souhaitées par l'attaquant.

Si les attaques par injection de code sont extrêmement courantes, les défenses disponibles pour les arrêter le sont tout autant. Dans cet épisode, vous apprendrez

  • 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 code ?

Bien que les détails spécifiques des attaques par injection de code varient en fonction du langage de programmation utilisé, toute application ou site web peut être vulnérable dès lors qu'il permet à un utilisateur de saisir des données. Des attaques par injection de code ont été déclenchées pour SQL, HTML, XML, CSS et tout autre langage de programmation courant.

Tout d'abord, un attaquant doit localiser le code vulnérable dans une application, normalement à un endroit où les utilisateurs sont autorisés à saisir leurs propres données. Par exemple, ce code prend la fonction PHP eval() et la transmet à un utilisateur pour qu'il la modifie, sans aucune sorte de validation de la chaîne de retour.

$myvar = "varname" ;
$x = $_GET[arg] ;
eval("\$myvar = \$x ;") ;

Un attaquant malin pourrait facilement ajouter sa propre chaîne à la fonction eval, et même exécuter des commandes système s'il le souhaite.

/index.php?arg=1 ; system(id)

Il est important de noter que si les attaques par injection de code peuvent impliquer l'envoi de commandes système, elles ne se limitent pas à cela. En fait, avec les attaques par injection de code, les pirates ne sont limités que par la fonctionnalité du langage lui-même. Dans notre exemple, un pirate pourrait programmer le système ciblé pour qu'il fasse presque tout ce qui est autorisé par le framework PHP.

Pourquoi les attaques par injection de code sont-elles si dangereuses ?

Les attaques par injection de code sont potentiellement très dangereuses en fonction des compétences de l'attaquant. Il peut faire tout ce que le langage de programmation permet, ce qui le met sur un pied d'égalité avec les programmeurs de l'application. Un attaquant peut pratiquement écrire sa propre application et la faire exécuter dans l'environnement cible.

Même les attaquants les moins compétents peuvent être dangereux. Au lieu d'écrire leurs propres applications ou chaînes de code, ils peuvent simplement ordonner au système ciblé d'accepter et d'installer des logiciels malveillants préprogrammés. Cela peut conduire à la défiguration d'un site, à des attaques par ransomware ou même devenir la base d'une campagne d'hameçonnage visant les utilisateurs du site.

La plupart du temps, les attaques par injection de code sont utilisées pour voler des éléments tels que des listes d'utilisateurs et des mots de passe, ou pour obtenir une reconnaissance précieuse dans un système ciblé pour une compromission ultérieure. Mais attention, un programmeur habile peut faire presque n'importe quoi avec une attaque par injection de code, c'est pourquoi il est essentiel que chaque instance potentielle de ces attaques soit découverte et supprimée de votre environnement.

Ne faites confiance à personne ! (Ou du moins, pas les utilisateurs)

Lors de l'élimination des vulnérabilités liées aux attaques par injection de code, le premier endroit à examiner est tout endroit où l'on demande ou autorise une entrée de la part de l'utilisateur. Tout ce qui est saisi par un utilisateur n'est en aucun cas digne de confiance. Si vous autorisez l'entrée d'un utilisateur sans filtrage ou examen, vous invitez en fait les attaquants à tenter de compromettre votre système ou même votre réseau.

Bien que cela ne soit pas toujours possible, la meilleure façon de contrecarrer les attaques par injection de code est d'empêcher les fonctions d'exécuter ou d'interpréter directement les entrées de l'utilisateur. Les utilisateurs peuvent se voir proposer un choix d'options statiques au lieu d'être libres de saisir leurs propres requêtes, l'application étant programmée pour n'accepter que ces choix limités comme étant valides. Il n'est pas toujours approprié de procéder de la sorte, mais lorsque c'est possible, cela permet d'éliminer les injections de code avant qu'elles ne commencent.

Dans les domaines où les utilisateurs doivent saisir leurs propres données, des contrôles stricts doivent être mis en place sur ces données. Partir du principe que tout est une attaque potentielle est un bon point de départ. L'application de politiques de moindre privilège, telles que l'accès des utilisateurs en lecture seule, tant du côté client que du côté serveur, peut empêcher l'exécution de la plupart des codes.

L'autre bonne défense consiste à mettre en place des filtres à l'échelle de l'application et à assainir toutes les entrées de l'utilisateur. Les développeurs sont conscients des attaques par injection de code depuis des années, et il existe des bibliothèques de filtres éprouvés pour chaque cadre et chaque langage. Lorsque vous appliquez ces filtres, veillez à le faire non seulement sur les zones d'entrée utilisateur évidentes ou sur les paramètres courants tels que les commandes Get et Post, mais aussi sur les cookies et les en-têtes HTTP.

Application d'une correction pour l'injection de code

En supprimant les zones d'entrée utilisateur inutiles de votre environnement, en appliquant les principes du moindre privilège et en utilisant les derniers outils de filtrage et d'assainissement pour inspecter et détecter les attaques potentielles, vous pouvez fermer la porte à cette dangereuse vulnérabilité. L'attitude consistant à ne jamais faire confiance aux données saisies par l'utilisateur vous sera également très utile à l'avenir. Faites tout cela et vous aurez une longueur d'avance sur ce type d'attaque dangereuse.

Pour en savoir plus, vous pouvez consulter l'article de l'OWASP sur l' injection de code. 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é pour qu'elles deviennent 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 .

Affrontez l'injection de code de front, dès maintenant. Relevez le défi sur notre plateforme de formation ludique : [Commencez ici]

Voir la ressource
Voir la ressource

Remplissez le formulaire ci-dessous pour télécharger le rapport

Nous aimerions que vous nous autorisiez à vous envoyer des informations sur nos produits et/ou sur des sujets liés au codage sécurisé. Nous traiterons toujours vos données personnelles avec le plus grand soin et ne les vendrons jamais à d'autres entreprises à des fins de marketing.

Soumettre
Pour soumettre le formulaire, veuillez activer les cookies "Analytics". N'hésitez pas à les désactiver à nouveau une fois que vous aurez terminé.

Les attaques par injection de code sont parmi les plus courantes, et aussi les plus dangereuses, que rencontrent de nombreux sites web et applications. Elles varient en termes de sophistication et de dangerosité, mais presque tous les sites ou applications qui acceptent des données d'entrée de l'utilisateur peuvent être vulnérables. En fait, presque tous les défenseurs de la cybersécurité seront confrontés à ce type d'attaque à un moment ou à un autre de leur carrière, et probablement à plusieurs reprises.

Une attaque par injection de code peut se produire chaque fois qu'une application ou un site web accepte une entrée de la part des utilisateurs. Il peut s'agir simplement de fournir une fonction de recherche ou de demander à un utilisateur de saisir ses informations d'identification. L'attaque se produit lorsqu'un utilisateur malveillant saisit un code dans le champ ouvert au lieu d'une saisie de texte normale. L'objectif est de faire en sorte que le serveur prenne l'entrée pour un code valide, puis exécute les fonctions souhaitées par l'attaquant.

Si les attaques par injection de code sont extrêmement courantes, les défenses disponibles pour les arrêter le sont tout autant. Dans cet épisode, vous apprendrez

  • 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 code ?

Bien que les détails spécifiques des attaques par injection de code varient en fonction du langage de programmation utilisé, toute application ou site web peut être vulnérable dès lors qu'il permet à un utilisateur de saisir des données. Des attaques par injection de code ont été déclenchées pour SQL, HTML, XML, CSS et tout autre langage de programmation courant.

Tout d'abord, un attaquant doit localiser le code vulnérable dans une application, normalement à un endroit où les utilisateurs sont autorisés à saisir leurs propres données. Par exemple, ce code prend la fonction PHP eval() et la transmet à un utilisateur pour qu'il la modifie, sans aucune sorte de validation de la chaîne de retour.

$myvar = "varname" ;
$x = $_GET[arg] ;
eval("\$myvar = \$x ;") ;

Un attaquant malin pourrait facilement ajouter sa propre chaîne à la fonction eval, et même exécuter des commandes système s'il le souhaite.

/index.php?arg=1 ; system(id)

Il est important de noter que si les attaques par injection de code peuvent impliquer l'envoi de commandes système, elles ne se limitent pas à cela. En fait, avec les attaques par injection de code, les pirates ne sont limités que par la fonctionnalité du langage lui-même. Dans notre exemple, un pirate pourrait programmer le système ciblé pour qu'il fasse presque tout ce qui est autorisé par le framework PHP.

Pourquoi les attaques par injection de code sont-elles si dangereuses ?

Les attaques par injection de code sont potentiellement très dangereuses en fonction des compétences de l'attaquant. Il peut faire tout ce que le langage de programmation permet, ce qui le met sur un pied d'égalité avec les programmeurs de l'application. Un attaquant peut pratiquement écrire sa propre application et la faire exécuter dans l'environnement cible.

Même les attaquants les moins compétents peuvent être dangereux. Au lieu d'écrire leurs propres applications ou chaînes de code, ils peuvent simplement ordonner au système ciblé d'accepter et d'installer des logiciels malveillants préprogrammés. Cela peut conduire à la défiguration d'un site, à des attaques par ransomware ou même devenir la base d'une campagne d'hameçonnage visant les utilisateurs du site.

La plupart du temps, les attaques par injection de code sont utilisées pour voler des éléments tels que des listes d'utilisateurs et des mots de passe, ou pour obtenir une reconnaissance précieuse dans un système ciblé pour une compromission ultérieure. Mais attention, un programmeur habile peut faire presque n'importe quoi avec une attaque par injection de code, c'est pourquoi il est essentiel que chaque instance potentielle de ces attaques soit découverte et supprimée de votre environnement.

Ne faites confiance à personne ! (Ou du moins, pas les utilisateurs)

Lors de l'élimination des vulnérabilités liées aux attaques par injection de code, le premier endroit à examiner est tout endroit où l'on demande ou autorise une entrée de la part de l'utilisateur. Tout ce qui est saisi par un utilisateur n'est en aucun cas digne de confiance. Si vous autorisez l'entrée d'un utilisateur sans filtrage ou examen, vous invitez en fait les attaquants à tenter de compromettre votre système ou même votre réseau.

Bien que cela ne soit pas toujours possible, la meilleure façon de contrecarrer les attaques par injection de code est d'empêcher les fonctions d'exécuter ou d'interpréter directement les entrées de l'utilisateur. Les utilisateurs peuvent se voir proposer un choix d'options statiques au lieu d'être libres de saisir leurs propres requêtes, l'application étant programmée pour n'accepter que ces choix limités comme étant valides. Il n'est pas toujours approprié de procéder de la sorte, mais lorsque c'est possible, cela permet d'éliminer les injections de code avant qu'elles ne commencent.

Dans les domaines où les utilisateurs doivent saisir leurs propres données, des contrôles stricts doivent être mis en place sur ces données. Partir du principe que tout est une attaque potentielle est un bon point de départ. L'application de politiques de moindre privilège, telles que l'accès des utilisateurs en lecture seule, tant du côté client que du côté serveur, peut empêcher l'exécution de la plupart des codes.

L'autre bonne défense consiste à mettre en place des filtres à l'échelle de l'application et à assainir toutes les entrées de l'utilisateur. Les développeurs sont conscients des attaques par injection de code depuis des années, et il existe des bibliothèques de filtres éprouvés pour chaque cadre et chaque langage. Lorsque vous appliquez ces filtres, veillez à le faire non seulement sur les zones d'entrée utilisateur évidentes ou sur les paramètres courants tels que les commandes Get et Post, mais aussi sur les cookies et les en-têtes HTTP.

Application d'une correction pour l'injection de code

En supprimant les zones d'entrée utilisateur inutiles de votre environnement, en appliquant les principes du moindre privilège et en utilisant les derniers outils de filtrage et d'assainissement pour inspecter et détecter les attaques potentielles, vous pouvez fermer la porte à cette dangereuse vulnérabilité. L'attitude consistant à ne jamais faire confiance aux données saisies par l'utilisateur vous sera également très utile à l'avenir. Faites tout cela et vous aurez une longueur d'avance sur ce type d'attaque dangereuse.

Pour en savoir plus, vous pouvez consulter l'article de l'OWASP sur l' injection de code. 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é pour qu'elles deviennent 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 .

Affrontez l'injection de code de front, dès maintenant. Relevez le défi sur notre plateforme de formation ludique : [Commencez ici]

Accès aux ressources

Cliquez sur le lien ci-dessous et téléchargez le PDF de cette ressource.

Secure Code Warrior est là pour vous aider à sécuriser le code tout au long du cycle de vie du développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Voir le rapportRéservez une démonstration
Partager sur :
Vous souhaitez en savoir plus ?

Partager sur :
Auteur
Jaap Karan Singh
Publié le 16 mai 2019

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

Partager sur :

Les attaques par injection de code sont parmi les plus courantes, et aussi les plus dangereuses, que rencontrent de nombreux sites web et applications. Elles varient en termes de sophistication et de dangerosité, mais presque tous les sites ou applications qui acceptent des données d'entrée de l'utilisateur peuvent être vulnérables. En fait, presque tous les défenseurs de la cybersécurité seront confrontés à ce type d'attaque à un moment ou à un autre de leur carrière, et probablement à plusieurs reprises.

Une attaque par injection de code peut se produire chaque fois qu'une application ou un site web accepte une entrée de la part des utilisateurs. Il peut s'agir simplement de fournir une fonction de recherche ou de demander à un utilisateur de saisir ses informations d'identification. L'attaque se produit lorsqu'un utilisateur malveillant saisit un code dans le champ ouvert au lieu d'une saisie de texte normale. L'objectif est de faire en sorte que le serveur prenne l'entrée pour un code valide, puis exécute les fonctions souhaitées par l'attaquant.

Si les attaques par injection de code sont extrêmement courantes, les défenses disponibles pour les arrêter le sont tout autant. Dans cet épisode, vous apprendrez

  • 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 code ?

Bien que les détails spécifiques des attaques par injection de code varient en fonction du langage de programmation utilisé, toute application ou site web peut être vulnérable dès lors qu'il permet à un utilisateur de saisir des données. Des attaques par injection de code ont été déclenchées pour SQL, HTML, XML, CSS et tout autre langage de programmation courant.

Tout d'abord, un attaquant doit localiser le code vulnérable dans une application, normalement à un endroit où les utilisateurs sont autorisés à saisir leurs propres données. Par exemple, ce code prend la fonction PHP eval() et la transmet à un utilisateur pour qu'il la modifie, sans aucune sorte de validation de la chaîne de retour.

$myvar = "varname" ;
$x = $_GET[arg] ;
eval("\$myvar = \$x ;") ;

Un attaquant malin pourrait facilement ajouter sa propre chaîne à la fonction eval, et même exécuter des commandes système s'il le souhaite.

/index.php?arg=1 ; system(id)

Il est important de noter que si les attaques par injection de code peuvent impliquer l'envoi de commandes système, elles ne se limitent pas à cela. En fait, avec les attaques par injection de code, les pirates ne sont limités que par la fonctionnalité du langage lui-même. Dans notre exemple, un pirate pourrait programmer le système ciblé pour qu'il fasse presque tout ce qui est autorisé par le framework PHP.

Pourquoi les attaques par injection de code sont-elles si dangereuses ?

Les attaques par injection de code sont potentiellement très dangereuses en fonction des compétences de l'attaquant. Il peut faire tout ce que le langage de programmation permet, ce qui le met sur un pied d'égalité avec les programmeurs de l'application. Un attaquant peut pratiquement écrire sa propre application et la faire exécuter dans l'environnement cible.

Même les attaquants les moins compétents peuvent être dangereux. Au lieu d'écrire leurs propres applications ou chaînes de code, ils peuvent simplement ordonner au système ciblé d'accepter et d'installer des logiciels malveillants préprogrammés. Cela peut conduire à la défiguration d'un site, à des attaques par ransomware ou même devenir la base d'une campagne d'hameçonnage visant les utilisateurs du site.

La plupart du temps, les attaques par injection de code sont utilisées pour voler des éléments tels que des listes d'utilisateurs et des mots de passe, ou pour obtenir une reconnaissance précieuse dans un système ciblé pour une compromission ultérieure. Mais attention, un programmeur habile peut faire presque n'importe quoi avec une attaque par injection de code, c'est pourquoi il est essentiel que chaque instance potentielle de ces attaques soit découverte et supprimée de votre environnement.

Ne faites confiance à personne ! (Ou du moins, pas les utilisateurs)

Lors de l'élimination des vulnérabilités liées aux attaques par injection de code, le premier endroit à examiner est tout endroit où l'on demande ou autorise une entrée de la part de l'utilisateur. Tout ce qui est saisi par un utilisateur n'est en aucun cas digne de confiance. Si vous autorisez l'entrée d'un utilisateur sans filtrage ou examen, vous invitez en fait les attaquants à tenter de compromettre votre système ou même votre réseau.

Bien que cela ne soit pas toujours possible, la meilleure façon de contrecarrer les attaques par injection de code est d'empêcher les fonctions d'exécuter ou d'interpréter directement les entrées de l'utilisateur. Les utilisateurs peuvent se voir proposer un choix d'options statiques au lieu d'être libres de saisir leurs propres requêtes, l'application étant programmée pour n'accepter que ces choix limités comme étant valides. Il n'est pas toujours approprié de procéder de la sorte, mais lorsque c'est possible, cela permet d'éliminer les injections de code avant qu'elles ne commencent.

Dans les domaines où les utilisateurs doivent saisir leurs propres données, des contrôles stricts doivent être mis en place sur ces données. Partir du principe que tout est une attaque potentielle est un bon point de départ. L'application de politiques de moindre privilège, telles que l'accès des utilisateurs en lecture seule, tant du côté client que du côté serveur, peut empêcher l'exécution de la plupart des codes.

L'autre bonne défense consiste à mettre en place des filtres à l'échelle de l'application et à assainir toutes les entrées de l'utilisateur. Les développeurs sont conscients des attaques par injection de code depuis des années, et il existe des bibliothèques de filtres éprouvés pour chaque cadre et chaque langage. Lorsque vous appliquez ces filtres, veillez à le faire non seulement sur les zones d'entrée utilisateur évidentes ou sur les paramètres courants tels que les commandes Get et Post, mais aussi sur les cookies et les en-têtes HTTP.

Application d'une correction pour l'injection de code

En supprimant les zones d'entrée utilisateur inutiles de votre environnement, en appliquant les principes du moindre privilège et en utilisant les derniers outils de filtrage et d'assainissement pour inspecter et détecter les attaques potentielles, vous pouvez fermer la porte à cette dangereuse vulnérabilité. L'attitude consistant à ne jamais faire confiance aux données saisies par l'utilisateur vous sera également très utile à l'avenir. Faites tout cela et vous aurez une longueur d'avance sur ce type d'attaque dangereuse.

Pour en savoir plus, vous pouvez consulter l'article de l'OWASP sur l' injection de code. 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é pour qu'elles deviennent 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 .

Affrontez l'injection de code de front, dès maintenant. Relevez le défi sur notre plateforme de formation ludique : [Commencez ici]

Table des matières

Voir la ressource
Vous souhaitez en savoir plus ?

Jaap Karan Singh est un évangéliste du codage sécurisé, Chief Singh et cofondateur de Secure Code Warrior.

Secure Code Warrior est là pour vous aider à sécuriser le code tout au long du cycle de vie du développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable AppSec, développeur, CISO ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Réservez une démonstrationTélécharger
Partager sur :
Centre de ressources

Ressources pour vous aider à démarrer

Plus d'articles
Centre de ressources

Ressources pour vous aider à démarrer

Plus d'articles