Cyberattacchi alimentati dall'intelligenza artificiale: Come individuare, prevenire e difendersi dalle minacce intelligenti

Leggi ora
Per le traduzioni dei siti utilizziamo l'intelligenza artificiale e, sebbene ci sforziamo di essere accurati, non sempre le traduzioni sono precise al 100%. La vostra comprensione è apprezzata.

Analisi e correzione della vulnerabilità di Git CVE-2024-32002

da OPSWAT
Condividi questo post
Minh Pham e Thai Do, studenti della Ho Chi Minh University of Technology, che hanno partecipato al programma di borse di studio OPSWAT
Gli studenti hanno partecipato al programma di borse di studio OPSWAT .

È stata recentemente divulgata una vulnerabilità critica in Git che consente attacchi RCE (esecuzione di codice in remoto), con impatto su più versioni di Git e Microsoft Visual Studio 2017. La vulnerabilità consente agli aggressori di manipolare i repository Git utilizzando i sottomoduli, sfruttando un bug di Git che consente la scrittura di file al di fuori dell'albero di lavoro del sottomodulo e nella directory .git/. Questo bug consente l'esecuzione di un hook dannoso mentre un'operazione di clonazione del repository è ancora in corso [1]. 

La vulnerabilità CVE-2024-32002 interessa Microsoft Visual Studio 2017 versione 15.9 e le versioni di Git precedenti a 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 e 2.39.4. Può essere sfruttato in ambienti in cui il supporto per i collegamenti simbolici è abilitato su sistemi operativi che non fanno distinzione tra maiuscole e minuscole. 

Informazioni di gravità e vettore CVSS (Common Vulnerability Scoring System) 3.x con un punteggio di base di 9.0 etichettato come critico, fornite da GitHub, Inc.

Capire Git

Git è un sistema di controllo di versione distribuito, gratuito e open-source, progettato per aiutare gli sviluppatori di software a gestire le basi di codice in modo rapido ed efficiente. Migliora la collaborazione tra i membri del team di sviluppo organizzando e tracciando le modifiche ai file e alle directory in modo standardizzato e strutturato. 

Git è ampiamente utilizzato nello sviluppo del software. Piattaforme come GitHub, GitLab e Bitbucket si basano su Git per migliorare la collaborazione tra gli sviluppatori grazie alle sue potenti funzioni: 

  • Registrazione di modifiche tracciabili ai file di codice, note come commit
  • Riportare le modifiche al codice a versioni precedenti, se necessario. 
  • Combinare in modo efficiente le modifiche provenienti da rami o collaboratori diversi. 
  • Tenere un registro della storia di chi ha apportato le modifiche e delle relative date.
Una rappresentazione visiva della struttura di una cartella .git, che mostra directory come config, HEAD, hooks, objects e refs.

Ganci Git 

Quando viene creato o clonato un repository Git, usando i comandi git init o git clone, viene generata una directory .gitalla radice dell'albero di lavoro. La struttura della directory .git inizialmente appare come segue: 

Gli hook di Git sono script eseguibili, situati nella cartella .git/hooks o nella cartella .git/modules/module_type/module_name/hooks. Gli hook vengono attivati automaticamente quando si verificano eventi specifici in un repository Git.  

Quando un file nella directory hooks non ha il suffisso .sample, i comandi in quel file saranno eseguiti prima o dopo una particolare azione Git inclusa nel nome del file, come pre-commit, post-commit e post-checkout

Sottomoduli Git

Un sottomodulo Git è un record all'interno di un repository Git che fa riferimento a un commit specifico in un repository esterno. Quando un sottomodulo viene aggiunto a un repository, viene creato un nuovo file nella directory .gitmodules con i metadati della mappatura tra l'URL del sottomodulo e la sua directory locale. Quando un repository contiene più sottomoduli, il file .gitmodules includerà una voce per ciascuno di essi. [3] 

Diagramma che mostra l'interazione tra repository e sottomoduli, illustrando la relazione tra il repository A, il sottomodulo B e la cartella C.
Esempio di contenuto di un file .gitmodules, che mostra la configurazione di un sottomodulo chiamato "Esempio".
L'immagine seguente mostra l'aspetto di un file .gitmodules: 

Collegamenti simbolici (Symlinks)

Un collegamento simbolico, detto anche link simbolico o soft link, è un file che punta a un altro file o directory (detto "target") specificandone il percorso. Se un collegamento simbolico viene cancellato, la sua destinazione rimane inalterata. [4] 

Un link simbolico in Git è creato come un file con metadati che lo fanno funzionare come un riferimento o una scorciatoia a un altro file. I link simbolici possono essere usati per creare più riferimenti a un file senza replicarne il contenuto.

