← Derniers articles
💻 computer science

Git Hash Chain Malleability

Cet article démontre que les hachages de commits Git sont malléables, permettant à des attaquants de générer des commits distincts avec un contenu identique, des signatures valides et des badges « Verified » en exploitant l'inversion algébrique dans l'ECDSA, l'insertion de sous-paquets OpenPGP non hachés et le réencodage non canonique de la longueur DER, sapant ainsi les hypothèses de sécurité du verrouillage de dépendances basé sur le hachage et des builds reproductibles.

Auteurs originaux : Jacob Ginesin

Publié 2026-08-07
📖 7 min de lecture🧠 Analyse approfondie

Auteurs originaux : Jacob Ginesin

Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète

Imaginez l'internet comme une immense bibliothèque mondiale où chaque livre, chaque recette et chaque manuel d'instructions est stocké dans un coffre numérique. Pour garder cette bibliothèque organisée, chaque article reçoit une carte d'identité unique composée d'un code spécial. Dans le monde du développement logiciel, ce système s'appelle Git. Considérez un « commit » comme un instantané d'un projet à un moment précis de l'histoire — comme si vous preniez une photo d'un château en Lego que vous venez de construire. Pour s'assurer que personne ne s'introduise pour remplacer une brique par une autre en plastique, les développeurs peuvent « signer » leurs photos avec un sceau numérique, comme un sceau de cire sur une lettre. Ce sceau prouve : « Oui, c'est moi qui ai construit ceci, et personne ne l'a modifié. »

L'idée fondamentale derrière ce système est la confiance par l'unicité. Si vous possédez le code d'identification unique de la photo, vous devriez être capable de trouver cette photo exacte et de savoir qu'elle n'a pas été altérée. C'est comme dire : « Si la carte d'identité indique "Château A", alors "Château A" est la seule chose au monde qui corresponde à cette description. » Cette confiance est si forte que les ordinateurs utilisent ces codes d'identification pour vérifier automatiquement si un logiciel est sûr, pour verrouiller des versions spécifiques de code afin qu'elles ne se cassent pas, et pour prouver exactement qui a construit quoi. Si le code d'identification est unique et immuable, tout le système fonctionne comme une machine bien huilée. Mais que se passe-t-il si quelqu'un peut prendre une photo parfaitement bonne et signée, modifier le sceau de cire de façon infime, et obtenir un nouveau code d'identification qui prouve pourtant que la photo est réelle ? C'est la question que pose ce document.


Le Grand Échange d'Identité Numérique

Dans ce document, un chercheur nommé Jacob Ginesin a découvert une ruse sournoise qui brise la règle du « une photo, un ID » dans Git. Il a démontré qu'un attaquant, sans avoir besoin de voler les clés de signature secrètes ou de briser la mathématique derrière les sceaux numériques, peut créer une deuxième carte d'identité, totalement différente, pour le même morceau de logiciel.

Voici le tour de magie : l'attaquant prend un commit signé (une photo avec un sceau de cire) et modifie le sceau d'une manière qui semble différente pour un ordinateur mais qui signifie exactement la même chose pour un humain. C'est comme prendre un sceau de cire, le presser d'une forme légèrement différente, ou écrire le même message sur un morceau de papier mais en utilisant une police de caractères différente. Le contenu de la photo n'a pas changé du tout — le château en Lego est identique. Le sceau prouve toujours l'identité de l'auteur. Mais parce que l'« apparence » du sceau a changé, l'ordinateur génère un code d'identification complètement nouveau pour celui-ci.

La partie effrayante ? Les systèmes informatiques qui vérifient ces identifiants (comme GitHub) disent : « Hé, ce sceau est valide ! C'est un commit vérifié ! » et lui attribuent un brillant badge vert « Vérifié ». Désormais, vous avez deux cartes d'identité différentes pour le même château en Lego. L'une dit « Château A », l'autre dit « Château B ». Les deux sont signés par la même personne, et les deux portent la mention « Vérifié ».

Les Trois Façons de Tromper le Système

