Bibliothèques
Dépôts de dépendances
La gestion de bibliothèques externes est intégrée dans l'outil Cargo. Plusieurs moyens existent pour définir la provenance de ces bibliothèques, certains sont donnés dans la suite.
On rappelle que le traçage exact des versions de ces bibliothèques est une condition importante de la bonne sécurité des logiciels écrits en Rust. Ce besoin est matérialisé par la règle DENV-CARGO-LOCK.
Crates
En complément de la bibliothèque standard du langage, l'outil cargo fournit un
moyen pratique d'intégrer des bibliothèques tierces dans un projet en Rust. Ces
bibliothèques, appelées crates dans l'écosystème Rust, sont importées depuis
un dépôt central de composants en sources ouvertes.
Un exemple de déclaration de dépendances dans le fichier Cargo.toml.
[dependencies]
mdbook = { version = "0.4.52" }
anyhow = "1.0.99"
clap = { version = "4.5.47", features = ["derive"] }
markdown = { version = "1.0.0", features = ["serde"] }
semver = "1.0.26"
serde_json = "1.0.143"
serde = "1.0.219"
Le dépôt par défaut est crates.io. Il est aussi possible d'utiliser son propre dépôt.
Dépendances Git
Chaque dépendance du fichier Cargo.toml peut également faire référence à un dépôt Git. Par exemple :
[dependencies]
regex = { git = "https://github.com/rust-lang/regex.git" }
Il est possible de spécifier plus en détail la version souhaitée en donnant soit une branche, soit un tag, soit un hash de commit.
Le système de verrou des dépendances est opérant même dans le cas d'un dépôt Git : dans le cas où la dépendance ne spécifie pas un commit en particulier, le commit le plus récent répondant aux critères du fichier Cargo.toml est récupéré au moment de la première compilation et est pérennisé dans le fichier Cargo.lock. Toutes les compilations suivantes utiliseront le même commit (sauf si le fichier Cargo.lock est mis à jour).
Sécurité des dépendances
Quelle que soit la méthode de récupération des dépendances (crate ou commit Git), si elles proviennent d'organisations extérieures, les dépendances doivent faire l'objet d'une validation.
Chaque dépendance tierce directe DOIT être dûment validée, et chaque validation DOIT être tracée.
Concernant les dépendances transitives, il est également recommandé de les valider individuellement.
Chaque dépendance tierce DEVRAIT être dûment validée, et chaque validation DEVRAIT être tracée.
Outils de vérification des dépendances
Cargo-outdated
L'outil Cargo-outdated permet de faciliter la gestion des versions des dépendances.
Pour une crate donnée, l'outil liste les versions utilisées des dépendances
(dépendances listées dans le fichier Cargo.toml), et vérifie s'il s'agit de la
dernière version compatible disponible ainsi que la dernière version en général.
L'outil cargo-outdated DOIT être utilisé pour vérifier le statut des
dépendances. Ensuite, chaque dépendance importée en version obsolète DEVRAIT
être mise à jour ou bien, le cas échéant, le choix de la version DOIT être
justifié.
Cargo-audit
Cargo-audit est un outil permettant de vérifier s'il existe des vulnérabilités connues dans la RustSec Advisory Database pour les dépendances utilisées dans un projet.
L'outil cargo-audit DOIT être utilisé pour rechercher des vulnérabilités
connues dans les dépendances d'un projet.