Introduction
Récemment, 44 vulnérabilités ont été découvertes dans uutils, la réimplémentation Rust de GNU coreutils. Ces bugs sont particulièrement intéressants car ils n'ont pas été détectés par les outils de sécurité de Rust tels que le borrow checker, clippy lints ou cargo audit.
Contexte Technique
Les bugs découverts dans uutils sont principalement liés à des problèmes de sécurité tels que les attaques par symboles liés (symlinks) et les problèmes de permissions. Le langage Rust fournit des outils pour éviter ces problèmes, mais leur utilisation nécessite une compréhension approfondie des mécanismes sous-jacents.
Un exemple de bug concerne l'utilisation de fs::metadata et File::create qui peuvent être utilisés de manière sécurisée si les chemins d'accès sont correctement gérés. Cependant, si un attaquant a accès en écriture à un répertoire parent, il peut remplacer un chemin par un symbole lié, ce qui peut conduire à des actions non prévues.
Analyse et Implications
Ces bugs ont des implications importantes pour la sécurité des systèmes qui utilisent des outils écrits en Rust. Ils montrent que même avec des outils de sécurité avancés, les erreurs humaines peuvent toujours se produire. Il est donc crucial de comprendre les limites de la sécurité offerte par Rust et de prendre des précautions supplémentaires pour éviter ces types de bugs.
Les développeurs doivent être conscients des risques liés à l'utilisation de chemins d'accès et de permissions, et utiliser les bonnes pratiques pour éviter les problèmes de sécurité. Cela inclut l'utilisation de OpenOptions::create_new(true) pour créer de nouveaux fichiers de manière sécurisée et de fs::canonicalize pour résoudre les chemins d'accès de manière à éviter les symboles liés.
Perspective
Les bugs découverts dans uutils sont une opportunité pour les développeurs de mieux comprendre les limites de la sécurité offerte par Rust et de prendre des mesures pour améliorer la sécurité de leurs applications. Il est important de rester vigilant et de continuer à améliorer les outils et les pratiques de développement pour minimiser les risques de sécurité.
Enfin, il est essentiel de noter que Rust n'est pas à l'abri des erreurs humaines, et que les développeurs doivent toujours être prudents lorsqu'ils travaillent avec des systèmes critiques. La sécurité est un processus continu qui nécessite une attention constante et une amélioration continue des pratiques de développement.