Diagramma che illustra i collegamenti simbolici e rigidi a un file (File A), mostrando come questi collegamenti accedano allo stesso contenuto del file.
Git tratta i collegamenti simbolici come file specializzati che memorizzano il percorso del file o della directory a cui fanno riferimento. 
Visualizzazione dei collegamenti simbolici all'interno di un repository Git, mostrando le strutture di directory e file e i loro percorsi symlink.
Quando un repository o un ramo che contiene un collegamento simbolico viene clonato o controllato, il collegamento simbolico memorizzato in Git viene convertito in un collegamento simbolico sul filesystem locale. 

Analisi delle vulnerabilità della sicurezza di GIT

Analisi delle patch

Per comprendere più a fondo le vulnerabilità della sicurezza, gli specialisti della sicurezza eseguono spesso l'analisi delle patch. Si tratta di una tecnica che aiuta a identificare le funzioni vulnerabili e i potenziali vettori di attacco. I ricercatori OPSWAT hanno esaminato le modifiche apportate alla versione patchata per risolvere la vulnerabilità CVE-2024-32002 e hanno scoperto che due file sono stati aggiornati per risolvere questa CVE.

Uno dei file aggiornati è il file submodule--helper.c, che include il codice che gestisce la clonazione dei sottomoduli Git. I nuovi commit nella versione patchata includono i due seguenti:  

  1. Aggiunta della funzione dir_contains_only_dotgit per garantire che la cartella dei sottomoduli non contenga file o directory .git.
Modifiche al codice in un file chiamato submodule-helper.c all'interno dell'interfaccia Git, che mostra 83 aggiunte e nessuna cancellazione
  1. Sono state apportate modifiche alla funzione clone_submodule() per includere una condizione per verificare se la directory del sottomodulo esiste ed è vuota. Se la directory non è vuota, il processo di clonazione viene interrotto. 
Uno snippet di codice dettagliato da un commit Git, che evidenzia una funzione che controlla il contenuto delle directory durante le operazioni sui sottomoduli

Il secondo aggiornamento del nuovo commit riguarda il file t/t7406-submodule-update.sh, che aggiunge uno script di test per verificare che la vulnerabilità sia stata risolta. 

Modifiche al codice ampliate in un file di test T7406-submodule-update.sh, con configurazioni di test dettagliate per i percorsi dei sottomoduli e i collegamenti simbolici.

Dall'analisi allo sfruttamento

Analisi del flusso di lavoro di collegamenti e sottomoduli in Git

