Panoramica di CVE-2025-48384
CVE-2025-48384 è una vulnerabilità critica in Git, il sistema di controllo versione distribuito ampiamente utilizzato. Coinvolge una gestione impropria dei caratteri di ritorno a capo (CR) nei valori di configurazione, che può portare a problemi di path traversal durante il checkout dei sottomoduli. Questa falla consente una potenziale esecuzione arbitraria di codice in condizioni specifiche. La vulnerabilità è stata divulgata pubblicamente l'8 luglio 2025 e modificata l'ultima volta il 26 agosto 2025. È stata aggiunta al catalogo Known Exploited Vulnerabilities (KEV) della U.S. Cybersecurity and Infrastructure Security Agency (CISA) il 25 agosto 2025, indicando uno sfruttamento attivo in natura, con una scadenza di remediation fissata al 15 settembre 2025.
Descrizione della vulnerabilità
Il problema deriva dal modo in cui Git elabora i valori di configurazione:
- Durante la lettura di un valore di configurazione, Git rimuove i caratteri finali di ritorno a capo e avanzamento riga (CRLF).
- Tuttavia, durante la scrittura di una voce di configurazione, i valori che contengono un CR finale non vengono correttamente racchiusi tra virgolette, causando la perdita del CR nelle letture successive.
Questa discrepanza può portare al checkout di un sottomodulo in una posizione errata se il suo percorso include un CR finale. Se un attaccante configura un symlink che punta questo percorso alterato alla directory hooks del sottomodulo — e il sottomodulo contiene un hook post-checkout eseguibile — lo script hook potrebbe essere eseguito involontariamente dopo il checkout, determinando l'esecuzione arbitraria di codice.
Dettagli tecnici
La vulnerabilità sfrutta un conflitto di interpretazione nell'analisi della configurazione di Git:
- Mancata corrispondenza nella gestione della configurazione: I CR finali vengono rimossi in lettura ma non preservati in scrittura senza virgolette.
- Alterazione del percorso di checkout del sottomodulo: Un percorso di sottomodulo come "submodule/path" potrebbe essere interpretato come "submodule/path" dopo la perdita del CR.
- Sfruttamento tramite symlink: Un attaccante potrebbe creare un symlink dal percorso alterato alla directory hooks (ad esempio,
.git/hooks/post-checkout), consentendo l'esecuzione di hook malevoli durante operazioni come git submodule update o git clone --recurse-submodules.
Questa vulnerabilità è classificata sotto:
- CWE-436: Interpretation Conflict (mancata corrispondenza nel modo in cui i dati vengono elaborati).
- CWE-59: Improper Link Resolution Before File Access ('Link Following'), a causa dell'abuso di symlink.
Il vettore d'attacco è basato sulla rete (AV:N), con complessità alta (AC:H), privilegi richiesti bassi (PR:L), interazione dell'utente richiesta (UI:R) e ambito modificato (S:C), con impatto elevato su riservatezza, integrità e disponibilità (C:H/I:H/A:H).
Versioni interessate
La vulnerabilità colpisce le versioni di Git precedenti alle seguenti release corrette:
- Tutte le versioni precedenti a v2.43.7
- v2.44.0 fino a v2.44.3
- v2.45.0 fino a v2.45.3
- v2.46.0 fino a v2.46.3
- v2.47.0 fino a v2.47.2
- v2.48.0 fino a v2.48.1
- v2.49.0
- v2.50.0
Impatta Git su varie piattaforme, tra cui Linux, macOS e Windows, ma è particolarmente rilevante negli ambienti di sviluppo, nelle pipeline CI/CD (ad esempio, GitHub Actions, GitLab CI) e ovunque i sottomoduli Git vengano clonati da repository non fidati.
Impatto e scenari di sfruttamento
- Impatto: Alto rischio di esecuzione remota di codice (RCE), esfiltrazione di dati o compromissione del sistema. Nei flussi di lavoro degli sviluppatori, ciò potrebbe portare ad attacchi alla supply chain se vengono clonati repository malevoli.
- Requisiti per lo sfruttamento:
- Un percorso di sottomodulo appositamente predisposto con un CR finale.
- Un symlink che reindirizza alla directory hooks.
- Un hook eseguibile (ad esempio, post-checkout) nel sottomodulo.
- Interazione dell'utente, come la clonazione di un repository con
--recurse-submodules.
- Sfruttamento nel mondo reale: Poiché è nel catalogo KEV della CISA, le agenzie federali e le infrastrutture critiche devono effettuare la remediation entro il 15 settembre 2025. È probabile che venga sfruttato in attacchi mirati contro sviluppatori o progetti open source. Nessun proof-of-concept (PoC) pubblico è menzionato nell'advisory, ma l'elevata complessità suggerisce che richieda una configurazione specifica.
I dettagli CVSS non sono ancora completamente valutati in NVD (CVSS 4.0 in sospeso), ma sulla base delle metriche CVSS 3.1 dell'advisory, si allinea con una gravità critica (CVSS stimato 8.8, come precedentemente indicato in elenchi CVE più ampi).
Mitigazione e raccomandazioni
- Versioni corrette: Aggiornare Git a una delle seguenti versioni o successive:
- v2.43.7
- v2.44.4
- v2.45.4
- v2.46.4
- v2.47.3
- v2.48.2
- v2.49.1
- v2.50.1
- Soluzioni alternative:
- Evitare la clonazione ricorsiva dei sottomoduli (
--recurse-submodules) da repository non fidati.
- Disabilitare o limitare l'uso dei symlink nelle configurazioni Git, se possibile.
- Utilizzare Git in ambienti con permessi limitati (ad esempio, configurazioni containerizzate).
- Consigli aggiuntivi: Per le organizzazioni soggette alle direttive CISA, applicare le patch secondo le istruzioni del fornitore o interrompere l'uso se non è possibile applicare patch. Scansionare regolarmente i repository per individuare sottomoduli sospetti e monitorare esecuzioni di hook inattese.
Crediti e riferimenti
- Crediti: L'advisory attribuisce il merito a ttaylorr per aver segnalato e pubblicato i dettagli.
- Riferimenti principali:
Questa vulnerabilità evidenzia l'importanza di una gestione sicura nei sistemi di controllo versione, soprattutto con i sottomoduli. Se si utilizza Git in un ambiente di produzione o sviluppo, dare priorità all'aggiornamento immediato, dato lo stato di sfruttamento attivo.
PoC rapido
- Prerequisiti: Docker installato; questo repository clonato localmente. Nessuna connessione di rete necessaria durante il PoC.
- Git vulnerabile: usa Git 2.40.4 (comportamento di path-confusion verificato).
- URL sottomodulo:
.gitmodules punta a https://github.com/s41r4j/CVE-2025-48384-submodule.git, ma il PoC lo riscrive su una copia locale per i test offline.
Esegui:
bash scripts/poc.sh
Cosa fa:
- Crea un'immagine container con Git 2.40.4.
- Crea un flag in
$HOME/flag.txt all'interno del container.
- Copia
malicious-submodule-repo/ in /tmp nel container.
- Clona questo repository in modalità ricorsiva con una riscrittura dell'URL verso quella copia locale del sottomodulo.
- Forza il checkout per attivare l'hook
post-checkout se la path-confusion riesce.
- Stampa
/tmp/flag.txt creato dall'hook.
Note:
- Il percorso del sottomodulo malevolo è un letterale
sub^M (CR) memorizzato come gitlink; il percorso ripulito sub si risolve tramite un symlink verso .git/hooks, così il post-checkout tracciato dal sottomodulo diventa un hook reale e viene eseguito.
- Per riallineare il gitlink all'ultimo commit del tuo sottomodulo remoto dopo averlo pubblicato su GitHub, esegui:
bash scripts/update-gitlink.sh.