Une faille de scurit critique, baptise « BatBadBut », a t dcouverte dans la bibliothque standard Rust, affectant toutes les versions antrieures 1.77.2 sous Windows. La vulnrabilit, identifie comme CVE-2024-24576, a un score CVSS de 10.0 et permet un attaquant d’excuter des commandes shell arbitraires en contournant le mcanisme d’chappement lors de l’invocation de fichiers batch avec l’API Command.
La vulnrabilit « BatBadBut » a t dcouverte par le chercheur en scurit RyotaK et divulgue de manire responsable l’quipe de scurit de Rust.
Selon le billet de blog de RyotaK, le problme provient des rgles complexes d’analyse de cmd.exe, l’invite de commande de Windows, qui est implicitement lance lors de l’excution de fichiers batch. La bibliothque standard Rust ne parvient pas chapper correctement les arguments de commande pour cmd.exe, ce qui permet l’injection potentielle de commandes.
Alors que les API Command::arg et Command::args de Rust garantissent que les arguments seront transmis tels quels au processus cr et ne seront pas valus par un shell, la mise en uvre sous Windows est plus complexe.
L’API Windows ne fournit qu’une seule chane de caractres contenant tous les arguments, laissant au processus cr la responsabilit de les diviser. La plupart des programmes utilisent la chane d’excution standard argv en C, ce qui permet d’obtenir un comportement cohrent en matire de division des arguments. Cependant, cmd.exe possde sa propre logique de dcoupage des arguments, qui ncessite un chappement personnalis par la bibliothque standard Rust.
« Pour viter l’excution inattendue de fichiers batch, vous devriez envisager de dplacer les fichiers batch dans un rpertoire qui n’est pas inclus dans la variable d’environnement PATH.« , a not RyotaK dans son billet de blog. « Dans ce cas, les fichiers batch ne seront pas excuts moins que le chemin d’accs complet ne soit spcifi, ce qui permet d’viter l’excution inattendue de fichiers batch.«
L’quipe de scurit de Rust a reconnu que la logique d’chappement existante dans la bibliothque standard tait insuffisante, ce qui permettait des arguments malveillants de contourner l’chappement et d’entraner une excution arbitraire de l’interprteur de commandes. La gravit de la vulnrabilit « BatBadBut » est considre comme critique si des arguments non fiables sont transmis lors de l’invocation de fichiers batch sous Windows.
BatBadBut ne se limite pas un seul identifiant CVE
Alors que l’attention s’est d’abord porte sur le langage de programmation Rust, il est apparu que la vulnrabilit « BatBadBut » ne se limite pas un seul identifiant CVE. La vulnrabilit affecte plusieurs langages de programmation et outils, chacun se voyant attribuer un identifiant CVE diffrent en fonction de la mise en uvre et de l’impact spcifiques.
Outre CVE-2024-24576, qui concerne la bibliothque standard Rust, « BatBadBut » englobe galement CVE-2024-1874, CVE-2024-22423 (qui affecte yt-dlp avec un score de risque lev de 8,3) et CVE-2024-3566 (qui affecte Haskell, Node.js, Rust, PHP et yt-dlp). Cela met en vidence la nature tendue de la vulnrabilit et la ncessit pour les dveloppeurs d’valuer leurs applications et dpendances travers diffrents langages de programmation et outils.
Attnuation
Pour remdier la vulnrabilit « BatBadBut », l’quipe Rust a publi la version 1.77.2, qui inclut un correctif pour le problme. Ce correctif amliore la robustesse du code d’chappement et modifie l’API Command pour qu’elle renvoie une erreur InvalidInput lorsqu’elle ne peut pas chapper un argument en toute scurit. Cette erreur sera mise lors du lancement du processus.
Pour les dveloppeurs qui implmentent leur propre chappement ou qui ne grent que des entres fiables sous Windows, la mthode CommandExt::raw_arg peut tre utilise pour contourner la logique d’chappement de la bibliothque standard.
Il est important de noter que la vulnrabilit n’affecte que le code Rust fonctionnant sous Windows qui excute des fichiers batch avec des arguments non fiables. Les autres plateformes ou utilisations de Windows ne sont pas concernes.
La communaut Rust a exprim sa gratitude RyotaK pour avoir divulgu la vulnrabilit de manire responsable, Simon Sawicki (Grub4K) pour avoir identifi certaines des rgles d’chappement adoptes, et aux membres du projet Rust qui ont aid dvelopper le correctif, le rviser et coordonner le processus de divulgation.
Il est fortement conseill aux dveloppeurs utilisant Rust sur Windows de mettre jour vers la version 1.77.2 ds que possible afin de rduire le risque d’attaques potentielles par injection de commandes. Il est essentiel de s’assurer que les entres non fiables sont correctement valides et assainies avant d’tre transmises en tant qu’arguments des fichiers batch.
Source : « BatBadBut: You can’t securely execute commands on Windows » (RyotaK, chercheur en scurit)
Et vous ?
Quelle lecture faites-vous de cette situation ?
Voir aussi :