Une clé laissée sur la porte
Un secret, dans un programme, est une information qui donne un accès : un mot de passe, une clé d'accès, un jeton. Quand un développeur l'écrit dans son code, tous ceux qui lisent le code le lisent aussi.
Dans cette leçon, tu apprends à reconnaître un secret oublié, et à le ranger au bon endroit.
À la fin de cette leçon
Remarque
Je peux repérer un secret oublié dans du code et dire où le ranger à la place.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Secret | une information qui donne un accès | un mot de passe |
| Clé d'accès | un long texte qui prouve qui tu es à un service | |
| Jeton | une clé d'accès qui ne dure qu'un temps | |
| Variable d'environnement | une valeur donnée au programme depuis l'extérieur de son code | |
| Historique | la liste de toutes les versions passées d'un projet |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Où les secrets s'échappent-ils ?
Presque toujours par accident. Un élève écrit un mot de passe dans son programme « pour tester » et envoie le projet en ligne.
D'autres secrets sont dans un fichier de réglages, dans un message d'erreur affiché à l'écran, ou sur une capture d'écran.
Les endroits où on les retrouve
| Endroit | Exemple | Pourquoi c'est un risque |
|---|---|---|
| Le code | mdp = "azerty2026" dans un fichier .py | Tous les lecteurs du code le lisent |
| Un fichier de réglages | Un fichier .env envoyé avec le projet | Il part en ligne avec le reste |
| L'historique | Une ancienne version où le mot de passe est écrit | Effacer la ligne ne l'efface pas du passé |
| Un message d'erreur | Une page qui affiche l'adresse de la base et son mot de passe | Tout visiteur peut la voir |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Comment reconnaître un secret ?
Un secret a souvent une forme. Le nom de la variable le dit : mdp, password, token, cle. La valeur est souvent entre guillemets.
Certaines clés ont même un début connu : une clé d'accès de cloud commence par AKIA, suivi de seize lettres et chiffres. Les outils de recherche de secrets cherchent ces formes.
Chercher une forme dans une ligne
ligne = 'cle = "AKIAIOSFODNN7EXAMPLE"'
# Une clé d'accès de cloud commence par AKIA.
if "AKIA" in ligne:
print("Cette ligne ressemble à une clé de cloud.")
else:
print("Rien de suspect.")
# Remplace AKIA par AKIB dans la ligne : que se passe-t-il ?Une erreur fréquente
Attention
Beaucoup pensent qu'effacer la ligne du code fait disparaître le secret. Il reste dans l'historique, et dans toutes les copies déjà faites. Après une fuite, on révoque le secret et on en crée un nouveau.
Où ranger un secret à la place ?
Le programme lit le secret à l'extérieur de son code : dans une variable d'environnement, ou dans un coffre de secrets que le service fournit.
Un fichier .env sert pour les essais, mais on le met dans la liste des fichiers que le projet ignore. Ainsi il ne part jamais en ligne.
La règle du lab
Important
Cherche seulement dans l'application de ton propre lab, et seulement avec la permission de ton enseignant. Les secrets de ce lab sont faux. Ne cherche jamais un vrai secret chez quelqu'un d'autre.
Avant de commencer
Remarque
Appuie sur Start the lab et attends que l'application soit prête. Appuie sur Open et lis seulement le Challenge 0 : il explique le jeu. Les autres défis sont le travail du lab.
Demande à l'application si elle va bien
curl -s http://wrongsecrets:8080/actuator/healthAffiché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.
Donne un secret au programme depuis l'extérieur
MA_CLE=abc123 sh -c 'echo "la clé vaut $MA_CLE"'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.
Relance sans donner de valeur
sh -c 'echo "la clé vaut $MA_CLE"'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.
Ce que montrent les deux commandes
La première donne la valeur abc123 au programme seulement pour cette commande. Il la lit avec $MA_CLE, et la valeur n'est écrite nulle part dans le code.
La deuxième montre que la valeur n'est plus là : le secret ne reste pas dans la commande. Le même principe vaut pour un vrai programme.