Une nouvelle vulnérabilité de gravité élevée dans le langage de programmation Rust a été signalée. La faille pourrait être exploitée pour purger les fichiers et les répertoires d'un système exposé sans avoir besoin d'autorisation.
"Le Rust Security Response WG a été informé que le std::fs::la fonction de bibliothèque standard remove_dir_all est vulnérable à une condition de concurrence permettant de suivre le lien symbolique (CWE-363). Un attaquant pourrait utiliser ce problème de sécurité pour inciter un programme privilégié à supprimer des fichiers et des répertoires auxquels l'attaquant ne pourrait pas accéder ou supprimer autrement,» selon l'avis officiel.
La vulnérabilité a reçu l'identifiant CVE-2022-21658.
Comment CVE-2022-21658 peut-il être exploité?
La faille pourrait fonctionner au cas où un attaquant pourrait obtenir un accès non privilégié à un système vulnérable pour supprimer un répertoire système appelé sensible/, mais ils n'avaient pas les autorisations pour le faire.
Si standard::fs::remove_dir_all suivi des liens symboliques, ils pourraient trouver un programme privilégié qui supprime un répertoire auquel ils ont accès (appelé temp/), créer un lien symbolique de temp/foo à sensitive/, et attendez que le programme privilégié supprime foo/. Le programme privilégié suivrait le lien symbolique de temp/foo à sensitive/ tout en supprimant de manière récursive, résultant en sensible/en cours de suppression, le dit consultatif.
Notez que pour empêcher ces attaques, std::fs::remove_dir_all a déjà une protection contre la suppression récursive des liens symboliques. Cependant, cette vérification a été implémentée de manière incorrecte dans la bibliothèque standard, résultant en un TOCTOU (Heure de vérification Heure d'utilisation) condition de course.
Plutôt que de dire au système de ne pas suivre les liens symboliques, la bibliothèque standard a d'abord vérifié si la chose qu'elle était sur le point de supprimer était un lien symbolique. Autrement, il procéderait à la suppression récursive du répertoire.
Le cas décrit a créé une situation de concurrence, où un attaquant pourrait créer un répertoire et le remplacer par un lien symbolique entre la vérification et la suppression réelle. Il convient de mentionner que la probabilité de succès de l'attaque lors de la première tentative n'est pas grande. Mais les expériences des chercheurs ont révélé qu'ils pouvaient l'exécuter de manière fiable en quelques secondes.
Quelles versions de Rust sont affectées?
CVE-2022-21658 affecte les versions de Rust 1.0.0 à travers la rouille 1.58.0. Le plan du vendeur était de sortir Rust 1.58.1 en janvier 20, qui inclurait des mesures d'atténuation pour cette vulnérabilité.
Il convient de noter que macOS avant la version 10.10 et REDOX n'ont pas d'API utilisables pour atténuer correctement l'attaque, et sont donc toujours vulnérables même avec une chaîne d'outils patchée.
Il est curieux de mentionner que les auteurs de logiciels malveillants utilisent Rust dans leur programmation malveillante. Un nouveau lecteur ransomware-as-a-service a été détecté par Recorded Future et MalwareHunterTeam sur deux forums clandestins. Connu sous le nom d'ALPVH et BlackCat, le groupe ransomware est le premier à utiliser le langage Rust. Il s'agissait de la troisième souche de rançongiciel à être codée dans Rust, les deux autres étant expérimentaux.