Le petit badge vert « Verified » de GitHub rassure des millions de développeurs : ce commit vient bien de qui il prétend. Sauf qu’une recherche vient de montrer qu’on peut réécrire un commit signé dans un tout nouveau hash sans toucher aux fichiers ni casser la signature. Le badge reste vert, la confiance vacille.
Points clés
- Des commits Git signés peuvent être re-encodés en nouveaux hash sans altérer les fichiers ni invalider la signature
- Le badge « Verified » de GitHub reste affiché malgré ces multiples identités cryptographiques
- La faille exploite la souplesse du format des objets Git, pas le chiffrement lui-même
- Les chaînes CI/CD et politiques de sécurité reposant sur l’unicité du hash sont concernées
Ce que dit la recherche
Un commit Git est un objet texte que Git transforme en identifiant (le fameux hash SHA). Quand un développeur signe son commit avec une clé GPG ou SSH, GitHub vérifie la signature et affiche « Verified ». Le principe repose sur l’idée qu’un commit signé est figé : changez un octet, la signature saute.
La recherche démontre qu’il est possible de re-encoder un commit signé pour produire un hash flambant neuf, sans modifier le contenu des fichiers et sans invalider la signature d’origine. En clair, un même commit peut exister sous plusieurs identités cryptographiques différentes, toutes affichées comme légitimes par GitHub.
Pourquoi c’est gênant
Le hash d’un commit est censé être son empreinte digitale unique. Beaucoup d’outils, de scripts CI/CD et de politiques de sécurité l’utilisent comme référence de confiance. Si un même commit signé peut se décliner en plusieurs hash valides, toute la chaîne qui s’appuie sur cette unicité devient discutable.
La marge de manœuvre vient de la souplesse du format des objets Git et de ce que GitHub accepte de valider. Ce n’est pas une faille qui casse le chiffrement lui-même, mais un décalage entre ce que la signature garantit vraiment et ce que le badge « Verified » laisse croire au premier coup d’œil.
La leçon pour les développeurs
Le message est simple : un badge vert n’est pas un contrat notarié. Une signature valide prouve qu’une clé a signé un contenu, pas que le hash affiché est le seul possible ni que la provenance est incontestable. Ceux qui bâtissent leurs garde-fous de sécurité sur la seule mention « Verified » feraient bien de vérifier ce qu’elle recouvre réellement, empreinte de clé et politique de vérification comprises.