Oltre agli approfondimenti raccolti con l'analisi delle patch e la descrizione della vulnerabilità CVE-2024-32002, i borsisti OPSWAT hanno lavorato sull'analisi del flusso di lavoro dei link simbolici e dei sottomoduli in Git. Hanno analizzato la sequenza di eventi che si verifica quando un utente clona un repository:

  1. Git inizia scaricando i file e le directory dal repository primario. 
  2. Utilizza le definizioni specificate nei file di collegamento simbolico per ricreare i corrispondenti collegamenti simbolici nel file system locale.  
  3. Se il collegamento simbolico punta a un file esistente, il collegamento sarà funzionante; altrimenti, il collegamento simbolico rimarrà inoperante fino a quando non verrà ripristinata la destinazione.  
  4. Se il repository viene clonato con l'opzione --recursive, Git clona i sottomoduli (repository esterni) e li colloca nei percorsi delle directory come indicato nel file .gitmodules.  
  5. Se un link simbolico fa parte del percorso del sottomodulo (per esempio, util/modulo/test, dove util è un link simbolico che punta a un'altra cartella, come symlink_folder), Git memorizzerà il contenuto del sottomodulo nella cartella effettiva a cui fa riferimento il link simbolico (per esempio, symlink_folder/modulo/test), pur consentendo l'accesso attraverso il percorso originale del link simbolico. 
Un diagramma di flusso visivo che mostra le fasi di clonazione di un repository, il download di file e directory, la ricreazione dei collegamenti simbolici, la clonazione dei sottomoduli e lo spostamento nel percorso corretto.

Comprendere la vulnerabilità di sicurezza di Git CVE-2024-32002 

Creazione di repository dannosi

I ricercatori OPSWAT hanno esaminato ulteriormente la creazione di repository dannosi sulla base degli aggiornamenti effettuati per il filet/t7406-submodule-update.sh e hanno suddiviso questo processo nelle seguenti fasi:

  1. Creazione di un repository contenente un hook post-checkout
Uno snippet di codice del terminale che mostra i comandi per impostare un hook post-checkout in Git, compresa la creazione di directory e l'aggiunta di script.
  1. Creazione di un altro repository che include un sottomodulo, situato nel percorso A/moduli/x. Il nuovo sottomodulo fa riferimento al repository creato in precedenza.
Uno snippet di codice del terminale che dimostra il processo di aggiunta di un sottomodulo a un repository usando i comandi di Git
  1. Creare un collegamento simbolico chiamato a, che punta alla cartella .git nell'indice di Git. 
Un esempio di script da terminale che evidenzia i comandi per creare e fare il commit di un file .git come utilità in un repository
Un diagramma di flusso che illustra uno scenario di attacco in cui un repository hook dannoso viene aggiunto come sottomodulo a un repository principale, portando all'esecuzione di script.
Un diagramma che mostra come un utente malintenzionato può sfruttare la CVE clonando un repository. 

Comprendere la falla di sicurezza

Quando un utente clona un repository dannoso, creato nel passaggio precedente, utilizzando l'opzione --recursive, lo script dannoso dell'hook post-checkout verrà attivato, consentendo all'attaccante di compromettere il dispositivo dell'utente. 

L'esecuzione di codice remoto avviene perché il repository principale rileva un collegamento simbolico denominato a che punta alla directory .git quando viene clonato. Con la modalità ricorsiva abilitata, anche i sottomoduli vengono estratti nel repository clonato. Questo repository contiene una cartella hooks, che contiene lo script di hook post-checkout, e la sua directory locale è in A/modules/x.  

Poiché a punta alla cartella.git e il file system non fa distinzione tra maiuscole e minuscole, A viene interpretato come equivalente ad a. Git viene indotto a scrivere lo script dell'hook post-checkout nella cartella .git/modules/query/fast/hooks/. Se uno script di hook post-checkout viene trovato nella cartella . git/modules/{module_type}/{module_name}/hooks, verrà attivato quando il repository principale viene clonato con l'opzione --recursive. Di conseguenza, gli aggressori possono compromettere con successo il dispositivo dell'utente eseguendo codice remoto.

Un diagramma che illustra l'interazione della vittima con un repository dannoso, tra cui la clonazione, l'estrazione di sottomoduli e l'esecuzione di script non intenzionali.
Un diagramma che mostra il flusso dell'attacco

Simulazione dello sfruttamento della vulnerabilità di Git

Sulla base dei risultati precedenti, i membri di OPSWAT hanno creato un repository principale e un hook per simulare la creazione di un repository dannoso:

  1. Inizialmente, si consiglia di configurare Git in modo che consenta sempre il file protocol.file, abiliti i collegamenti simbolici core.symlinks e imposti il nome predefinito del ramo a main (per evitare il messaggio di avvertimento). 
Uno snippet di terminale che mostra i comandi per configurare globalmente le impostazioni di Git per la gestione dei link simbolici e l'impostazione predefinita dei rami.
  1. Uno script di hook post-checkout dannoso viene aggiunto alla directory hooks. Per garantire che lo script post-checkout possa essere eseguito sul dispositivo dell'utente, lo script bash che crea questo hook include il comando chmod +x fast/hooks/post-checkout
Uno script di terminale che visualizza un comando Python codificato in modo dannoso, incorporato in un hook post-checkout di Git.
  1. Nel repository principale viene creato un collegamento simbolico che punta alla directory .git.
Uno script da terminale che dimostra il processo di commit delle modifiche alle utilità di inclusione e a un file .git nel repository
Uno screenshot di un elenco di directory del repository con cartelle come src, libs e .gitmodules visualizzate in un'interfaccia Git.
Il repository principale vulnerabile
Schermata dell'interfaccia di un repository Git che mostra una cartella con un gancio post-checkout

La cartella /hooks con un hook post-checkout

Schermata che mostra i comandi da terminale per la clonazione di un repository Git e una sessione PowerShell con una connessione di rete stabilita
Quando l'utente clona questo repository dannoso, l'aggressore può compromettere il dispositivo della vittima. 

Bonifica

Per neutralizzare la minaccia, gli utenti possono disinstallare Git o applicare l'ultima patch di sicurezza. In alternativa, una soluzione come MetaDefender Endpoint può avvisare tempestivamente l'utente e visualizzare tutte le CVE note all'interno dell'ambiente attraverso la sua interfaccia intuitiva. MetaDefender Endpoint è in grado di rilevare e mitigare le CVE più recenti sfruttando le sue capacità con oltre 3 milioni di punti dati e oltre 30.000 CVE associate con informazioni sulla gravità. Implementando una delle due contromisure, la CVE sarà completamente contenuta, eliminando il rischio di un devastante attacco informatico.

Siete pronti a mettere MetaDefender Endpoint in prima linea nella vostra strategia di cybersecurity?


Rimanete aggiornati con OPSWAT!

Iscriviti oggi stesso per ricevere gli ultimi aggiornamenti sull'azienda, storie, informazioni sugli eventi e altro ancora.