Assiste.com - Sécurité informatique - Vie privée sur le Web - Neutralité d'Internet

cr  01.04.2012      r+  22.10.2024      r-  22.10.2024      Pierre Pinard.         (Alertes et avis de sécurité au jour le jour)

L'injection de code est l'exploitation d'un bug informatique causé par le traitement, malgré tout, de données dont la validité n'a pas été vérifiée. l'injection est utilisée par un attaquant pour introduire (« injecter ») du code dans un programme informatique vulnérable et modifier le cours de son exécution. Le résultat d'une injection de code réussie est toujours une malveillance qui peut être de toutes natures, selon son auteur/opérateur. Cela peut être :

Des vulnérabilités d'injection de code se produisent lorsqu'un attaquant envoie des données non fiables à un interpréteur de ces données qui les accepte sans en vérifier la conformité et l'innocuité.

Les failles d'injection se trouvent le plus souvent dans :

  • Les requêtes SQL, LDAP, XPath ou NoSQL
  • Les commandes du système d'exploitation (les shell - par exemple Invite de commande ou PowerShell de Windows)
  • Les analyseurs XML
  • Les en-têtes SMTP
  • Les arguments de programmes (dont les buffers overflows)
  • Etc.

Selon cette analyse (Penn Computing. University of Pennsylvania), les failles d'injection auraient tendance à être plus faciles à détecter lors de l'examen du code source de l'application que lors de tests via des jeux d'essais imaginés pour ces tests.

« Le meilleur moyen de déterminer si vous êtes vulnérable aux attaques par ligne de commande ou par injection SQL consiste à rechercher dans le code source tous les appels aux ressources externes (par exemple, système, exec, fork, Runtime.exec, requêtes SQL,, ou quelle que soit la syntaxe utilisée pour faire des appels aux interpréteurs dans votre environnement. Notez que de nombreuses langues disposent de plusieurs manières d'exécuter des commandes externes. Les développeurs doivent revoir leur code et rechercher tous les emplacements où l'entrée d'une requête HTTP pourrait éventuellement se retrouver dans l'un de ces appels. Vous devez examiner attentivement chacun de ces appels pour vous assurer que les étapes de protection décrites ci-dessous sont suivies. »

Les scanneurs et les fuzzers peuvent aider à détecter les failles d'injection.

Certains types d'injections de code sont des erreurs d'interprétation, donnant une signification particulière aux entrées de l'utilisateur. Des erreurs d'interprétation similaires existent en dehors du monde de l'informatique, telles que dans le sketch « Who's on First ? ». Dans ce sketch, il est impossible de distinguer les noms propres des mots normaux. De même, dans certains types d'injections de code, il est impossible de distinguer l'entrée utilisateur des commandes système.

Les techniques d'injection de code sont populaires dans le piratage ou le craquage de système pour obtenir des informations, une élévation de privilèges ou un accès non autorisé à un système. L'injection de code peut être utilisée de manière malveillante à plusieurs fins, notamment :

  • Modification arbitraire des valeurs dans une base de données par injection SQL. Les conséquences peuvent aller de la dégradation du site Web à la compromission grave de données sensibles.
  • Installer des logiciels malveillants ou exécuter du code malveillant sur un serveur en injectant du code de script serveur (tel que PHP ou ASP).
  • Escalade de privilèges sur les autorisations racine en exploitant les vulnérabilités d'injection dans un binaire « setuid root » sous UNIX ou sur un système local en exploitant un service sous Microsoft Windows.
  • Attaque des internautes avec injection HTML / script (attaques XSS).

En 2008, 5,66% de toutes les vulnérabilités signalées cette année-là ont été classées dans la catégorie « Injection de code », l'année la plus élevée jamais enregistrée. En 2015, cette proportion avait diminué à 0,77%.

Une forme d'injection peut être mise en place en exploitant la phase de post compilation des codes sources des applications : l'édition des liens. Durant cette phase, tous les liens vers les composants (nous parlerions des Dlls dans le monde Windows) sont ajoutés au code pour former un tout homogène et indépendant. Si un attaquant arrive à modifier un composant du compilateur, la totalité des applications passant par cet édition de lien (link edit) est compromise, et trouver ce que fait cette injection ne sera pas chose aisée.



  • Injection