En sécurité informatique , l'exécution de code arbitraire ( ACE ) désigne la capacité d'un attaquant à exécuter des commandes ou du code de son choix sur une machine cible ou dans un processus cible . Une vulnérabilité d'exécution de code arbitraire est une faille de sécurité logicielle ou matérielle permettant l'exécution de code arbitraire. Un programme conçu pour exploiter une telle vulnérabilité est appelé un exploit d'exécution de code arbitraire . La capacité à déclencher l'exécution de code arbitraire sur un réseau (notamment via un réseau étendu comme Internet) est souvent désignée par le terme d'exécution de code à distance ( RCE ou RCX ).
L’exécution de code arbitraire signifie que si une personne envoie un ensemble de données spécialement conçu à un ordinateur, elle peut lui faire faire tout ce qu’elle souhaite. Même si cette vulnérabilité particulière ne cause généralement pas de problèmes concrets, les chercheurs se demandent si elle suggère une tendance naturelle des ordinateurs à présenter des failles permettant l’exécution de code non autorisé.
Types de vulnérabilité
Il existe plusieurs types de vulnérabilités qui peuvent permettre à un attaquant d'exécuter des commandes ou du code arbitraires. Par exemple :
- Vulnérabilités liées à la sécurité de la mémoire, telles que les dépassements de tampon ou les lectures excessives .
- Vulnérabilités de désérialisation
- Vulnérabilités liées à la confusion de types
- Exécution de code arbitraire GNU ldd
Méthodes
L'exécution de code arbitraire est généralement obtenue en contrôlant le pointeur d'instruction (comme un saut ou un branchement ) d'un processus en cours d' exécution. Ce pointeur désigne la prochaine instruction à exécuter. Contrôler sa valeur permet donc de contrôler l'instruction suivante. Pour exécuter du code arbitraire, de nombreuses attaques consistent à injecter du code dans le processus (par exemple, en lui envoyant des données d'entrée stockées dans un tampon d'entrée en RAM ) et à exploiter une vulnérabilité pour modifier le pointeur d'instruction et le faire pointer vers le code injecté. Ce dernier est alors exécuté automatiquement. Ce type d'attaque exploite le fait que la plupart des ordinateurs (utilisant une architecture de Von Neumann ) ne font pas de distinction générale entre code et données [ ce qui permet de camoufler du code malveillant en données d'entrée inoffensives. De nombreux processeurs récents intègrent des mécanismes pour rendre cette opération plus difficile , comme le bit de non-exécution
Combinaison avec l'élévation de privilèges
Une faille d'exécution de code arbitraire, à elle seule, confère à l'attaquant les mêmes privilèges que le processus cible vulnérable. Par exemple, en exploitant une faille dans un navigateur web , un attaquant pourrait se faire passer pour l'utilisateur et effectuer des actions telles que la modification de fichiers personnels ou l'accès à des informations bancaires, mais ne pourrait pas effectuer d'actions au niveau du système (à moins que l'utilisateur en question n'y ait également accès).
Pour contourner ce problème, une fois qu'un attaquant parvient à exécuter du code arbitraire sur une cible, il tente souvent d'exploiter une faille de sécurité pour obtenir un contrôle accru. Cela peut impliquer le noyau lui-même ou un compte tel qu'Administrateur, SYSTEM ou root. Avec ou sans ce contrôle étendu, les exploits peuvent causer des dommages importants ou transformer l'ordinateur en un système inopérant ; toutefois, l'élévation de privilèges permet de dissimuler l'attaque à l'administrateur légitime du système.
Exemples
Des passionnés de retrogaming ont découvert des failles dans des jeux vidéo classiques leur permettant d'exécuter du code arbitraire. Ils utilisent généralement une séquence précise de combinaisons de touches lors d'une super-exécution assistée par un outil pour provoquer un dépassement de tampon , ce qui leur permet d'écrire dans une zone mémoire protégée . Lors de l'événement Awesome Games Done Quick 2014, un groupe de speedrunners est parvenu à coder et à exécuter des versions des jeux Pong , Snake et Super Mario Bros. sur une copie de Super Mario World en exploitant une lecture hors limites d'un pointeur de fonction pointant vers un tampon contrôlé par l'utilisateur pour exécuter du code arbitraire.
Le 1er mai 2018, un chercheur en sécurité a découvert une vulnérabilité ACE dans l' archiveur de fichiers 7-Zip .
Le 12 juin 2018, le chercheur en sécurité bosnien Jean-Yves Avenard de Mozilla a découvert une vulnérabilité ACE dans Windows 10.
PHP a fait l'objet de nombreuses vulnérabilités ACE.
Le 9 décembre 2021, une vulnérabilité d'exécution de code à distance appelée « Log4Shell » a été découverte dans le framework de journalisation populaire Log4j , affectant de nombreux services, dont iCloud , Minecraft : Java Edition et Steam , et qualifiée de « vulnérabilité la plus importante et la plus critique de la dernière décennie ».