Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Évaluer les risques des dépendances d'un projet

Après cette leçon: Je peux juger les risques des bibliothèques d'un projet : versions, failles connues et secrets laissés dans le code.

Leçon de 55 min2 commandesLab WrongSecrets : trouver des secrets codés en dur et apprendre où ranger les secrets

Que sont les dépendances d'un projet logiciel ?

Les dépendances d'un projet sont les bibliothèques écrites par d'autres que votre programme utilise. Un projet moyen en compte des dizaines, et chacune en a d'autres derrière elle.

Leurs failles deviennent les vôtres. Savoir lire la liste de ce qu'on utilise évite une grande part des incidents. Il faut repérer une version ancienne et ne laisser aucun secret dans le code.

À la fin de cette leçon

Remarque

Je peux juger les risques des bibliothèques d'un projet : versions, failles connues et secrets laissés dans le code.

Mots-clés

MotCe que ça veut direExemple
Dépendanceune bibliothèque écrite par d'autres, utilisée par votre programme
Dépendance indirecteune bibliothèque qu'utilise une de vos dépendances, sans que vous l'ayez choisie
Version figéeun numéro de version précis, noté dans le projet, et non « la plus récente »outil==2.9.0
Faille connueune faille publiée, avec les versions touchées et la version corrigée
Secretun mot de passe, une clé ou un jeton qui donne un accès
Historiquela suite de toutes les versions passées d'un projet, qui garde ce qu'on a supprimé

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

La règle unique

Attention

Ce laboratoire est une application volontairement fragile. Regardez votre copie privée, et rien d'autre : elle n'a aucune sortie vers Internet. Tester un système qui n'est pas le vôtre, ou sans permission, est un délit dans presque tous les pays.

Votre projet vaut sa bibliothèque la plus fragile

Quand vous ajoutez une bibliothèque, vous ajoutez aussi ses propres dépendances. Une faille cachée trois niveaux plus bas atteint quand même votre programme.

On ne peut pas relire tout ce code. On garde donc la liste à jour, on la garde courte, et on sait qui s'occupe de la mettre à jour.

Figer les versions rend un projet reproductible

Une ligne outil==2.9.0 fige la version. Une ligne outil sans numéro prend ce qui existe au moment de l'installation, donc quelque chose de différent demain.

Figer permet deux choses : refaire la même installation le jour où une faille est annoncée, et savoir quelle version vous faites tourner. On met à jour exprès, jamais par accident.

Comparer deux versions demande de comparer des nombres

Une version s'écrit avec des points, comme 2.9.0 ou 2.31.0. Comparée comme du texte, 2.31.0 paraît plus petite que 2.9.0, car le caractère 3 vient avant 9.

Pour comparer correctement, on découpe la version aux points et on compare les nombres un par un. La version 2.31.0 est bien plus récente que 2.9.0.

Le tri alphabétique se trompe sur les versions

Voyez l'erreur avec la commande sort, qui trie des lignes comme du texte. Elle reçoit deux versions, 2.9.0 et 2.31.0, et les range dans l'ordre des caractères.

La commande n'attaque rien : elle trie deux lignes que printf lui donne. Regardez laquelle des deux sort en premier.

Trier deux versions comme du texte

Commande
printf '2.9.0\n2.31.0\n' | sort

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Découper une version pour la comparer

Code: python
# Changez les deux versions et relancez.
ancienne = "2.9.0"
recente = "2.31.0"
a = []
for morceau in ancienne.split("."):
    a.append(int(morceau))
b = []
for morceau in recente.split("."):
    b.append(int(morceau))
print(a, b)
print("comme du texte :", ancienne < recente)
print("comme des nombres :", a < b)

Exemple travaillé : auditer une petite liste

Ligne du projetVersion minimale sûreVerdict
outil-pdf==3.4.13.5.0Trop ancienne : 3.4.1 est avant 3.5.0
outil-courriel==1.12.01.9.0Correcte : 1.12 est après 1.9
lecteur-image2.0.0Version non figée : on ne sait pas laquelle tourne
outil-police==0.8.0aucune connueRien à signaler pour l'instant

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un secret écrit dans le code reste visible

Une clé d'accès, un mot de passe ou un jeton écrits dans un fichier du projet sont lisibles. Toute personne qui a le code peut les lire.

Même supprimé dans la version suivante, le secret reste dans l'historique. Il faut le considérer comme public, le remplacer, puis le ranger hors du code, dans une variable d'environnement ou un coffre.

Chercher un secret revient à chercher une forme

Les outils qui cherchent des secrets cherchent des formes : un mot comme cle_api, un signe égal, un texte entre guillemets. Cette commande le montre sur deux lignes inventées.

grep -n affiche la ligne trouvée avec son numéro. Ici, seule la première ligne contient cle_api. La fausse clé n'ouvre rien : elle est inventée pour l'exemple.

Repérer une ligne qui ressemble à un secret

Commande
printf 'cle_api = "AKIAEXEMPLE123"\nnom = "boutique"\n' | grep -n "cle_api"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Dans le laboratoire : ouvrir la page

Le laboratoire est une application qui cache de faux secrets à de mauvais endroits. Ouvrez-la avec le bouton Ouvrir de la page du laboratoire, puis lisez le défi 0 qui explique le jeu.

Pour cette leçon, ne résolvez aucun défi. Notez seulement trois endroits où l'on pourrait cacher un secret par erreur dans une application. Les défis se résolvent après la leçon.

Une erreur fréquente

Attention

Beaucoup pensent qu'une bibliothèque très utilisée est forcément sûre. Elle est surtout très regardée, ce qui aide, mais des failles y sont aussi découvertes. Ce qui protège est de connaître sa version, de suivre ses annonces et de mettre à jour sans attendre.

À propos de ce labo et de sa source: Lab WrongSecrets : trouver des secrets codés en dur et apprendre où ranger les secrets

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.