Qu’est-ce que l’exécution de code à distance ?

L’exécution de code à distance (RCE) est une vulnérabilité qui permet à un pirate malveillant d’exécuter du code arbitraire dans le langage de programmation dans lequel le développeur a écrit cette application. Le terme distant signifie que l’attaquant peut le faire à partir d’un emplacement différent du système exécutant l’application. L’exécution de code à distance est également connue sous le nom d’ injection de code et d’évaluation de code à distance .


Gravité: très sévère
Prévalence: découvert régulièrement
Portée: peut apparaître dans tous les logiciels informatiques
Impact technique : accès au shell de commande
Conséquences dans le pire des cas : compromis complet du système
Solution rapide: ne pas évaluer le code en fonction de l’entrée de l’utilisateur

Comment fonctionne l’injection de code/l’exécution de code à distance ?

Les vulnérabilités RCE peuvent apparaître dans n’importe quel type de logiciel informatique, dans presque tous les langages de programmation et sur n’importe quelle plate-forme. Il existe des vulnérabilités RCE, par exemple, dans les applications Windows autonomes écrites en C#, les applications Web et les API écrites en PHP, les applications mobiles écrites en Java, et même dans les systèmes d’exploitation eux-mêmes.

D’autres vulnérabilités peuvent conduire à l’exécution de code arbitraire à distance. Par exemple, les vulnérabilités de dépassement de mémoire tampon dans des langages tels que C/C++ peuvent permettre à l’attaquant d’exécuter du code arbitraire dans l’application. Les vulnérabilités de désérialisation peuvent également permettre aux attaquants de fournir une charge utile qui, une fois désérialisée, inclut du code que l’application exécute. Il existe même des cas connus de vulnérabilités d’ injection SQL et de script intersite (XSS) conduisant à l’exécution de code à distance dans une application vulnérable.

Certaines attaques RCE peuvent se produire après un certain délai. Par exemple, l’application peut d’abord stocker la charge utile RCE dans un fichier de configuration et ne l’exécuter que plus tard, peut-être même plusieurs fois. Ce type de vulnérabilité RCE est appelé un RCE stocké .

Notez que l’injection RCE/code est souvent confondue avec l’ injection de commande OS . Dans le cas de RCE, le code exécuté est dans le langage de l’application et s’exécute dans le contexte de l’application. Pour l’injection de commande du système d’exploitation, l’attaquant exécute une commande du système d’exploitation. Notez également que si le terme injection de code est préféré par OWASP et défini dans CWE-94 , le terme exécution de code à distance est beaucoup plus répandu.

Vulnérabilités RCE dans les applications Web

Chaque langage de programmation courant utilisé dans le développement Web a des fonctions pour évaluer (exécuter) le code dans ce langage au moment de l’exécution. Chaque fois que les développeurs utilisent de telles fonctions dans les applications Web, ils introduisent la possibilité d’exécution de code à distance côté serveur Web. Un exemple d’une telle fonction en PHP et JavaScript est eval .

Si le développeur autorise une fonction telle que eval à traiter une entrée utilisateur non filtrée, un attaquant malveillant peut être en mesure d’injecter du code en l’incluant dans l’entrée utilisateur. Les exemples d’entrées contrôlables par l’utilisateur incluent le texte des formulaires Web, le contenu des en-têtes HTTP, les fichiers téléchargés par l’utilisateur ou même les cookies modifiés.

Exemple d’attaque d’exécution de code Web à distance

Vous trouverez ci-dessous un exemple simple de code source PHP avec des vulnérabilités d’injection de code (RCE) et un vecteur d’attaque par injection de code sur les applications qui incluent ce code.

Code vulnérable

<?php eval("echo ".$_GET["user"].";"); ?>
 

Le développeur suppose que l’utilisateur ne fournira qu’un nom d’utilisateur valide comme paramètre d’une URL :

http://www.example.com/index.php?user=admin

Par conséquent, l’application évalue la valeur du paramètre en tant que code :

echo admin;
 

et imprime le nom de l’utilisateur.

Le vecteur d’attaque

L’attaquant peut injecter du code malveillant en saisissant un point-virgule suivi de la charge utile. Le point-virgule oblige la fonction eval à traiter le reste de la charge utile comme s’il s’agissait d’une nouvelle instruction en PHP :

http://www.example.com/index.php?user=admin;phpinfo();

En conséquence, la fonction eval exécute le code :

echo admin;
phpinfo();
 

Conséquences potentielles d’une attaque Web RCE

