← Ultimi articoli
💻 computer science

Git Hash Chain Malleability

Questo articolo dimostra che gli hash dei commit di Git sono malleabili, permettendo ad attaccanti di generare commit distinti con contenuto identico, firme valide e badge "Verified" sfruttando l'inversione algebrica in ECDSA, l'inserimento di subpacket OpenPGP non hashati e la ricodifica non canonica della lunghezza DER, minando così le assunzioni di sicurezza del pinning delle dipendenze basato su hash e delle build riproducibili.

Autori originali: Jacob Ginesin

Pubblicato 2026-08-07
📖 6 min di lettura🧠 Approfondimento

Autori originali: Jacob Ginesin

Articolo originale sotto licenza CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dagli autori. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo

Immagina internet come una gigantesca biblioteca globale dove ogni libro, ogni ricetta e ogni manuale di istruzioni è conservato in una cassaforte digitale. Per mantenere questa biblioteca organizzata, ogni singolo oggetto riceve una tessera d'identità unica fatta con un codice speciale. Nel mondo dello sviluppo software, questo sistema si chiama Git. Pensa a un "commit" come a un'istantanea di un progetto in un momento specifico del tempo — come scattare una foto a un castello di Lego che hai appena costruito. Per assicurarsi che nessuno si intrometta per scambiare un mattoncino con uno di plastica, gli sviluppatori possono "firmare" le loro foto con un sigillo digitale, come un sigillo di cera su una lettera. Questo sigillo prova: "Sì, l'ho costruito io, e nessuno lo ha modificato".

L'idea fondamentale dietro questo sistema è la fiducia attraverso l'unicità. Se possiedi il codice ID unico della foto, dovresti essere in grado di trovare esattamente quella foto e sapere che non è stata alterata. È come dire: "Se la tessera d'identità dice 'Castello A', allora 'Castello A' è l'unica cosa al mondo che corrisponde a quella descrizione". Questa fiducia è così forte che i computer usano questi codici ID per controllare automaticamente se un software è sicuro, per bloccare versioni specifiche di codice in modo che non si rompano e per provare esattamente chi ha costruito cosa. Se il codice ID è unico e immutabile, l'intero sistema funziona come una macchina ben oliata. Ma cosa succede se qualcuno può prendere una foto perfetta e firmata, cambiare il sigillo di cera solo un pochino, e ottenere una nuova tessera d'identità che dimostra ancora che la foto è reale? Questa è la domanda che questo articolo pone.


Il Grande Scambio di Identità Digitale

In questo articolo, un ricercatore di nome Jacob Ginesin ha scoperto un trucco subdolo che rompe la regola "una foto, un ID" in Git. Ha dimostrato che un attaccante, senza bisogno di rubare le chiavi di firma segrete o di rompere la matematica dietro i sigilli digitali, può creare una seconda tessera d'identità, totalmente diversa per lo stesso identico pezzo di software.

Ecco il trucco magico: l'attaccante prende un commit firmato (una foto con un sigillo di cera) e modifica il sigillo in un modo che appare diverso per un computer ma significa esattamente la stessa cosa per un essere umano. È come prendere un sigillo di cera, premerlo in una forma leggermente diversa, o scrivere lo stesso messaggio su un pezzo di carta usando un carattere diverso. Il contenuto della foto non è cambiato affatto — il castello di Lego è identico. Il sigillo prova ancora l'identità dell'autore. Ma poiché l'aspetto del sigillo è cambiato, il computer genera una completamente nuova tessera d'identità per esso.

La parte spaventosa? I sistemi informatici che controllano questi ID (come GitHub) dicono: "Ehi, questo sigillo è valido! Questo è un commit verificato!" e gli conferiscono un brillante distintivo verde "Verified". Ora, hai due diverse tessere d'identità per lo stesso identico castello di Lego. Una dice "Castello A", l'altra dice "Castello B". Entrambe sono firmate dalla stessa persona, e entrambe sono contrassegnate come "Verified".

I Tre Modi per Ingannare il Sistema

