← Nieuwste papers
💻 computer science

Git Hash Chain Malleability

Dit artikel toont aan dat Git-commit-hashes manipuleerbaar zijn, waardoor aanvallers verschillende commits kunnen genereren met identieke inhoud, geldige handtekeningen en "Verified"-badges door gebruik te maken van algebraïsche inversie in ECDSA, ongehashte OpenPGP-subpakketinsertie en niet-canonieke DER-lengte-hercodering, waardoor de veiligheidsaannames van hash-gebaseerde dependency-pinning en reproduceerbare builds worden ondermijnd.

Oorspronkelijke auteurs: Jacob Ginesin

Gepubliceerd 2026-08-07
📖 6 min leestijd🧠 Diepgaand

Oorspronkelijke auteurs: Jacob Ginesin

Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer

Stel je het internet voor als een enorme, wereldwijde bibliotheek waar elk boek, elk recept en elke handleiding wordt bewaard in een digitale kluis. Om deze bibliotheek georganiseerd te houden, krijgt elk item een unieke ID-kaart gemaakt van een speciale code. In de wereld van softwareontwikkeling wordt dit systeem Git genoemd. Denk aan een "commit" als een snapshot van een project op een specifiek moment in de tijd—zoals het maken van een foto van een Lego-kasteel dat je net hebt gebouwd. Om ervoor te zorgen dat niemand er stiekem een steen vervangt door een plastic blokje, kunnen ontwikkelaars hun foto's "ondertekenen" met een digitale zegel, zoals een waszegel op een brief. Deze zegel bewijst: "Ja, ik heb dit gebouwd, en niemand heeft het veranderd."

Het grote idee achter dit systeem is vertrouwen door uniekheid. Als je de unieke ID-code van de foto hebt, zou je die exacte foto moeten kunnen vinden en moeten weten dat deze niet is gewijzigd. Het is alsoalso zeggen: "Als de ID-kaart 'Kasteel A' zegt, dan is 'Kasteel A' het enige in de wereld dat aan die beschrijving voldoet." Dit vertrouwen is zo sterk dat computers deze ID-codes gebruiken om automatisch te controleren of software veilig is, om specifieke versies van code vast te leggen zodat ze niet kapot gaan, en om precies te bewijzen wie wat heeft gebouwd. Als de ID-code uniek en onveranderlijk is, werkt het hele systeem als een goed geoliede machine. Maar wat gebeurt er als iemand een perfecte, ondertekende foto kan nemen, de waszegel een heel klein beetje verandert, en zo een nieuw ID-kaart krijgt die nog steeds bewijst dat de foto echt is? Dat is de vraag die dit paper stelt.


De Grote Digitale Identiteitswissel

In dit paper ontdekte een onderzoeker genaamd Jacob Ginesin een sluwe truc die de "één foto, één ID"-regel in Git doorbreekt. Hij liet zien dat een aanvaller, zonder de geheime ondertekeningssleutels te hoeven stelen of de wiskunde achter de digitale zegels te hoeven breken, een tweede, totaal andere ID-kaart kan maken voor exact hetzelfde stuk software.

Hier is de goocheltruc: De aanvaller neemt een ondertekende commit (een foto met een waszegel) en past de zegel aan op een manier die er voor een computer anders uitziet, maar voor een mens precies hetzelfde betekent. Het is alsof je een waszegel neemt, de vorm een klein beetje aanpast, of dezelfde boodschap op een stuk papier schrijft maar een ander lettertype gebruikt. De inhoud van de foto is niet veranderd; het Lego-kasteel is identiek. De zegel bewijst nog steeds de identiteit van de auteur. Maar omdat het "uiterlijk" van de zegel is veranderd, genereert de computer een volledig nieuwe ID-kaart voor het.

Het enge deel? De computersystemen die deze ID's controleren (zoals GitHub) zeggen: "Hé, deze zegel is geldig! Dit is een geverifieerde commit!" en geven het een glimmend groen "Verified"-badge. Nu heb je twee verschillende ID-kaarten voor exact hetzelfde Lego-kasteel. De ene zegt "Kasteel A", en de andere zegt "Kasteel B". Beiden zijn ondertekend door dezelfde persoon, en beiden zijn gemarkeerd als "Verified".

De Drie Manieren om het Systeem te Bedriegen

