https://a.storyblok.com/f/270183/1368x665/f7d37747ed/25feb_dev-blog_secret-token-git-history.png

Comment supprimer un jeton secret de l'historique Git ?

Publié le February 11, 2025

Temps de lecture : 4 minutes

Introduction

Dans cet article, vous apprendrez comment supprimer en toute sécurité les jetons d'authentification exposés de l'ensemble de l'historique de votre dépôt Git en utilisant la technologie BFGun puissant outil de nettoyage. Vous comprendrez également les risques de sécurité des secrets engagés et maîtriserez le processus étape par étape pour assainir votre dépôt de code et protéger les actifs numériques de votre organisation. C'est parti !

L'alerte de sécurité inattendue

Imaginez la situation : Vous êtes développeur, en plein milieu d'un sprint important, quand soudain un ticket JIRA atterrit dans votre boîte de réception. L'objet du ticket vous fait froid dans le dos : "Problème de sécurité critique - Token NPM exposé dans l'historique du référentiel".

L'analyse de sécurité automatisée a permis de découvrir quelque chose d'alarmant : un jeton d'authentification accidentellement intégré au référentiel il y a plusieurs années, enfoui dans des modifications datant de 4, 7 et 8 ans. Cela peut sembler de l'histoire ancienne, mais dans le monde de la cybersécurité, les vieux secrets peuvent être des bombes à retardement. Et votre RSSI peut se montrer très insistant pour résoudre ces problèmes (avec mérite...).

Ok, vous pouvez arrêter d'imaginer car cela nous est arrivé chez Vonage. Heureusement, vous pouvez tirer des leçons de notre expérience.

Les risques cachés des jetons exposés

Un jeton d'authentification exposé est plus qu'un simple oubli. Il s'agit d'une faille de sécurité importante qui peut potentiellement :

  • Permettre un accès non autorisé à des registres de paquets privés

  • Exposer l'infrastructure sensible de l'entreprise

  • Fournir un point d'entrée potentiel pour les acteurs malveillants

  • Risque lié à la propriété intellectuelle de l'entreprise

  • Violation potentielle des exigences de conformité

L'atteinte à la réputation d'une faille de sécurité peut dépasser de loin la commodité momentanée d'un jeton créé à la hâte.

La première chose à faire dans ce cas est d'effectuer une "rotation" de la ou des clé(s) secrète(s) concernée(s). Il suffit de les annuler et d'en créer de nouvelles. Mais le risque ne s'arrête pas là, car comme quelqu'un l'a dit dans une discussion de groupe JavaScript, les vieilles clés obsolètes pourraient contenir un indice sur l'algorithme du générateur de clés lui-même. Je ne suis pas un expert en cybersécurité (loin s'en faut), je me contenterai donc de l'avis des experts. Comment se débarrasser de la clé exposée dans le repo alors ?

Entrez dans BFG : votre meilleur ami pour le nettoyage de l'historique de Git

La solution ? BFG (Big Fast Git), un outil puissant conçu pour nettoyer rapidement et efficacement l'historique des dépôts Git. Voici un guide étape par étape de la suppression des jetons :

  1. Dites à tous ceux qui travaillent sur le dépôt de suspendre leur travail pendant quelques minutes jusqu'à ce que vous apportiez vos modifications.

  2. Téléchargez BFG et copiez-le dans son dossier.

  3. Cloner le dépôt avec un miroir :

    git clone --mirror https://github.com/your-name/your-repo.git

    Je vous suggère de le faire deux fois dans deux dossiers différents afin de disposer d'une sauvegarde de votre "ancien" référentiel en cas de problème.

  4. Créer un fichier tokens.txt avec la syntaxe de remplacement :

    old_token1==>PLACE_HOLDER1
    old_token2==>PLACE_HOLDER2
    ...

    Cela indiquera à BFG de remplacer toutes les instances des anciens jetons par leurs remplaçants.

    En voici un exemple :

    ab23234-89723c-aa7b7c==>${NPM_TOKEN}
    
  5. Exécutez BFG avec le fichier de remplacement (assurez-vous d'être dans le dossier parent du référentiel) :

    java -jar bfg-1.14.0.jar --replace-text tokens.txt your-repo.git --no-blob-protection
  6. Nettoyer le référentiel :

    cd your-repo.git
    git reflog expire --expire=now --all && git gc --prune=now --aggressive
  7. Vérifier que le jeton a été remplacé en clonant le miroir local et en le "grepant" :

    cd .. && git clone your-repo.git && cd your-repo && git grep -n "REPLACE _WITH_YOUR_TOKEN

    Si le résultat est nul, cela signifie qu'il a fonctionné.

  8. Forcez les changements :

    cd your-repo.git
    git push --mirror

  9. Dites à vos coéquipiers de récupérer et d'appliquer les modifications :

    git fetch
    git reset --hard origin/main 

Voilà, c'est fait. Votre dépôt est maintenant propre. À partir de maintenant, je suppose que le même outil qui vous a alerté sur les jetons peut tirer la sonnette d'alarme au cours d'un processus de RP avant que le jeton ne se "propage" à la branche principale. Assurez-vous que c'est le cas 😉

Conseils de pro pour la gestion des jetons

  • Ne jamais livrer les jetons directement dans les référentiels

  • Utiliser des variables d'environnement ou des outils de gestion des secrets sécurisés

  • Mettre en place des hooks de pré-commission pour éviter les commits accidentels de jetons

  • Auditer régulièrement l'historique de votre dépôt

  • Effectuez une rotation périodique des jetons, en particulier si vous soupçonnez une exposition.

Réflexions finales

À une époque où les menaces de cybersécurité se multiplient, la gestion proactive des référentiels n'est pas seulement une bonne pratique, c'est une nécessité. Des outils comme BFG fournissent aux développeurs des mécanismes puissants pour nettoyer les erreurs historiques et maintenir l'intégrité de leurs référentiels de code.

Bien que nous nous soyons concentrés sur le remplacement des jetons, le BFG est un outil polyvalent capable de.. :

  • Suppression des fichiers volumineux de l'historique du dépôt

  • Nettoyage des informations sensibles

  • Réduire la taille du référentiel

  • Assainissement des commits avant les projets d'open-sourcing

Si vous adhérez aux raisons pour lesquelles vous devriez utiliser des commits conventionnelsBFG peut vous permettre de pimenter vos anciens commits avec un texte de version et de changelog significatif.

N'oubliez pas qu'en matière de développement logiciel, ce qui est engagé n'est pas toujours définitif, grâce à des outils comme BFG.

Faites-nous part des autres problèmes Git que vous rencontrez sur notre Communauté Vonage Slack ou envoyez-nous un message sur X, anciennement connu sous le nom de Twitter.

Partager:

https://a.storyblok.com/f/270183/400x400/7bf76cb05c/yonatankra.png
Yonatan KraArchitecte logiciel Vonage

Yonatan a participé à des projets impressionnants à l'université et dans l'industrie - de C/C++ à PHP et javascript en passant par Matlab. Il a été directeur technique chez Webiks et architecte logiciel chez WalkMe. Il est actuellement architecte logiciel chez Vonage et instructeur.