Fuite de secrets sur GitHub : attention aux commits orphelins
Un chercheur a automatisé la découverte de secrets sur les dépôts publics en ciblant, à partir des logs du projet GH Archive, les commits orphelins.

git reset --hard HEAD, puis git push origin -f : la technique est commune pour faire disparaître des commits qu'on aurait poussés accidentellement.
Faire disparaître, certes, mais pas supprimer. Un chercheur en sécurité l'a démontré... en automatisant l'exfiltration de secrets à partir de ces commits.
L'intéressé a simplement assemblé des outils existants et les a passés à l'échelle. Il s'est notamment aidé de GH Archive. Ce projet garde une trace de l'activité publique sur GitHub. Il exploite pour cela l'API de la plate-forme afin de journaliser une vingtaine de types d'actions. Silicon.fr a eu l'occasion d'en parler, notamment au sujet de systèmes de création automatisée de CV ou de détection des comportements anormaux de starring (attribution d'étoiles).
Ces commits orphelins qui cachent des secrets
Le chercheur avait d'abord porté son attention sur les blobs. Ces objets stockent le contenu de fichiers. Il peut arriver qu'ils deviennent orphelins (non référencés : atteignables depuis aucune branche, aucun tag, etc.), typiquement lorsque l'historique est écrasé par un rebase ou un reset. Git les conserve toutefois - par défaut pendant au moins deux semaines - pour permettre une éventuelle récupération*.
Sur GitHub, un autre type d'objet est conservé même une fois orphelin : les commits. De là l'idée d'une "chasse aux secrets" à grande échelle.
L'API GitHub Event donne accès à ces commits sur l'ensemble des dépôts publics. Sans authentification, mais avec des limites de débit... que l'usage des logs de GH Archive permet, en quelque sorte, de contourner. On peut alors, dans les grandes lignes :
- Identifier les éléments force push
- Isoler ceux qui ne contiennent un commit "vide"
- Repérer les commits qui précèdent chacun de ces événements et récupérer leurs hashs
- Utiliser ces hashs pour consulter les commits sur l'UI GitHub ou sur l'API
Un accès admin à tous les dépôts d'Istio
Un outil open source mettant en oeuvre le processus a été publié, "à destination des blue teams", nous rappelle-t-on. Il stocke les secrets dans un fichier JSON et permet de les visualiser sous forme de tableaux et de graphiques.
La technique a fonctionné, entre autres, avec le Istio (service mesh pour Kubernetes). Un commit orphelin contenait un jeton d'accès qu'un développeur avait fait fuiter en poussant des fichiers de configuration cachés. Il donnait un accès de niveau admin à tous les repos du projet.
* Délai au-delà duquel on peut accélérer la procédure de suppression en demandant à GitHub d'effectuer un garbage collect.
Illustration © GitHub
Sur le même thème
Voir tous les articles Cybersécurité