La rouille est également arrivée sur Chromium
Google a récemment annoncé dans une publication l'inclusion du langage de programmation Rust parmi les langages autorisés dans le code du projet Chromium.
Il est mentionné que, pour être incluses, les bibliothèques Rust tierces qui demandent leur intégration dans le code source de Chromium doivent répondre à un certain nombre de critères ; par exemple, la bibliothèque doit être plus performante que ses homologues en termes de vitesse, de consommation de mémoire et de stabilité, ou être la seule implémentation d’une technologie donnée.
Les bibliothèques Rust sont également acceptables lorsque la fonctionnalité peut être exécutée dans un processus privilégié, ou lorsque l'utilisation de la bibliothèque réduit le risque de bogues par rapport à d'autres bibliothèques ou au code C++. Il n'a pas encore été décidé quelles bibliothèques peuvent être incluses dans Chromium.
Cette décision s'inscrit dans le cadre d'une initiative visant à prévenir l'apparition d'erreurs de mémoire dans le code source de Chrome. Selon des statistiques publiées il y a deux ans, 70 % des failles de sécurité critiques et dangereuses de Chromium sont dues à des erreurs de mémoire.
L'utilisation du langage Rust, qui met l'accent sur la gestion sécurisée de la mémoire et fournit une gestion automatique de celle-ci, réduira le risque de vulnérabilités causées par des problèmes tels que l'accès à une zone de mémoire après sa libération et le dépassement de tampon.
Une gestion sûre de la mémoire est fournie dans Rust au moment de la compilation par la vérification des références, le suivi de la propriété de l'objet et de la durée de vie de l'objet (portée), ainsi que l'évaluation de l'accès à la mémoire pour l'exactitude lors de l'exécution du code. Rust fournit également une protection contre le débordement d'entier, nécessite une initialisation obligatoire des valeurs de variables avant utilisation, gère mieux les erreurs dans la bibliothèque standard, applique le concept de références et de variables immuables par défaut, offre un typage statique fort pour minimiser les erreurs logiques.
L'utilisation de Rust rendra plus facile et plus sûre l'application de la "règle de faire" que Google utilise pour assurer la sécurité de sa base de code.
Selon cette règle, tout code que vous ajoutez ne doit pas remplir plus de deux des trois conditions : travailler avec une entrée non validée, utiliser un langage de programmation non sécurisé (C/C++) et s'exécuter avec des privilèges élevés. Il découle de cette règle que le code de traitement des données externes doit être réduit aux moindres privilèges (isolé) ou écrit dans un langage de programmation sûr.
Dans le cas de Rust, qui a été développé à l'origine avec le navigateur à l'esprit, l'intégration avec le code existant peut se faire sans l'utilisation d'IPC et avec moins de complexité pour orchestrer la protection contre les erreurs de mémoire, ce qui accélérera le processus de développement (nécessite d'écrire moins de code et révision plus facile) et en réduisant le nombre de bogues liés à la sécurité.
Pour simplifier l'intégration du code Rust avec le code C++ existant et éviter les risques et les limitations associés à l'intégration, il a été décidé de limiter l'interaction unidirectionnelle : appeler Rust depuis C++ (c'est-à-dire que le code Rust ne peut être appelé que depuis du code C++) via des fonctions API, mais sans mélange avec du code C++, ce qui permettra également de garder l'arbre de dépendances sous contrôle.
La deuxième limitation concerne uniquement la prise en charge des bibliothèques tierces qui se présentent sous la forme de composants distincts qui ne sont pas liés à Chromium et qui ont une API orientée tâche.
En plus d'utiliser Rust pour bloquer les exploits de vulnérabilités de mémoire d'utilisation après libération, à partir de la sortie de Chrome 102, le code C++ a commencé à utiliser le type MiraclePtr (raw_ptr) à la place. zones mémoire et blocs si de tels accès sont trouvés.
L'impact de la nouvelle méthode de protection sur les performances et la consommation de mémoire est estimé négligeable.
Enfin, il convient de mentionner qu'il n'est toujours pas prévu de réécrire le code existant en Rust , mais que désormais, l'intégration de bibliothèques tierces écrites en Rust dans la base de code sera autorisée.
Le système de construction a déjà ajouté des outils pour compiler du code Rust, exécuter des tests et intégrer des composants Rust avec du code C++. Le code Rust devrait apparaître dans le cadre des versions de Chrome l'année prochaine.
Source : https://security.googleblog.com