L’exécution de code à distance est l’une des vulnérabilités les plus graves car les conséquences des cyberattaques RCE sont pratiquement illimitées, en particulier dans le cas des applications Web.

La méthode la plus courante utilisée par les attaquants pour exploiter les vulnérabilités Web RCE consiste à installer des Web Shells . Une telle charge utile d’exploit RCE inclut un code qui permet à l’attaquant d’obtenir un accès shell sur la machine cible afin d’exécuter des commandes système. Le shell peut être un shell inversé , ce qui permet à l’attaquant d’éviter la plupart des pare-feu.

Le shell Web a les mêmes privilèges que le serveur Web, qui sont généralement limités. Cependant, une fois que l’attaquant a accès au shell sur la machine distante, il peut essayer de trouver d’autres vulnérabilités et utiliser l’élévation de privilèges (élévation de privilèges) pour obtenir un accès root.

En cas de succès, l’attaquant aura un accès illimité à la machine cible et pourra poursuivre avec l’un des types d’attaques courants suivants :

  • Ransomware ou autre malware : l’attaquant peut installer un agent ransomware sur la machine, qui utilisera ensuite d’autres méthodes pour se propager à d’autres actifs appartenant à la victime.
  • Extraction de crypto-monnaie : les attaquants installent souvent des mineurs de crypto-monnaie sur des machines compromises. L’exploitation minière consomme vos ressources informatiques pour fournir aux cybercriminels un financement pour davantage d’activités malveillantes.
  • Vol de données sensibles : l’attaquant peut utiliser l’élévation de privilèges pour accéder aux serveurs de bases de données SQL contenant des données sensibles telles que des numéros de carte de crédit.

Exemples de vulnérabilités RCE connues

  • CVE-2021-44228 (Log4Shell) dans Apache Log4j 2.x (suivi de CVE-2021-45046 et d’une vulnérabilité de déni de service CVE-2021-45105 ) est un exemple de RCE dans une application non Web. Cette vulnérabilité Log4j, qui ne nécessite aucune authentification de l’attaquant, affecte plusieurs versions de Log4j et réside spécifiquement dans la classe JndiLookup de cette bibliothèque de journalisation open source populaire. De nombreuses applications et services populaires se sont révélés initialement vulnérables, notamment Steam, Apple iCloud, Minecraft, etc.
  • CVE-2021-1844 dans Apple iOS, macOS, watchOS et Safari est un autre exemple de RCE dans un module de système d’exploitation. Si une victime utilise un appareil vulnérable pour visiter une URL contrôlée par l’attaquant, le système d’exploitation exécute une charge utile malveillante sur cet appareil.
  • CVE-2020-17051 dans Microsoft Windows NFSv3 est un exemple de RCE dans un module de système d’exploitation. Un attaquant peut se connecter à un serveur NFS vulnérable et envoyer une charge utile que le point de terminaison cible exécutera ensuite.
  • CVE-2019-8942 dans WordPress 5.0.0 est un exemple de RCE dans une application Web populaire. Un attaquant peut exécuter du code arbitraire dans WordPress en téléchargeant un fichier image spécialement conçu qui contient du code PHP dans ses métadonnées Exif.

Comment détecter les vulnérabilités RCE ?

La meilleure façon de détecter les vulnérabilités RCE dépend de si elles sont déjà connues ou inconnues.

  • Si vous n’utilisez que des logiciels commerciaux ou open source et que vous ne développez pas de logiciels vous-même, il peut suffire d’identifier la version exacte du système ou de l’application que vous utilisez. Si la version identifiée est susceptible de RCE, vous pouvez supposer que votre logiciel est vulnérable. Vous pouvez identifier la version manuellement ou utiliser un outil de sécurité approprié, tel qu’une solution d’ analyse de la composition logicielle (SCA) pour les applications Web ou un analyseur de réseau pour les systèmes et applications en réseau.Si vous développez votre propre logiciel ou souhaitez avoir la possibilité de trouver des vulnérabilités RCE jusque-là inconnues (jours zéro) dans des applications connues, vous devez être en mesure d’exploiter avec succès la vulnérabilité RCE pour être certain qu’elle existe. Cela nécessite soit d’effectuer des tests d’intrusion manuels avec l’aide de chercheurs en sécurité, soit d’utiliser un outil d’analyse des vulnérabilités capable d’exploiter automatiquement les vulnérabilités Web. 

Comment prévenir les vulnérabilités RCE dans les applications Web ?