L'articolo spiega tre modi diversi per compiere questo trucco, a seconda del tipo di sigillo digitale utilizzato:

  1. Il Ribaltamento Matematico (per ECDSA): Immagina una linea numerica dove hai un numero, diciamo 5. In questo specifico gioco matematico, il numero 5 e il numero "Totale meno 5" sono in realtà la stessa cosa. L'attaccante semplicemente ribalta il numero sul sigillo. Sembra diverso, ma la matematica dice che è ancora una firma valida.
  2. La Nota Nascosta (per RSA e EdDSA): Immagina una lettera sigillata. Il sigillo copre il messaggio principale, ma c'è una piccola tasca sul retro che non è sigillata. L'attaccante infila una piccola nota innocua in quella tasca. Il messaggio principale è intatto e il sigillo è ancora valido, ma la lettera ora ha un peso e una forma leggermente diversi, il che cambia la tessera d'identità.
  3. Il Carattere Elegante (per S/MIME): Immagina di scrivere un numero come "32". Puoi scriverlo come "32" o come "0x20". Entrambi significano la stessa cosa, ma uno è il modo "standard" e l'altro è il modo "elegante". L'attaccante riscrive il numero nel modo elegante. Il computer che controlla la lettera (GitHub) è un po' permissivo e accetta il carattere elegante, ma un computer più severo (il tuo laptop locale) potrebbe confondersi e dire: "Aspetta, questo non è il modo standard!".

Perché Questo Importa: Il Probleo del "Fantasma"

Potresti pensare: "E allora? Se il castello è lo stesso, a chi importa se la tessera d'identità è diversa?". Ma nel mondo digitale, la tessera d'identità è il castello.

  • Il Problema del Buttafuori: Immagina un buttafuori all'ingresso di un club che ha una lista di ID banditi. Se sei bandito, non puoi entrare. Ma se l'attaccante crea un "ID Fantasma" per la stessa persona che non è nella lista dei banditi, il buttafuori lo lascia entrare. L'attaccante può far passare codice malevolo oltre i filtri di sicurezza semplicemente cambiando la tessera d'identità.
  • Il Problema dello Specchio: Immagina due specchi che si fronteggiano. Uno mostra il castello reale; l'altro mostra un "Castello Fantasma" che sembra identico ma ha un nome diverso. Se stai guardando lo specchio sbagliato, potresti pensare di vedere l'originale, ma in realtà stai vedendo una copia che l'attaccante controlla.
  • La Catena Interrotta: Poiché ogni nuovo castello di Lego in una catena viene costruito sopra il precedente, cambiare l'ID di un castello cambia l'ID di ogni castello costruito dopo di esso. Questo crea una "biforcazione" nella storia. Ti ritrovi con due linee temporali parallele: una con l'ID originale e l'altra con l'ID fantasma. Entrambe sembrano reali, entrambe sono firmate, ma sono diverse.

Il Verdetto

L'articolo dimostra che il distintivo "Verified" su un hash di un commit non è una garanzia di unicità del contenuto. È come avere un timbro "Verified" su un passaporto che non garantisce che tu sia l'unica persona con quel volto; garantisce solo che il timbro è reale.

L'autore ha costruito uno strumento che può eseguire automaticamente questo trucco su qualsiasi commit firmato. Ha testato il tutto su GitHub, e il sito ha accettato felicemente i commit "fantasma", conferendo loro i propri distintivi "Verified". Ciò significa che i sistemi che si affidano a queste tessere d'identità per bloccare i malintenzionati, bloccare le versioni del software o provare chi ha costruito cosa, sono vulnerabili. La soluzione non è smettere di firmare; è assicurarsi che i computer che controllano i sigilli siano abbastanza severi da dire: "No, quello non è l'esatto stesso sigillo che abbiamo visto prima", e che controllino il contenuto effettivo, non solo la tessera d'identità.

In breve: un commit firmato è una promessa, ma l'articolo dimostra che la promessa può essere scritta in un modo che crea una versione "fantasma" di se stessa, ingannando i sistemi che dovrebbero tenerci al sicuro.

Sommerso dagli articoli nel tuo campo?

Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.

Prova Digest →