
Serde, un projet de (dé)sérialisation Rust populaire, a décidé de livrer sa macro serde_derive en tant que binaire précompilé.
Cette décision a généré une bonne dose de recul parmi les développeurs qui s’inquiètent de ses futures implications juridiques et techniques, ainsi que d’un potentiel d’attaques de la chaîne d’approvisionnement, si le compte du responsable publiant ces binaires était compromis.
Selon le registre de paquets Rust, crates.io, serde a été téléchargé plus de 196 millions de fois au cours de sa durée de vie, tandis que la macro serde_derive a enregistré plus de 171 millions de téléchargements, attestant de la large diffusion du projet.
La macro Serde est précompilée : il n’y a aucun moyen de se désinscrire
Il y a environ trois semaines, un programmeur Rust utilisant le projet Serde dans son application a remarqué quelque chose d’étrange.
« Je travaille sur l’empaquetage de serde pour Fedora Linux, et j’ai remarqué que les versions récentes de serde_derive fournissent désormais un binaire précompilé », a écrit Fabio Valentini, membre du comité d’empaquetage de Fedora.
« Cela nous pose problème, car nous ne pouvons en aucun cas (à de très rares exceptions près, pour les micrologiciels ou autres), redistribuer des binaires précompilés. »
Serde est un framework de sérialisation et de désérialisation couramment utilisé pour les structures de données Rust qui, selon son site Web, est conçu pour effectuer ces opérations « de manière efficace et générique ».
« L’écosystème Serde se compose de structures de données qui savent se sérialiser et se désérialiser, ainsi que de formats de données qui savent sérialiser et désérialiser d’autres choses », indique le site Web du projet. Alors que « dériver » est l’une de ses macros.
Valentini a en outre demandé aux responsables du projet comment ces nouveaux binaires étaient « réellement produits » et s’il lui serait possible de recréer les binaires, au lieu de consommer des versions précompilées.
David Tolnay, qui est le principal mainteneur de Serde, a répondu avec des solutions de contournement potentielles à l’époque. Mais cela ne veut pas dire que tout le monde est content.
Suite à un afflux de commentaires de développeurs expliquant pourquoi la décision n’était pas la mieux adaptée au projet, Tolnay a pris note des commentaires avant de fermer le problème GitHub.
Sa justification pour l’envoi de binaires précompilés est reproduite dans son intégralité ci-dessous.
« L’implémentation précompilée est le seul moyen pris en charge d’utiliser les macros publiées dans serde_derive.
S’il y a un travail d’implémentation nécessaire dans certains outils de construction pour l’adapter, quelqu’un devrait se sentir libre de faire ce travail (comme je l’ai fait pour Buck et Bazel, qui sont des outils que j’utilise et auxquels je contribue de manière significative) ou publier votre propre fork de la source code sous un nom différent.
Séparément, en ce qui concerne le commentaire ci-dessus sur la sécurité, la meilleure voie à suivre serait pour l’une des personnes qui s’en soucie d’investir dans un RFC Cargo ou crates.io autour de macros précompilées de première classe afin qu’il existe une approche qui conviendrait à votre préférences ; serde_derive adopterait cela lorsqu’il serait disponible. »
Breachtrace a approché Tolnay avec des questions supplémentaires avant la publication.
« D’abord le Moq de .NET et maintenant ça. »
Certains développeurs Rust demandent que les binaires précompilés restent facultatifs et séparés de la caisse d’origine « serde_derive », tandis que d’autres ont comparé le passage au changement de code controversé du projet Moq .NET qui a déclenché un contrecoup.
« Veuillez envisager de déplacer la version précompilée de serde_derive vers un autre crate et serde_derive par défaut pour la construction à partir de la source afin que les utilisateurs qui souhaitent bénéficier du binaire précompilé puissent choisir de l’utiliser », a demandé un utilisateur.
« Ou vice-versa. Ou toute autre solution qui permet de construire à partir des sources sans avoir à patcher serde_derive. »
« Avoir un binaire livré dans le cadre de la caisse, même si je comprends les avantages de la vitesse de construction, n’est pas, pour des raisons de sécurité, une solution viable pour certains utilisateurs de la bibliothèque. »
Les utilisateurs ont souligné comment le changement pourrait avoir un impact sur les entités qui « ne sont légalement pas autorisées à redistribuer des binaires précompilés, par leurs propres licences », mentionnant spécifiquement les environnements réglementés par le gouvernement.
« … D’abord le Moq de .NET et maintenant ça », a déclaré Jordan Singh, un développeur basé en Australie, dans un commentaire qui a ensuite été supprimé.
« Si c’est pour forcer les développeurs de fret à prendre en charge une fonctionnalité, c’est une façon terrible de le faire. Donnez-nous au moins des binaires reproductibles. J’en ai marre des développeurs de caisses/bibliothèques populaires qui prennent tout le monde en otage avec des décisions absurdes. »
Donald Stufft, basé à Philadelphie, a mis en garde contre les risques de se lancer dans l’« expédition de fichiers binaires » sur les réseaux sociaux :

Le programmeur Rust Nathan West, qui s’appelle Lucretiel, a spécifiquement souligné les risques de la chaîne d’approvisionnement posés par les binaires précompilés, si le compte du responsable était compromis :

« N’est-ce pas exactement la façon dont ils s’y prendraient? Expédiez-le silencieusement comme un changement semi-plausible du fonctionnement de serde, ignorez intransigeamment toute critique de la décision », a écrit West.
« C’est * exactement * la raison pour laquelle tout le monde a une telle opposition réflexive à des mouvements comme celui-ci. »
« La confiance sur Internet n’est pas parfaite ; nous * ne savons pas * que c’est vraiment [le responsable] qui publie sur GitHub. C’est pourquoi nous avons des couches et des procurations de défense ; les conneries sommaires sont rejetées parce que cela ne vaut pas le risque .
Le technologue Sanket Kanjalkar a qualifié la transition vers des fichiers binaires de livraison sans possibilité de retrait de « pas en arrière ».
Mais, un professionnel de la sécurité qui se fait appeler Lander, a une vision légèrement différente :
« Ce drame de Rust sur serde_derive expédiant un binaire précompilé est assez drôle », écrit Lander.
« D’une part, je comprends l’inquiétude des gens. D’autre part, qui s’en soucie ? Personne ne lit le code macro proc/code build.rs pour chaque projet qu’ils intègrent de toute façon. Une option de retrait serait une bonne idée. »
Que vous soyez d’accord avec la décision du projet de servir ses macros précompilées ou non, il est recommandé d’inspecter régulièrement tout code source et binaires logiciels avant de les incorporer dans vos projets.