journal git - cache git - rebase git - filtre git-repo

Pourquoi git log révèle encore vos secrets : Git Commit L'histoire n'oublie jamais

Pourquoi git log expose les secrets même après leur suppression

Supprimer une ligne d'un fichier et commitLa modification ne supprime pas réellement les données sensibles de votre dépôt. Si ce secret, une clé API, un identifiant ou un jeton a été modifié, commitTed, il est présent dans votre historique Git. Quelqu'un l'exécute git log -p, spectacle git, ou inspecter les différences du passé commits peut encore le récupérer.

Même si vous écrasez un fichier ou remplacez la valeur, gitlog préserve la lignée complète de chaque modification. Ceci est intentionnel. Le modèle Git repose entièrement sur l'immuabilité. commit l'histoire et les copies distribuées. Donc, à moins de réécrire explicitement l'histoire, vos secrets sont toujours là. Voici un cas pratique :

git commit -m "Added config with AWS_SECRET_KEY"
# Realize mistake
git rm config.json
git commit -m "Removed secret file"

⚠️ Exemple pédagogique, à ne pas exécuter en production

Trop tard. Le gitlog montre toujours cette clé dans l'initiale commit.

Idées fausses sur git stash et git rebase

De nombreux développeurs supposent cache de git Aide à cacher ou à nettoyer des secrets. Faux. cache de git seulement des étagères directeur de travail change temporairement ; il ne touche jamais commit histoire. Si jamais un secret était committed, stocker les modifications par la suite ne fait rien pour le nettoyer.

Qu'en est-il de rebase git? Bien que cela puisse réécrire l’histoire, cela doit être fait avantcisely. Je cours juste git rebase -i et réorganiser ou écraser commits ne supprime pas les secrets, sauf si vous les modifiez ou les supprimez explicitement. Et même si un clone ou un fork existe avec l'original. commits, ton secret perdure.

Pire encore, un rebasage sans forcer correctement ou sans se re-coordonner avec les collaborateurs peut réintroduire les informations d'identification exposées via des fusions.

git commit -m "Added config with AWS_SECRET_KEY"

⚠️ Exemple pédagogique, ne pas utiliser en environnement réel

git rebase -i HEAD~3

⚠️ Exemple pédagogique, ne pas exécuter sur des dépôts de production

Modifiez le commit contenant le secret, mais oubliez de le supprimer. Votre gitlog pourrait du dernier plus propre, mais le contenu sensible est toujours récupérable.

Risques réels liés aux identifiants oubliés dans l'historique Git

Ce n'est pas théorique. Les attaquants analysent activement les dépôts publics et privés à la recherche de secrets cachés dans commit historiques. Forks GitHub, dépôts miroirs et mises en cache CI/CD pipelines peuvent tous abriter ces jetons oubliés.

  • Une clé API divulguée provenant d'un ancien gitlog a généré des milliers de factures cloud pour une startup.
  • Jetons OAuth committed, puis « supprimé », ont été utilisés pour détourner des comptes d’utilisateurs.
  • Des secrets enfouis au plus profond des forks de projets open source ont déclenché des incidents de sécurité majeurs.

Ces problèmes s'étendent CI/CD. Chaque tâche qui clone un dépôt s'exécute gitlog sous le capot, et chaque artefact de construction peut potentiellement inclure des traces de secrets exposés.

Nettoyage des données sensibles avec git filter-repo

Si le dommage est fait, l’outil le plus fiable pour le nettoyer est git filtre-repo. contrairement à rebase git, qui réécrit individuels commits, git filtre-repo peut réécrire l'intégralité commit historique basé sur les chemins de fichiers, les modèles ou le contenu.

Exemple : pour effacer toutes les occurrences de config.json qui pourrait contenir des secrets :

pip install git-filter-repo

# Backup your repo first
cp -r my-repo my-repo-backup

cd my-repo
git filter-repo --path config.json --invert-paths

⚠️ Exemple pédagogique, à vérifier dans un dépôt de test avant utilisation en production

Ou pour tout supprimer commits qui incluent une chaîne spécifique (par exemple, AWS_SECRET_ACCESS_KEY):

git filter-repo --replace-text <(echo 'AWS_SECRET_ACCESS_KEY==REDACTED')

⚠️ Exemple pédagogique, à vérifier dans un dépôt de test avant utilisation en production

Soyez prudent : cela va réécrire commit hachages. Vous devrez forcer l'envoi et informer tous les collaborateurs. Toutes les clés d'automatisation ou de déploiement liées à commit les hachages seront cassés.

Aussi, des outils comme BFG Repo-Nettoyant offrent des fonctionnalités similaires mais sont moins flexibles et sont désormais considérées comme obsolètes pour les cas complexes.

Prévenir les fuites de secrets avant qu'elles n'atteignent Git

Prévenir vaut mieux que nettoyer. Voici comment empêcher les secrets de tomber entre les mailles du filet. gitlog:

1. Pre-commit Hooks

Utilisez des outils comme pre-commit, fuites de données, ou talisman pour rechercher des secrets avant commits:

# .pre-commit-config.yaml
- repo: https://github.com/zricethezav/gitleaks
rev: v8.15.0
hooks:
- id: gitleaks

2. CI/CD Pipeline Toujours vérifier

Intégrer détection secrète dans vos tâches d'intégration continue. Échouez les builds lorsque des secrets sont découverts. Faites-en une règle.

3. Gestion des secrets

Ne codez jamais en dur vos identifiants. Utilisez des variables d'environnement, des coffres-forts ou des gestionnaires de secrets dès le départ.

4. Dépendances d'audit

Ne faites pas aveuglément confiance aux packages tiers. Les secrets peuvent être divulgués via les couches npm, PyPI ou Docker.

Correction finale : nettoyer les secrets avec git filter-repo

Supprimer les secrets du code ne suffit pas. gitlog conserve un enregistrement complet, à moins que vous ne preniez des mesures délibérées pour réécrire l'histoire. Ne vous fiez pas à cache de git ou à moitié cuit rebase git tentatives. Utiliser git filtre-repo lorsque vous avez besoin d'un nettoyage en profondeur, appliquez des politiques et des analyses avant que les secrets n'atteignent votre référentiel en premier lieu.

Pour une détection proactive des secrets, pensez à utiliser des outils tels que Xygéni pour sécuriser votre pipelines, appliquer commit Hygiène et prévention des fuites coûteuses. Git n'oublie jamais, mais vous pouvez vous assurer qu'il ne se souvienne jamais de vos secrets.

sca-tools-logiciel-outils-d'analyse-de-composition
Priorisez, corrigez et sécurisez vos risques logiciels
Essai gratuit 7 jours
Pas de carte bleue requise

Sécurisez le développement et la livraison de vos logiciels

avec la suite de produits Xygeni