Mais virez donc ce dossier .git/

Avez-vous déjà tenté d’afficher http://votresite.com/.git/?

Si vous avez reçu une erreur 403, c’est normal, cela veut probablement dire que la navigation dans les répertoires est désactivée, ce qui est un basique de sécurité web.

Exploiter un dossier .git/ ouvert au public

N’importe qui ou presque peut utiliser GitHacker pour extraire tout l’historique git d’un site vulnérable à l’attaque ainsi que d’autres informations.

Git étant aussi un système de fichiers avec des conventions particulières, les urls sont faciles à deviner.

Par exemple, la plupart des projets vont utiliser master ou main en tant que branche principale, mais l’outil peut carrément lancer une attaque brute-force sur les noms de branches si vous lui demandez gentillement avec les bons paramètres.

En cas de succès, on obtient un beau dossier result en local (machine de l’attaquant) mais on peut changer la destination avec l’option --output-dir.

A l’intérieur du dossier, c’est l’équivalent d’un git checkout master pour un utilisateur authentifié sur le dépôt distant (exemple: dev, contributeur).

A choisir, ne déployez jamais le dossier.git/ en prod, ou, au moins refusez tout accès public

Le dossier .git/ contient toutes sortes d’informations plus ou moins confidentielles allant des noms, des mails, jusqu’au code source à proprement parler. Dans le pire des cas, ce code va même contenir des identifiants “en dur” (exemple: accès aux bases de données, tokens, clés).

Pour un hacker, c’est jour de paie!

Il est impératif de désactiver tout accès public à ce dossier. Les solutions de déploiement et les pipelines modernes (CI/CD) sont assez faciles à paramétrer en général et peuvent supprimer les fichiers de configurations et les dossiers qui n’ont rien à faire dans un réoertoire public de prod!

Notez que certains hébergeurs vont s’occuper de ça pour vous mais, d’une, tous ne le font pas, de deux, ce n’est pas la règle par défaut. Pensez donc à vérifer ce point avant de déployer en mode YOLO.

Cela peut paraître excessif, mais je préfère combiner toutes les sécurités possibles car certains éléments comme une migration de serveur hasardeuse dans le futur peuvent annuler des mesures de protection et exposer le site:

  1. Appliquer une règle qui désactive tout accès au dossier .git/ sur le serveur
  2. Bloquer l’accès également depuis le code, par exemple depuis un fichier .htaccess pour les configurations Apache
  3. Si possible, ne jamais déployer le dossier .git en ligne dans un dossier public

Il est aussi possible d’ajouter un autre fichier .htaccess très court dans le dossier .git/ sur le serveur avec le code suivant:

Deny from all

Cependant, mieux vaut carrément renvoyer une erreur 404 pour ne donner aucun renseignement gratuit aux potentiels hackers:

RedirectMatch 404 /\.git

Que vous ayez ou pas un dossier .git/ en prod, personne n’a besoin de connaître vos mauvaises pratiques. Sur ce point, je me suis fait un peu troller sur une plateforme où un commentaire parlait de sécurité par l’obscurité, ce qui est pafois une manière de disqualifier un article parlant de sécurité, alors qu’ici le but n’est pas d’ériger la redirection au rang de bonne pratique.

Il s’agit simplement d’un garde-fou supplémentaire au cas où Régis le stagiaire fait n’importe quoi avec les configs, ou que l’offre d’hébergement est ultra-limitée et que vous n’avez pas de dév expérimenté dans vos effectifs (ce qui arrive assez souvent malheureusement). On rappelle le titre de l’article: “supprimer le dossier .git/”.

Ce genre d’astuces n’a pas vocation à perdurer dans le temps ou à excuser de mauvaises pratiques de déploiement. Le but est de renforcer la sécurité et de réduire les risques lors de ce que j’appellerais des “périodes d’inattention temporaire” du type:

  • je suis étudiant, je teste des trucs
  • je déploie à l’arrache mon code, manque de bol, je me fais scanner au même moment

et caetera…

Attention donc à ne pas confondre les termes. Certes, on force une erreur 404 sur un dossier qui ne devrait jamais se retrouver en accès public, mais il s’agit vraiment d’un dernier recours, un peu comme le 3ème parachute de la fusée. Si toute la stratégie est basée là-dessus, on a des problèmes plus graves à traiter.

Dans l’absolu, on ne veut jamais voir ce genre de cas, mais dans la réalité, ça arrive tout le temps.