Un site qui en dit trop
Un serveur web est un programme qui envoie des pages à ceux qui les demandent. Mal réglé, il montre aussi sa version, la liste de ses dossiers et des fichiers qu'on a oubliés.
Dans cette leçon, tu apprends à repérer ces faiblesses, et ce que fait chaque réglage pour les fermer.
À la fin de cette leçon
Remarque
Je peux dire ce qu'un serveur web laisse voir et quels réglages le durcissent.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Serveur web | un programme qui envoie des pages web à ceux qui les demandent | |
| En-tête HTTP | une ligne d'information envoyée avec la page | Server: nginx |
| Durcir | régler un système pour qu'il montre et permette moins | |
| Code d'état | le nombre qui dit comment s'est passée la demande | 404 |
| Liste de dossier | une page qui montre tous les fichiers d'un dossier |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Ce qu'un serveur montre sans qu'on le demande
Chaque réponse du serveur commence par des en-têtes : des lignes comme Server: nginx/1.27.5. Cette ligne donne le nom du logiciel et sa version.
Un attaquant cherche alors les failles connues de cette version. Cacher la version ne règle rien tout seul, mais ça ne lui donne rien gratuitement.
Lire une ligne d'en-tête
ligne = "Server: nginx/1.27.5"
morceaux = ligne.split(": ")
print("Nom :", morceaux[0])
print("Valeur :", morceaux[1])
# Change la ligne en "Server: nginx" : que reste-t-il comme information ?La règle du lab
Important
Regarde seulement le site de ton propre lab, et seulement avec la permission de ton enseignant. Ne pointe jamais un outil vers un site qui n'est pas le tien. Ici, tu cherches les faiblesses pour les fermer.
Avant de commencer
Remarque
Appuie sur Start the lab dans la barre en haut et attends que le site soit prêt. Le site est la boulangerie Brightside, qui s'appelle web dans le terminal.
Demande seulement les en-têtes du site
curl -I http://webAffiché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.
Ouvre un dossier du site
curl http://web/files/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.
Demande un fichier qu'on n'aurait pas dû laisser
curl -s -o /dev/null -w '%{http_code}\n' http://web/.git/configAffiché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 tu viens de voir
| Commande | Ce que le serveur répond | Pourquoi c'est un risque |
|---|---|---|
| curl -I http://web | Une ligne Server avec un numéro de version | Elle dit à l'attaquant quelles failles chercher |
| curl http://web/files/ | Une page « Index of » qui liste les fichiers | Tout le contenu du dossier est visible, même ce qu'on voulait cacher |
| curl ... /.git/config | Le nombre 200, qui veut dire « voici le fichier » | Un dossier de travail oublié montre l'adresse du code et son histoire |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup pensent qu'un serveur est sûr dès qu'il cache sa version. Cacher n'empêche pas la faille d'exister : on gagne seulement du temps. Il faut aussi mettre à jour le logiciel et fermer ce qui n'a pas à être visible.
À quoi servent les en-têtes de sécurité ?
Le serveur peut aussi donner des consignes au navigateur, avec des en-têtes de sécurité. Chacun ferme une porte précise.
Dans nginx, une ligne add_header envoie un en-tête, et server_tokens off; cache la version. Le tableau suivant dit à quoi sert chacun.
Les quatre en-têtes du lab
| En-tête | Ce qu'il demande au navigateur | Ce qu'il évite |
|---|---|---|
| X-Content-Type-Options | Ne pas deviner le type d'un fichier | Un fichier pris pour un script |
| X-Frame-Options | Ne pas afficher la page dans le cadre d'un autre site | Un faux bouton caché sur ta page |
| Content-Security-Policy | N'accepter que les scripts venant de sources listées | Un script ajouté par un attaquant |
| Referrer-Policy | Ne pas dire d'où vient le visiteur | Une adresse privée qui fuit dans un lien |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Lis le bilan du lab : réussi ou raté
docker exec web lab-checkAffiché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.
Comment lire le bilan
Le script du lab répond en anglais. Chaque ligne commence par PASS si la protection est en place, ou par FAIL si elle manque.
Au départ, tu vois surtout des FAIL. La version est visible et le dossier est listé. Les quatre en-têtes manquent, et deux fichiers et la page /admin/ sont ouverts à tous.
Corriger ces lignes est le travail du lab, avec ton enseignant.