Mauvaise configuration de serveur : en-têtes et fichiers exposés
Une application peut avoir un code irréprochable et pourtant se révéler fragile à cause de la manière dont elle est installée : un mode de débogage laissé actif, un dossier de sauvegarde accessible, un compte par défaut jamais désactivé. C’est comme une maison dotée d’une excellente serrure dont on aurait oublié de fermer la fenêtre du garage. Les erreurs de configuration comptent parmi les constats les plus fréquents en audit, et souvent les plus simples à corriger.
Rappel légal
Parcourir un serveur à la recherche de fichiers exposés sur un site que vous n’avez pas le droit de tester est un accès non autorisé (articles 323-1 à 323-3-1 du Code pénal), même si les fichiers sont « publics » en pratique. Dans cette leçon, les vérifications se font sur votre application d’entraînement locale, ou sur vos propres serveurs de test.
Ce que recouvre la « mauvaise configuration »
Une application web repose sur plusieurs couches : un système, un serveur web, un langage, un cadre de développement, une base de données, parfois un service cloud. Chaque couche a des réglages, et leurs valeurs par défaut sont souvent choisies pour faciliter l’installation, pas pour la sécurité. Un durcissement (hardening) consiste à les resserrer.
| Catégorie | Exemple de défaut | Risque |
|---|---|---|
| Divulgation d’informations | Version du serveur et du langage dans les en-têtes ; messages d’erreur détaillés | Aide à cibler les failles connues |
| Mode de débogage | Page d’erreur qui affiche le code, les chemins, les variables | Fuite de secrets et de structure interne |
| Fichiers exposés | Sauvegardes, exports de base, fichiers de configuration, dépôts de code dans l’arborescence publique | Accès à des identifiants et à du code source |
| Listage de répertoires | Un dossier sans page d’accueil affiche son contenu | Découverte de fichiers non prévus |
| Comptes et réglages par défaut | Identifiants d’installation, interfaces d’administration | Prise de contrôle triviale |
| Permissions excessives | Dossiers inscriptibles, droits trop larges sur des ressources cloud | Modification de contenu, fuite de données |
| Méthodes HTTP superflues | Méthodes de test ou d’écriture actives sans besoin | Surface d’attaque inutile |
| HTTPS mal réglé | Protocoles anciens, certificat expiré, pas de redirection | Écoute ou altération du trafic |
Examiner les en-têtes de réponse
Vous avez vu au chapitre 4 les en-têtes de sécurité qui protègent. Il faut aussi regarder ceux qui divulguent. Une réponse peut contenir :
HTTP/1.1 200 OK
Server: NomDuServeur/version-précise
X-Powered-By: NomDuLangage/version-précise
Set-Cookie: session=...
Ces mentions, anodines pour l’utilisateur, indiquent à un attaquant quelles failles connues viser (par exemple celles recensées sur cve.org ou nvd.nist.gov pour cette version précise). Un constat classique, de gravité généralement faible, est « divulgation de versions logicielles » : la correction consiste à masquer ces informations et à tenir les logiciels à jour, car masquer ne remplace pas corriger.
Les messages d’erreur et le mode débogage
Provoquez, avec une requête volontairement incorrecte sur votre application d’entraînement (un paramètre manquant, un chemin inexistant), une erreur, et lisez la réponse. Trois situations :
- Page d’erreur générique (« Une erreur est survenue ») : correct.
- Page d’erreur avec une trace complète : noms de fichiers, chemins du serveur, extrait de requêtes, parfois des identifiants : constat.
- Interface de débogage active d’un cadre de développement : constat sérieux, car elle peut offrir des fonctions d’exploration, voire d’exécution.
En production, le mode débogage doit être désactivé, et les détails consignés dans des journaux internes, jamais affichés à l’utilisateur.
Les fichiers et dossiers qui n’auraient pas dû être là
Un serveur sert tout ce qui se trouve dans le dossier public. Des fichiers laissés par inadvertance par les équipes sont une source classique de fuites :
- des sauvegardes (copies d’une page avec une extension supplémentaire, archives du site, exports de base de données) ;
- des fichiers de configuration contenant des identifiants de connexion à la base ;
- des fichiers de gestion de version du code source, oubliés dans le dossier public ;
- des fichiers de test ou de documentation interne (pages d’information sur la configuration du serveur, par exemple) ;
- des journaux accessibles par adresse.
Comment les découvrir ? Par la cartographie (chapitre 1), la lecture de la page d’exclusion destinée aux moteurs de recherche (qui, voulant cacher des chemins, les révèle parfois), et l’examen de l’arborescence connue d’un cadre de développement. Des outils dressent la liste des chemins courants à partir d’un dictionnaire : dans votre laboratoire, ils sont utiles ; sur un site réel, ils ne s’emploient qu’avec autorisation, avec un débit raisonnable.
Une règle à retenir : le dossier public ne contient que du public
La meilleure défense est architecturale : placer le code, la configuration et les secrets hors de la racine web, de sorte qu’une erreur de configuration du serveur ne les expose jamais. Seuls les fichiers destinés au public (pages, images, scripts, feuilles de style) résident dans le dossier servi.
Comptes et réglages par défaut
Beaucoup de logiciels sont livrés avec un compte administrateur initial, un mot de passe de démonstration, une console d’administration activée. Si l’installation ne les neutralise pas, la porte reste ouverte. Votre application d’entraînement en contient volontairement, avec la mention dans sa documentation : c’est instructif. En audit, on vérifie systématiquement que les identifiants par défaut ont été supprimés ou changés et que les consoles d’administration ne sont pas exposées publiquement.
Le chiffrement du transport
Examinez la configuration HTTPS : redirection automatique du HTTP vers HTTPS, certificat valide, absence de protocoles obsolètes, en-tête Strict-Transport-Security. Des outils dédiés évaluent la configuration TLS d’un serveur ; pour un serveur de laboratoire, vous pouvez les exécuter librement. Sur un site réel, la vérification d’un certificat par un navigateur reste sans risque, mais une analyse approfondie exige l’autorisation.
Défendre : le durcissement, une discipline
- Partir d’une configuration minimale : n’activer que ce dont l’application a besoin (modules, méthodes, ports).
- Désactiver le débogage et afficher des erreurs génériques en production.
- Masquer les bannières de version (utile, mais secondaire par rapport aux mises à jour).
- Supprimer ou changer tous les comptes, mots de passe et exemples par défaut.
- Séparer les environnements : développement, test et production sont distincts, avec des secrets différents.
- Automatiser la configuration (scripts, outils d’infrastructure) pour qu’elle soit reproductible et revue, plutôt que bricolée à la main.
- Appliquer le moindre privilège aux comptes de service, aux permissions de fichiers et aux droits cloud.
- Surveiller : alertes sur l’apparition de nouveaux fichiers dans les dossiers publics, balayage régulier de la configuration.
Des référentiels de configuration sécurisée sont publiés par les autorités ; le guide d’hygiène de l’ANSSI (cyber.gouv.fr) et les ressources de l’OWASP (owasp.org) sont de bons points de départ.
Astuce
Une bonne pratique d’audit consiste à comparer la configuration observée à une liste de contrôle issue d’un référentiel. Notez dans le carnet la source de la liste : cela donne de la crédibilité au constat.
À vous de jouer
Sur votre application d’entraînement locale :
- Relevez les en-têtes de réponse d’une page : y a-t-il des mentions de version ? Notez-les.
- Provoquez une erreur (chemin inexistant ou paramètre invalide) et décrivez la page d’erreur : générique ou détaillée ?
- Consultez la documentation de l’application : quels comptes ou réglages par défaut sont mentionnés ?
- Rédigez deux constats (un sur la divulgation d’informations, un sur un autre point) et proposez des corrections.
Voir une solution
Constat 1 : « Divulgation de versions : les en-têtes de réponse indiquent le serveur et le langage avec leur version. Gravité faible. Correction : masquer les bannières et maintenir les logiciels à jour. » Constat 2 : « Page d’erreur détaillée : une erreur révèle le chemin du serveur et une partie de la requête. Gravité moyenne. Correction : désactiver le mode débogage en production, message d’erreur générique, détails dans les journaux internes. » Si votre application est volontairement vulnérable, d’autres constats peuvent s’ajouter, comme un compte par défaut actif.
À retenir
- Les erreurs de configuration sont fréquentes et se corrigent souvent facilement.
- On examine les en-têtes qui divulguent, les messages d’erreur, les fichiers exposés, les comptes par défaut et le HTTPS.
- Le dossier public ne doit contenir que du public : code, configuration et secrets sont hors de la racine web.
- Désactiver le mode débogage en production et ne jamais afficher de traces à l’utilisateur.
- Durcir, automatiser, séparer les environnements et surveiller.
La configuration n’est qu’un des aspects de l’hygiène d’une application : ce qu’elle embarque de code tiers en est un autre, tout aussi important. C’est la leçon suivante.