Publication de la première version stable de sudo-rs, une implémentation de sudo sûre pour la mémoire
(memorysafety.org)- sudo-rs, une réimplémentation en Rust de sudo, utilisé pour franchir les frontières de privilèges, est publié dans sa première version stable
- Le principal moteur de cette réécriture en Rust est l’estimation selon laquelle environ un tiers des bugs de sécurité du sudo d’origine relevaient de problèmes de gestion de la mémoire
- sudo-rs réduit la surface d’attaque en excluant des fonctionnalités moins utilisées, et sa suite de tests sert aussi à découvrir des bugs dans le sudo d’origine
- Wolfi Linux OS inclut déjà sudo-rs, et Chainguard estime que l’amélioration d’outils critiques pour la sécurité peut avoir un impact sur l’ensemble du secteur
- Un audit de sécurité externe doit commencer en septembre 2023, après quoi les travaux passeront au Milestone 4, centré sur les fonctionnalités d’entreprise
sudo-rs, réimplémenté en Rust
- Prossimo a publié la première version stable de sudo-rs
- sudo-rs est un projet qui réimplémente en Rust l’utilitaire sudo, couramment utilisé sous Linux pour franchir la frontière de privilèges entre un compte utilisateur et un compte administrateur
- Le projet sudo-rs se concentre sur l’amélioration de la sécurité par rapport au sudo d’origine
- Il utilise Rust afin d’assurer la sûreté mémoire
- Son point de départ est l’estimation selon laquelle environ un tiers des bugs de sécurité du sudo d’origine étaient liés à la gestion de la mémoire
- Il réduit la surface d’attaque en excluant des fonctionnalités moins couramment utilisées
- Il a développé une suite de tests étendue, qui a également permis de trouver des bugs dans le sudo d’origine
Adoption et prochaines étapes
- Wolfi Linux OS inclut déjà sudo-rs
- Dan Lorenc, CEO et cofondateur de Chainguard, estime que la sûreté mémoire était une priorité absolue lors de la création de Wolfi, et que l’amélioration d’outils centraux pour la sécurité comme sudo peut avoir un impact majeur sur tout le secteur
- sudo-rs a été construit par une équipe conjointe de Tweede Golf et Ferrous Systems, sous contrat avec Prossimo
- Le projet a démarré en décembre 2022, et un audit de sécurité externe du code de sudo-rs doit commencer en septembre 2023
- Après l’audit, l’équipe passera au Milestone 4 du plan de travail, une étape centrée sur les fonctionnalités d’entreprise
- L’utilitaire sudo d’origine basé sur C est maintenu depuis longtemps par Todd C. Miller, qui a aussi fourni des conseils pour l’implémentation de sudo-rs
- La NLnet Foundation a financé l’audit de sudo-rs, et Amazon Web Services soutient ce travail ainsi que la transition vers des logiciels sûrs pour la mémoire
1 commentaires
Avis de Hacker News
En tant que l’un des développeurs originels de sudo (https://en.wikipedia.org/wiki/Sudo), je l’ai vu être presque entièrement réécrit et continuellement corrigé au cours des 43 dernières années
On pourrait dire que c’est la commande UNIX dont les failles de sécurité ont été les plus passées en revue, et les failles découvertes ont été corrigées
Je me demande si une seule équipe de développement peut réimplémenter entièrement un outil que des milliers de développeurs et d’experts en sécurité ont examiné sans introduire ne serait-ce qu’un ou deux nouveaux bugs
Je me demande si le langage Rust a quelque chose qui élimine magiquement toute possibilité d’introduire des bugs
Du point de vue de ceux qui développent sudo-rs, nous n’avons jamais cherché à invalider le travail existant et, surtout au début, nous savons bien que notre implémentation ne sera pas exempte de bugs
Personnellement, en créant une version Rust, j’ai pu aborder un domaine auquel je n’aurais normalement pas osé toucher, faute d’avoir une grande confiance dans ma capacité à écrire du code C relativement sûr
À tout le moins, ce travail nous a déjà permis de trouver quelques bugs dans le sudo existant, et même s’il a été corrigé pendant 43 ans, tant que l’environnement autour de lui change, il est difficile pour ce type de logiciel de devenir totalement exempt de bugs
Tant que nous coopérons et apprenons du travail et des erreurs des uns et des autres, avoir quelques alternatives n’a rien de mauvais
Quand on fait du RiiR, le mieux que les développeurs puissent faire est de suivre les bonnes pratiques et d’apprendre des erreurs passées
En 43 ans, on a beaucoup progressé, et rien que l’abandon de la gestion des chaînes en C élimine un grand nombre de bugs avant même de parler de sûreté mémoire
Aujourd’hui, quelqu’un qui veut créer un remplaçant sécurisé de sudo peut faire bien mieux qu’autrefois même en utilisant seulement C, et le projet OpenBSD l’illustre assez bien
Si l’on élimine au niveau du langage une grande partie des arêtes vives que le code OpenBSD évite, on part avec un avantage, mais il faut toujours beaucoup de prudence et d’expérience, et un langage de programmation ne peut pas les fournir à votre place
Cela mérite au moins un examen sérieux, mais je ne pense pas que cela devrait être distribué par défaut pour le moment
Elle fait désormais partie du programme du lycée, et si on le maîtrise, on peut déjà s’en sortir plutôt bien ; avec un peu plus d’efforts, on peut très bien manier ce qu’ils ont mis une vie à accomplir
C’est parce que l’on peut se tenir sur les épaules des géants, que l’on bénéficie du recul ainsi que de meilleures technologies et méthodes d’apprentissage, et que l’on n’a pas besoin de répéter toutes leurs erreurs
Si le développeur originel réécrivait aujourd’hui sudo à partir de zéro avec son expérience et ses connaissances actuelles, il est très probable qu’il pourrait en faire quelque chose de plus propre et de plus simple en beaucoup moins de temps
Il ne s’agit pas de dénigrer les efforts et l’expérience existants, mais de dire qu’il n’est pas impossible de transformer cette expérience en quelque chose de meilleur en moins de temps
Cela dit, lorsqu’on remplace sudo en C ou d’autres outils, les vulnérabilités comme les pointeurs nuls ou les abus de buffers représentent facilement 50 % du total
Je pense que les deux points mis en avant par ce projet sont des aspects encore plus souvent négligés que l’usage de Rust
Il s’agit de réduire la surface d’attaque en retirant des fonctionnalités peu utilisées, et de développer une vaste suite de tests qui a même permis de trouver des bugs dans le sudo existant
Quand on écrit du code critique pour la sécurité, ces aspects sont encore plus importants qu’une réécriture en Rust
Prouver avec le gestionnaire de preuves formelles Coq : https://coq.inria.fr/
Pour un exemple concret, voir https://aws.amazon.com/security/provable-security/, et la vérification assistée par ordinateur (CAV) vaut aussi le détour
Si l’on suppose que l’objectif de ce projet est de remplacer sudo, balayer d’un revers de main le fait d’« exclure les fonctionnalités moins utilisées » est un peu inquiétant
Il est important de savoir quelles sont ces fonctionnalités, à quel point elles sont moins utilisées, et comment les configurations qui les utilisent échouent
Modification : il semble que certaines limitations soient récapitulées dans le README GitHub, https://github.com/memorysafety/sudo-rs#differences-from-ori...
sudoedit, ousudo -eJe l’utilise souvent pour modifier des fichiers sous /etc ou des fichiers sur lesquels mon utilisateur n’a pas de droits ; ce flag commence par copier le fichier vers un emplacement temporaire que mon utilisateur peut modifier, puis lance l’éditeur de texte avec les droits de mon utilisateur, sans privilèges sudo
L’éditeur est défini par la variable d’environnement
$SUDO_EDITOR, et après sa fermeture, le fichier n’est recopié avec les droits d’origine que s’il y a eu des changementsL’intérêt, c’est que l’éditeur tourne avec mon utilisateur, pas avec root, et charge donc ma configuration et mes plugins utilisateur
make me a sandwich(https://github.com/sudo-project/sudo/blob/main/Makefile.in#L...)Avec sudo classique, on peut gérer les droits sudo de tout un réseau depuis une configuration LDAP centralisée, et définir aussi centralement des règles limitées par heure, hôte, utilisateur et commande
Sans qu’une simple erreur de syntaxe risque de faire tomber toute la configuration : dans ce cas, seule la règle concernée est ignorée
Il y aura sûrement une excellente documentation technique, et comme il s’agit d’une annonce promotionnelle, je ne pense pas que ce soit l’endroit où chercher la liste des fonctionnalités manquantes
Quand on regarde la différence entre
Apache-2.0+MITetGPL-2.0, on peut bien obtenir des su/sudo-rs sûrs pour la mémoire, mais ceux qui les distribuent sous forme binaire ne sont pas tenus de publier le code source utilisé pour la compilation, ni les éventuelles modificationsJe crains beaucoup que la tendance à remplacer des outils GPL par des réécritures Rust sous licence MIT/Apache ne mène un jour à un Linux propriétaire, mais sudo n’est pas GPL à l’origine
C’est une licence de style ISC/MIT [1]
Pour la raison mentionnée juste au-dessus ; je laisse ceci afin de souligner le problème
su semble effectivement être sous GPL
[0]: https://www.sudo.ws/about/license/
On a la liberté de ne pas utiliser une telle distribution
Côté sécurité, un acteur malveillant pourrait aussi distribuer un binaire tout en montrant un code source différent
GPL ou non, c’est pareil
Dans le domaine des systèmes d’exploitation libres et open source de type UNIX pour l’IoT, tous les candidats, y compris ZephyrOS soutenu par la Linux Foundation, utilisent un mélange de licences Apache, MIT et BSD
Une fois la génération GPL disparue, un système d’exploitation de type UNIX doté d’une licence plus attrayante pour les grandes entreprises apparaîtra bientôt comme une autre solution durable de gouvernance que le noyau Linux
Il serait intéressant de voir une dérivée de Debian combinant cela avec les GNU Coreutils implémentés en Rust
Cela pourrait apporter de gros gains en sécurité mémoire et en performances
[1] https://github.com/uutils/coreutils
Au moins, il ne sera pas nécessaire d’implémenter un compilateur C
Est-ce qu’on ne serait pas en train de faire briller une crotte ?
Une meilleure réimplémentation est évidemment une bonne chose, mais vous n’avez pas été surpris en lisant les fonctionnalités bizarres de sudo ?
Même les parties qui semblent ordinaires sont très étranges et subtiles, et donc tout aussi vulnérables
Les gens qui utilisent sudo « en profondeur » feraient bien de se demander s’il existe une autre façon de faire
Ce serait bien d’avoir un flag ou un outil de validation/vérification qui exécute à blanc la configuration sudo actuelle et affiche les parties que sudo-rs ne prend pas en charge
Pour ce genre de projet, un assistant de portabilité faciliterait la transition
Si ma mémoire est bonne, les vulnérabilités récentes de sudo étaient toutes des erreurs de logique, pas des problèmes de sécurité mémoire
Réécrire est une bonne chose, mais il ne faut pas faire comme si de nouveaux bugs ne pouvaient pas être introduits parce que quelqu’un a mal compris le fonctionnement de quelque chose, ou simplement commis une erreur ordinaire
2019 : https://nvd.nist.gov/vuln/detail/CVE-2019-18634
Je vois beaucoup d’affirmations sur la sécurité mémoire, mais ce projet ne semble pas dire que les autres types de bugs seront à coup sûr éliminés
Réduire la surface d’attaque par des vérifications statiques semble être un meilleur compromis à long terme
doas est un outil beaucoup plus simple qui fait la même chose
Je ne comprends pas bien pourquoi il n’est pas plus utilisé
doas fait 43 184 octets, et fait tout ce dont j’ai besoin
Cet exploit sudo a été un signal d’alarme
Si vous n’avez pas encore migré, opendoas (paquet Debian) vaut le coup d’essayer
Il n’est pas protégé contre l’attaque par tty pushback : https://github.com/Duncaen/OpenDoas/issues/106
C’est un problème de sécurité non résolu assez sérieux