Vulnérabilité dans la bibliothèque standard du langage Rust

Une vulnérabilité (CVE-2022-21658) a été identifiée dans la bibliothèque standard du langage Rust, liée à une condition de course dans la fonction std::fs::remove_dir_all(). Lors de l'utilisation de cette fonction pour supprimer des fichiers temporaires dans une application privilégiée, un attaquant peut réussir à supprimer des fichiers et répertoires système arbitraires, auxquels il n'aurait normalement pas accès.

La vulnérabilité est causée par une mauvaise mise en œuvre de la vérification des liens symboliques avant la suppression récursive des répertoires. Au lieu d'interdire le suivi des liens symboliques, la fonction remove_dir_all() commence par vérifier si le fichier est un lien symbolique. Si le lien est défini, il est supprimé en tant que fichier, et si c'est un répertoire, l'opération de suppression récursive du contenu est alors déclenchée. Le problème réside dans le fait qu'il existe un léger délai entre la vérification et le début de l'opération de suppression.

Au moment où la vérification a déjà été effectuée, mais où l'opération de traversée des répertoires pour la suppression n'a pas encore commencé, un attaquant peut remplacer le répertoire contenant les fichiers temporaires par un lien symbolique. Si cela se produit au bon moment, la fonction remove_dir_all() traitera le lien symbolique comme un répertoire et commencera à supprimer le contenu auquel renvoie ce lien. Bien que le succès de l'attaque dépende de la précision du moment de remplacement du répertoire et qu'il soit peu probable d'atteindre le bon moment du premier coup, lors d'expériences, les chercheurs ont réussi à réaliser des attaques réussies de manière répétée après l'exécution de l'exploit pendant plusieurs secondes.

Toutes les versions de Rust de 1.0.0 à 1.58.0 inclusivement sont vulnérables. Le problème a été corrigé sous forme de patch (la correction sera incluse dans la version 1.58.1, qui est attendue dans quelques heures). Il est possible de suivre le correctif de la vulnérabilité dans les distributions sur les pages suivantes : Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Tous les utilisateurs d'applications écrites en Rust, exécutées avec des privilèges élevés et utilisant la fonction remove_dir_all, sont fortement encouragés à mettre à jour Rust vers la version 1.58.1. Fait intéressant, le patch publié ne résout pas le problème sur tous les systèmes ; par exemple, dans le système d'exploitation REDOX et dans les versions de macOS antérieures à 10.10 (Yosemite), la vulnérabilité n'est pas bloquée en raison de l'absence du drapeau O_NOFOLLOW, qui empêche le suivi des liens symboliques.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster