Vulnérabilité dans la bibliothèque standard Rust

Une vulnérabilité (CVE-2022-21658) a été identifiée dans la bibliothèque standard Rust en raison d'une condition de concurrence critique dans la fonction std::fs::remove_dir_all(). Si cette fonction est utilisée pour supprimer des fichiers temporaires dans une application privilégiée, un attaquant peut supprimer des fichiers système et des répertoires arbitraires qu'il n'aurait normalement pas accès pour supprimer.

La vulnérabilité est causée par une implémentation incorrecte de la vérification des liens symboliques avant la suppression récursive des répertoires. Au lieu d'empêcher le suivi des liens symboliques, remove_dir_all() vérifie d'abord si le fichier est un lien symbolique. Si un lien est défini, alors il est supprimé en tant que fichier, et s'il s'agit d'un répertoire, alors une opération de suppression de contenu récursive est appelée. Le problème est qu'il y a un léger délai entre la vérification et le début de l'opération de suppression.

A l'heure où la vérification a déjà été effectuée, mais que l'opération d'énumération des répertoires à supprimer n'a pas encore commencé, l'attaquant peut remplacer le répertoire par des fichiers temporaires avec un lien symbolique. Si elle arrive au bon moment, la fonction remove_dir_all() traitera le lien symbolique comme un répertoire et commencera à supprimer le contenu vers lequel pointe le lien. Malgré le fait que le succès de l'attaque dépend de la précision du moment choisi pour remplacer le répertoire et qu'il est peu probable qu'il soit atteint du bon moment du premier coup, au cours des expériences, les chercheurs ont réussi à réaliser une attaque réussie et reproductible après avoir exécuté l'exploit dans quelques secondes.

Toutes les versions de Rust de 1.0.0 à 1.58.0 inclus sont concernées. Le problème a été résolu sous forme de correctif pour l'instant (le correctif sera inclus dans la version 1.58.1, attendue d'ici quelques heures). Vous pouvez suivre l'élimination de la vulnérabilité dans les distributions sur ces pages : Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Il est conseillé à tous les utilisateurs de programmes Rust exécutés avec des privilèges élevés et utilisant la fonction remove_dir_all de mettre à jour de toute urgence Rust vers la version 1.58.1. Il est intéressant de noter que le correctif publié ne résout pas le problème sur tous les systèmes ; par exemple, dans REDOX OS et les versions de macOS antérieures à 10.10 (Yosemite), la vulnérabilité n'est pas bloquée en raison de l'absence de l'indicateur O_NOFOLLOW, qui désactive le symbole suivant liens.

Source: opennet.ru

Ajouter un commentaire