Het paper legt drie verschillende manieren uit om deze truc uit te voeren, afhankelijk van het soort digitale zegel dat wordt gebruikt:

  1. De Wiskundige Flip (voor ECDSA): Stel je een getallenlijn voor waar je een getal hebt, bijvoorbeeld 5. In dit specifieke wiskundige spel zijn het getal 5 en het getal "Totaal minus 5" eigenlijk hetzelfde. De aanvaller flipt het getal op de zegel. Het ziet er anders uit, maar de wiskunde zegt dat het nog steeds een geldige handtekening is.
  2. Het Verborgen Briefje (voor RSA en EdDSA): Stel je een verzegelde brief voor. De zegel bedekt de hoofdtekst, maar er is een klein zakje aan de achterkant dat niet verzegeld is. De aanvaller glipt een klein, onschuldig briefje in dat zakje. De hoofdtekst is onaangetast en de zegel is nog steeds geldig, maar de brief heeft nu een iets ander gewicht en vorm, wat de ID-kaart verandert.
  3. Het Fancy Lettertype (voor S/MIME): Stel je voor dat je een getal als "32" opschrijft. Je kunt "32" schrijven of "0x20". Beide betekenen hetzelfde, maar de een is de "standaard" manier en de ander is de "fancy" manier. De aanvaller schrijft het getal op de fancy manier. De computer die de brief controleert (GitHub) is een beetje laks en accepteert het fancy lettertype, maar een strengere computer (je eigen laptop) kan in de war raken en zeggen: "Wacht even, dat is niet de standaard manier!"

Waarom dit ertoe doet: Het "Ghost"-probleem

Je denkt misschien: "En dan? Als het kasteel hetzelfde is, wie maakt het dan uit dat de ID-kaart anders is?" Maar in de digitale wereld is de ID-kaart het kulle.

  • Het Bouncer-probleem: Stel je een uitsmijter bij een club voor die een lijst heeft met verboden ID's. Als je verbannen bent, kom je niet binnen. Maar als de aanvaller een "Ghost ID" creëert voor dezelfde persoon die niet op de zwarte lijst staat, laat de uitsmijter hen binnen. De aanvaller kan kwaadaardige code langs beveiligingsfilters smokkelen door simpelweg de ID-kaart te veranderen.
  • Het Spiegelprobleem: Stel je twee spiegels voor die tegenover elkaar staan. De ene laat het echte kasteel zien; de andere laat een "Ghost Castle" zien die er identiek uitziet maar een andere naam heeft. Als je in de verkeerde spiegel kijkt, denk je dat je het origineel ziet, maar je ziet eigenlijk een kopie die de aanvaller controleert.
  • De Gebroken Keten: Omdat elk nieuw Lego-kasteel in een keten wordt gebouwd op het vorige, verandert het wijzigen van de ID van één kasteel de ID van elk kasteel dat daarna is gebouwd. Dit creëert een "fork" in de geschiedenis. Je eindigt met twee parallelle tijdlijnen: één met de originele ID en één met de ghost ID. Beiden zien er echt uit, beiden zijn ondertekend, maar ze zijn verschillend.

Het Verdict

Het paper bewijst dat de "Verified"-badge op een commit hash geen unieke garantie is voor de inhoud. Het is alsof je een "Verified"-stempel op een paspoort hebt dat niet garandeert dat jij de enige bent met dat gezicht; het garandeert alleen dat de stempel echt is.

De auteur bouwde een tool die deze truc automatisch kan uitvoeren op elke ondertekende commit. Ze hebben dit getest op GitHub, en de site accepteerde de "Ghost"-commits zonder problemen, waarbij ze hun eigen "Verified"-badges kregen. Dit betekent dat systemen die vertrouwen op deze ID-kaarten om slechte actoren te blokkeren, softwareversies vast te leggen of te bewijzen wie wat heeft gebouwd, kwetsbaar zijn. De oplossing is niet om te stoppen met ondertekenen; het is om ervoor te zorgen dat de computers die de zegels controleren streng genoeg zijn om te zeggen: "Nee, dat is niet de exact zelfde zegel die we eerder zagen," en om de werkelijke inhoud te controleren, in plaats van alleen de ID-kaart.

Kortom: een ondertekende commit is een belofte, maar het paper laat zien dat de belofte op een manier geschreven kan worden die een "ghost"-versie van zichzelf creëert, waardoor de systemen die ons veilig moeten houden, worden misleid.

Verdrinkt u in papers in uw vakgebied?

Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.

Probeer Digest →