Tous les guides
Sévérité CritiqueErreurs de configuration

Répertoire .git exposé : la fuite de code source cachée à la vue de tous

Lorsqu'un serveur web sert le répertoire .git avec les fichiers de votre application, un attaquant peut télécharger assez d'objets pour reconstruire votre code source complet — y compris chaque secret jamais committé, même s'il a été supprimé dans un commit ultérieur. AppSafe signale ce problème comme critique.

Ce que c’est

Git stocke l'intégralité du dépôt — chaque fichier, chaque commit, chaque pointe de branche — dans un répertoire caché .git à la racine du projet. Si ce répertoire se retrouve dans votre racine web et que votre serveur n'en bloque pas l'accès, les fichiers /.git/config, /.git/HEAD et le magasin d'objets sous /.git/objects/ sont téléchargeables publiquement.

Reconstruire le code source complet à partir d'un répertoire .git exposé est simple. Des outils comme git-dumper récupèrent l'index puis chaque objet référencé, produisant un checkout parfaitement fonctionnel. Les attaquants n'ont pas besoin d'un accès shell — un navigateur suffit.

Pourquoi ça compte

Votre code source contient très probablement des informations qui augmentent le risque : des clés API codées en dur (souvent dans d'anciens commits), des schémas de base de données, des chemins d'endpoints internes, la logique métier et les flux d'authentification. Même si aucun secret n'est actuellement committé, l'historique regorge de matériel exploitable par un attaquant.

L'historique Git est permanent par conception. Un secret committé il y a des années puis supprimé vit toujours dans le magasin d'objets et est téléchargé avec tout le reste. Le faire tourner (rotation) est le seul moyen de le neutraliser.

Comment corriger

Bloquer .git dans nginx

Refusez toutes les requêtes dont le chemin commence par /.git/. Renvoyez 404 plutôt que 403 pour ne pas confirmer l'existence du répertoire.

location ~ /\.git {
  deny all;
  return 404;
}
Garder .git hors de la racine web

La solution la plus fiable consiste à ne jamais déployer le répertoire .git dans la racine des documents. Structurez votre build pour que la sortie compilée aille dans un répertoire public/ séparé, et ne déployez que celui-ci, pas la racine du projet.

Vérifier que l'accès est bloqué

Après avoir déployé le correctif, ouvrez https://yourdomain.com/.git/config dans un navigateur. La réponse doit être 404, et non le contenu de votre configuration Git. AppSafe revérifie ce point à chaque scan.

Faire tourner tous les secrets jamais committés

Si le répertoire était accessible, considérez comme compromis chaque clé API, mot de passe et token apparu dans un commit, quel qu'il soit. Faites-les tourner — supprimer le commit ne suffit pas, car l'objet existe toujours dans les fichiers pack qu'un attaquant a peut-être déjà téléchargés.

FAQ

Je déploie sur une plateforme managée (Vercel, Netlify, Fly.io) — suis-je exposé ?

Les plateformes managées qui buildent à partir du code source ne déploient généralement que la sortie du build, donc le répertoire .git n'est pas servi. Le risque est plus élevé avec les déploiements sur VPS, les conteneurs Docker construits depuis la racine du projet ou les exports de sites statiques qui copient tout l'arbre de travail.

Que vérifie concrètement AppSafe ?

AppSafe interroge /.git/config et /.git/HEAD et vérifie si le corps de la réponse ressemble à un vrai fichier Git (correspondant aux motifs [core] ou ref:). Une page générique en 200 qui ne contient pas de contenu Git n'est pas signalée.

Puis-je simplement supprimer le répertoire .git sur le serveur ?

Oui, si vous n'avez besoin que des fichiers déployés pour faire tourner l'application. Mais assurez-vous que votre processus de déploiement ne le recopie pas au prochain push. Le bloquer aussi au niveau du serveur web offre une double protection lorsque les scripts de déploiement ne sont pas cohérents.

Votre app est-elle concernée ?

AppSafe détecte ce problème et des dizaines d’autres en un seul scan gratuit.

Scanner mon app gratuitement