Le seul moyen totalement efficace de prévenir les vulnérabilités RCE dans les applications Web est d’éviter d’utiliser des fonctions et des constructions de langage sensibles au RCE avec des données non fiables. Par exemple, la fonction eval en PHP/JavaScript.

Si vous devez utiliser la fonction eval avec des données non fiables (entrée utilisateur directe ou indirecte) et qu’il n’y a aucun moyen d’atteindre l’objectif de votre application sans évaluer l’entrée utilisateur, vous devez accepter le risque que votre code soit susceptible d’attaques d’exécution de code à distance. Même avec la meilleure désinfection des entrées, les attaquants peuvent toujours trouver un moyen de passer.

Bien que vous ne puissiez pas complètement éviter les vulnérabilités RCE dans de tels cas, vous pouvez minimiser le risque d’attaques et atténuer leurs conséquences en utilisant une validation et un nettoyage appropriés des données d’entrée/sortie basées sur des listes blanches (et non des listes noires).

Comment atténuer les attaques RCE ?

Les méthodes possibles pour atténuer les attaques RCE varient en fonction du type de logiciel vulnérable :

  • Dans le cas de logiciels personnalisés, tels que les applications Web, la seule façon d’atténuer de manière permanente le RCE est d’éliminer les fonctions d’évaluation qui traitent les entrées contrôlées par l’utilisateur à partir de votre code d’application.
  • Dans le cas de RCE connus dans un logiciel tiers, vous devez vérifier les derniers avis de sécurité pour un correctif et mettre à jour vers une version non vulnérable (généralement la dernière version).
  • Dans le cas des RCE zero-day dans un logiciel tiers, vous ne pouvez compter que sur des règles WAF (pare-feu d’application Web) temporaires pour l’atténuation. Cependant, cela ne fait que rendre le RCE plus difficile à exploiter et n’élimine pas la cause première du problème.

Les vulnérabilités d’exécution de code à distance (RCE) dans les applications Web permettent à l’attaquant d’exécuter du code arbitraire sur le serveur Web hébergeant l’application Web. Un bon exemple d’exécution de code à distance est Log4Shell, une vulnérabilité RCE dans Apache Log4j.

L’exploitation réussie d’une vulnérabilité RCE dans une application Web peut permettre à l’attaquant d’exécuter n’importe quel code et d’exécuter des commandes sur le serveur Web. L’attaquant peut, par exemple, exploiter une vulnérabilité RCE pour installer un shell Web sur le serveur Web et poursuivre l’attaque à partir de là.

Les outils de test dynamique de sécurité des applications (DAST) sont le meilleur moyen de détecter les vulnérabilités d’exécution de code à distance dans les applications Web. Ils offrent la meilleure couverture et certains d’entre eux, comme Cycuri, sont capables de prouver que la vulnérabilité est réelle et non un faux positif.

ClassificationIDENTIFIANT
CAPEC23
CWE95
OWASP 2021A3
{"cpt":"service","style":"9","columns":"3","show":"6","order":"DESC","orderby":"DESC"}

Nos Services en Cybersécurité

Protégez-vous maintenant !

Forfait Évaluation de la surface d’attaque

La cible de cette évaluation de la surface d’attaque est les ressources réseau, les systèmes et les terminaux. Il n’y a pas de ciblage des membres ou des employés des organisations à des fins d’ingénierie sociale.

Forfait Évaluation de la vulnérabilité

Nous sommes en mesure de fournir des évaluations de vulnérabilité des applications web , des serveurs connectés à Internet et des gammes de réseaux connectés à Internet .

Analyse de vulnérabilité

Cycuri propose des analyses de vulnérabilité ponctuelles ou régulières de votre périmètre externe, de vos applications Web ou de votre réseau interne.

Forfait Évaluation WordPress

Nos services d’évaluation WordPress professionnelle sont populaires auprès de tous ceux qui souhaitent un examen par un tiers indépendant de leur posture de sécurité.

Test d’intrusion d’application Web

Que votre application Web soit destinée aux employés, B2B ou B2C, il existe un niveau de confiance inhérent qui est supposé lorsque les utilisateurs sont autorisés à entrer, naviguer et utiliser des applications et/ou des portails d’applications.

Test d’intrusion Black-Box externe

Un test d’intrusion externe Black-Box imite les actions d’un adversaire réel en tentant d’exploiter les faiblesses de la sécurité du réseau sans les dangers d’une menace réelle.

Exécution de code à distance (RCE)