Découvrir les Secrets Cachés dans les Commits Effacés de GitHub : Outil Open Source et Chasse aux Bugs à 25 000 $
Résumé de l'Article : Comment j'ai Scanné Tous les "Commits Oups" de GitHub pour Trouver des Secrets Fuités L'histoire brève : L'archive GitHub conserve chaque commit public, même ceux que les développeurs essaient de supprimer. Les "force pushes" peuvent couvrir des erreurs comme la fuite de clés d'accès en réécrivant l'historique de Git. GitHub maintient ces commits sans référence ("dangling commits") indéfiniment, ce qui permet de les retrouver même après leur suppression. En utilisant l'API GitHub Event et le projet GH Archive, Sharon Brizinov a scanné tous les événements de force push depuis 2020 et a découvert des milliers de secrets, générant 25 000 $ en primes de sécurité. Il collabore désormais avec Truffle Security pour rendre cet outil open source. Contexte Mon nom est Sharon Brizinov, et bien que je me concentre généralement sur la recherche de vulnérabilités et d'exploitations de niveau bas dans les dispositifs OT/IoT, je m'adonne également occasionnellement à la chasse aux bugs. Récemment, j'ai publié un article sur la découverte de secrets cachés dans des blobs orphelins dans les dépôts GitHub. Cette publication a initié des discussions animées, notamment avec Dylan, CEO de Truffle Security. Nous avons décidé de poursuivre nos recherches pour accéder à 100% des commits supprimés à grande échelle sur GitHub. Que signifie vraiment "supprimer un commit" ? Supposons que vous ayez accidentellement commis et poussé une clé secrète dans votre dépôt. Pour la corriger, vous feriez typiquement un git reset --hard HEAD~1 suivi d'un git push --force pour rendre le commit inaccessible. Cependant, même si le commit n'est plus référencé, il reste stocké dans les reflogs de GitHub. Vous pouvez encore accéder au contenu du commit en connaissant son hash complet ou même ses premières quatre lettres hexadécimales. Mécanismes Sous-jacents Force-Pushing : Explication Un force push réinitialise la tête de la branche vers un commit précédent, rendant l'ancien commit inatteignable par le biais de commandes Git habituelles. Cependant, GitHub conserve ces commits pour des raisons diverses, notamment les pull requests, les forks, l'audit et le monitoring. GitHub Event API et GH Archive L'API GitHub Event permet d'extraire des informations sur divers événements sur GitHub, dont les Push Events. Ces événements contiennent des données sur les commits, y compris les "zero-commit" events, qui indiquent un force push resetant une branche sans ajouter de nouveaux commits. L'archive GH, un projet open source, stocke toutes ces données historiques, rendant possible la reconstruction de commits supprimés. Découvrir les Commits Supprimés Pour identifier les commits supprimés, on peut chercher les Push Events avec zéro commits. Cela indique qu'une branche a été réinitialisée par un force push. Par exemple, un événement dans l'archive GH pourrait montrer un commit supprimé qui existe toujours dans les records de GitHub. Processus Automatisé En combinant l'API GitHub Event et l'archive GH, nous pouvons automatiser la recherche de ces commits. La commande suivante donne un aperçu : ```bash gcloud beta bigquery ml-evaluate trufflesecurity.force_push_scanner模型无法生成答案,请稍后重试~ Je suis désolé, il semble qu'il y ait eu une erreur dans la traduction. Voici une version corrigée et continuée : Processus Automatisé En combinant l'API GitHub Event et l'archive GH, nous pouvons automatiser la recherche de ces commits. Par exemple, voici la commande pour démarrer l'outil scannant tous les événements de force push depuis 2020 : bash python3 oops_commits_scanner.py --org <votre_organisation> --start_date 2020-01-01 Cet outil scanne les données PushEvent de l'archive GH pour trouver les événements sans commits, récupère les commits supprimés (le hash "before"), et les scanne ensuite pour déceler des secrets actifs à l'aide de TruffleHog. Chasse aux Secrets Impactantes Après le lancement de l'automatisation, j'ai découvert des milliers de secrets actifs. Pour identifier les secrets les plus intéressants liés aux organisations les plus impactantes, j'ai utilisé une démarche en trois étapes : 1. Recherche Manuelle : J'ai d'abord parcouru et manipulé les données manuellement. J'ai filtré les commits réalisés par des emails génériques et m focalisé sur ceux avec des emails d'entreprise. 2. Tri Automatisé de Secrets (Vibe-Coding) : Après plusieurs centaines de vérifications manuelles, j'ai développé une plateforme simple using Vercel v0 pour trier ces secrets de manière plus efficace. Cette interface front-end uniquement présentait les secrets dans un tableau facile à utiliser, accompagnée de filtres pour trouver rapidement les éléments importants. 3. Utilisation de l'IA pour le Tri des Secrets : Un agent basé sur LLAMA a été conçu pour analyser automatiquement les secrets et leur associer des informations de base. Malgré son avancement, ce projet n'est pas prêt à être déployé, mais il offrira des capacités d'analyse significatives une fois terminé. Étude de Cas : Prévention d'une Compromise en Chaîne d'Approvisionnement Massif Parmi les secrets trouvés, un GitHub Personal Access Token (PAT) appartenaist à un développeur. Ce jeton avait un accès administrateur à tous les dépôts Istio. Istio est un service mesh open source utilisé par des géants comme Google, IBM et Red Hat pour gérer les communications entre microservices. Avec ce token, j'aurais pu modifier des pipelines, pousser du code, créer de nouvelles releases, ou même supprimer l'intégralité du projet. Ce potentiel de menace était alarmant. Heureusement, Istio dispose d'un rapport bien maintenu, et l'équipe a révoqué rapidement les tokens d'accès dès la notification du problème. Cette expérience souligne l'importance de considérer que la suppression d'un commit ne guarantee pas sa sécurité. Bilan Ce projet fut très enrichissant. J'ai réussi à créer une automatisation fiable pour scanner et trouver des milliers de secrets actifs, certains datant de plusieurs années. J'ai également développé une plateforme de chasse aux secrets avec des fonctionnalités avancées, m'aidant à gagner environ 25 000 $ en primes de sécurité et en reconnaissances. La croyance courante selon laquelle la suppression d'un commit garantit sa sécurité doit être remise en question. Une fois qu'un secret est commis, il devrait être considéré comme compromis et révoqué immédiatement, qu'il s'agisse de blobs Git, de commits Git, ou de toute autre information mise en ligne. Profil de l'Entreprise Truffle Security est une entreprise spécialisée dans la sécurité des dépôts de code et des infrastructures DevOps. Elle propose des solutions pour détecter et révoquer les secrets compromis, notamment grâce à des outils open source comme TruffleHog. Cette collaboration avec Truffle Security permet une diffusion largement bénéfique pour la communauté des développeurs, aidant ainsi à renforcer la sécurité des applications et des projets open source. Évaluation de l'Événement par des Professionnels de l'Industrie Les professionnels de la sécurité de l'information ont salué cette initiative. Elle met en lumière les lacunes dans la gestion des secrets et encourage les organisations à adopter des pratiques de sécurité plus rigoureuses. Outre Truffle Security, d'autres acteurs technologiques se préparent à intégrer des fonctionnalités similaires dans leurs propres produits.