Le document explique trois façons de réaliser ce tour, selon le type de sceau numérique utilisé :

  1. Le Basculement Mathématique (pour ECDSA) : Imaginez une droite numérique où vous avez un nombre, disons 5. Dans ce jeu mathématique spécifique, le nombre 5 et le nombre « Total moins 5 » sont en fait la même chose. L'attaquant se contente de basculer le nombre sur le sceau. Cela semble différent, mais la mathématique dit que c'est toujours une signature valide.
  2. La Note Cachée (pour RSA et EdDSA) : Imaginez une lettre scellée. Le sceau couvre le message principal, mais il y a une petite poche sur le dos qui n'est pas scellée. L'attaquant glisse une petite note inoffensive dans cette poche. Le message principal est intact, et le sceau est toujours valide, mais la lettre a maintenant un poids et une forme légèrement différents, ce qui change la carte d'identification.
  3. La Police de Caractères Fantaisie (pour S/MIME) : Imaginez écrire un nombre comme « 32 ». Vous pouvez l'écrire comme « 32 » ou comme « 0x20 ». Les deux signifient la même chose, mais l'un est la façon « standard » et l'autre est la façon « fantaisie ». L'attaquant réécrit le nombre de la façon fantaisie. L'ordinateur qui vérifie la lettre (GitHub) est un peu indulgent et accepte la police fantaisie, mais un ordinateur plus strict (votre ordinateur portable local) pourrait être confus et dire : « Attendez, ce n'est pas la méthode standard ! »

Pourquoi cela compte : Le Problème du « Fantôme »

Vous pourriez penser : « Et alors ? Si le château est le même, qu'importe ? » Mais dans le monde numérique, la carte d'identité est le château.

  • Le Problème du Videur : Imaginez un videur de club qui possède une liste d'identifiants bannis. Si vous êtes banni, vous ne pouvez pas entrer. Mais si l'attaquant crée un « ID Fantôme » pour la même personne qui n'est pas sur la liste des bannis, le videur vous laisse entrer. L'attaquant peut faire passer du code malveillant à travers les filtres de sécurité simplement en changeant la carte d'identité.
  • Le Problème du Miroir : Imaginez deux miroirs face à face. L'un montre le vrai château ; l'autre montre un « Château Fantôme » qui semble identique mais possède un nom différent. Si vous regardez le mauvais miroir, vous pourriez croire que vous voyez l'original, alors que vous voyez une copie contrôlée par l'attaquant.
  • La Chaîne Brisée : Parce que chaque nouveau château en Lego dans une chaîne est construit sur le précédent, changer l'ID d'un château change l'ID de tous les châteaux construits après lui. Cela crée une « bifurcation » dans l'histoire. Vous vous retrouvez avec deux chronologies parallèles : l'une avec l'ID original et l'autre avec l'ID fantôme. Les deux semblent réels, les deux sont signés, mais ils sont différents.

Le Verdict

Le document prouve que le badge « Vérifié » sur un hash de commit n'est pas une garantie d'unicité du contenu. C'est comme avoir un tampon « Vérifié » sur un passeport qui ne garantit pas que vous êtes la seule personne avec ce visage ; cela garantit seulement que le tampon est réel.

L'auteur a construit un outil capable d'effectuer automatiquement ce tour sur n'importe quel commit signé. Il a testé cela sur GitHub, et le site a joyeusement accepté les commits « Fantômes », leur accordant leurs propres badges « Vérifiés ». Cela signifie que les systèmes qui reposent sur ces cartes d'identification pour bloquer les acteurs malveillants, verrouiller des versions de logiciels ou prouver qui a construit quoi, sont vulnérables. La solution n'est pas d'arrêter de signer ; c'est de s'assurer que les ordinateurs qui vérifient les sceaux sont assez stricts pour dire : « Non, ce n'est pas exactement le même sceau que nous avons vu auparavant », et pour vérifier le contenu réel, et non pas seulement la carte d'identification.

En bref, un commit signé est une promesse, mais le document montre que la promesse peut être écrite d'une manière qui crée une version « fantôme » d'elle-même, trompant les systèmes censés nous protéger.

Noyé(e) sous les articles dans votre domaine ?

Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.

Essayer Digest →