Retour au blog
techniquesupply chainguide

Secrets dans Git : la clé API que vous avez supprimée est toujours là

Publié le 2026-07-066 min de lectureCleanIssue

« On l'a supprimée il y a deux ans »

Scénario vécu en audit : une clé AWS commitée dans un .env en 2023, « supprimée » trois jours plus tard par un commit remove secrets. En 2026, elle est toujours valide, toujours présente dans l'historique Git, et accessible à quiconque clone le dépôt.

Git est conçu pour ne rien oublier. Un git rm crée un nouveau commit *par-dessus* — le fichier reste dans tous les commits précédents, récupérable en une commande.

Comment les attaquants trouvent vos clés

Sur les dépôts publics : en minutes

Des bots scannent en continu les commits publics GitHub et GitLab à la recherche de patterns de clés (AWS, Stripe, OpenAI, Supabase, tokens npm…). Le délai entre le push d'une clé AWS publique et sa première utilisation malveillante se mesure en minutes. Le secret scanning de GitHub en révoque certaines automatiquement, mais ne couvre ni tous les formats ni tous les fournisseurs.

Sur les dépôts privés : via un accès secondaire

« Notre repo est privé » n'est une protection que tant que le repo le reste. Les fuites arrivent par : un laptop de développeur compromis, un token CI/CD trop permissif, un prestataire dont l'accès n'a jamais été révoqué, un repo re-publié en public des années plus tard. L'historique complet part avec le clone.

Cas 2026 : les projets générés par IA

Les applications construites avec des outils de génération de code sont surreprésentées dans nos constats : clés en dur « pour tester » suggérées par l'assistant, puis commitées avec tout le reste. Si vous avez vibe-codé votre MVP, l'historique de votre dépôt mérite une inspection.

Quoi faire, dans le bon ordre

L'erreur classique est de commencer par réécrire l'historique. Non :

  • Révoquer d'abord. Toute clé présente dans l'historique doit être considérée comme compromise et régénérée immédiatement. C'est la seule étape qui neutralise le risque.
  • Vérifier l'usage. Consultez les logs du fournisseur (CloudTrail pour AWS, dashboard Stripe…) pour détecter une utilisation frauduleuse pendant la période d'exposition.
  • Nettoyer l'historique avec git filter-repo — utile pour l'hygiène, mais inutile pour la sécurité si la clé n'est pas révoquée, et insuffisant : les forks, clones locaux et caches de CI gardent l'ancienne version.
  • Empêcher la récidive : hook pre-commit avec un scanner de secrets (gitleaks, trufflehog), scan en CI, et secrets injectés à l'exécution plutôt que stockés dans des fichiers.
  • Checklist

  • [ ] Scanner l'historique complet de tous vos dépôts (gitleaks git .), pas seulement le HEAD
  • [ ] Révoquer et régénérer chaque secret trouvé, même « vieux »
  • [ ] Hook pre-commit + scan CI sur tous les dépôts
  • [ ] .env* dans le .gitignore de vos templates de projet
  • [ ] Rotation planifiée des clés critiques (la rotation limite la fenêtre d'exploitation de toute fuite future)
  • [ ] Accès aux dépôts revus : anciens prestataires, tokens CI, apps OAuth tierces
  • Notre Premier diagnostic inclut la recherche de secrets exposés liés à votre produit — dépôts, bundles JavaScript, historiques publics. 48h pour savoir ce qui traîne.

    Articles liés

    Trois analyses proches pour continuer la lecture sur la meme surface de risque.

    Sources

    Rédigé par CleanIssue
    Revu le 2026-07-06

    Services associés

    Si ce sujet reflète un risque concret sur votre stack, voici les audits CleanIssue les plus pertinents.

    Besoin d'une revue externe de votre SaaS RH ?

    Expliquez votre produit, votre stack et votre contexte client. Nous revenons vers vous avec le bon niveau de revue.

    Parler de votre audit