Directory .git esposta: la fuga di codice sorgente nascosta in bella vista
Quando un web server serve la directory .git insieme ai file dell'applicazione, un attaccante può scaricare abbastanza oggetti da ricostruire l'intero codice sorgente — compreso ogni secret mai committato, anche se rimosso in un commit successivo. AppSafe lo segnala come critico.
Che cos'è
Git conserva l'intero repository — ogni file, ogni commit, ogni punta di branch — in una directory nascosta .git nella root del progetto. Se quella directory finisce nella web root e il server non ne blocca l'accesso, i file /.git/config, /.git/HEAD e l'object store sotto /.git/objects/ sono scaricabili pubblicamente.
Ricostruire il sorgente completo da una directory .git esposta è semplice. Strumenti come git-dumper recuperano l'index e poi scaricano ogni oggetto referenziato, producendo un checkout perfettamente funzionante. Agli attaccanti non serve un accesso shell — basta un browser.
Perché è importante
Il tuo codice sorgente contiene quasi certamente informazioni che aumentano il rischio: API key hardcoded (spesso in commit più vecchi), schemi del database, percorsi di endpoint interni, logica di business e flussi di autenticazione. Anche se oggi nessun secret è committato, la cronologia è piena di materiale sfruttabile dagli attaccanti.
La cronologia di Git è permanente per design. Un secret committato anni fa e poi rimosso vive ancora nell'object store e viene scaricato insieme a tutto il resto. L'unico modo per neutralizzarlo è ruotarlo.
Come risolverlo
Nega tutte le richieste il cui percorso inizia con /.git/. Restituisci 404 invece di 403 per non confermare che la directory esiste.
location ~ /\.git {
deny all;
return 404;
}La soluzione più affidabile è non distribuire mai la directory .git nella document root. Struttura la build in modo che l'output compilato finisca in una directory public/ separata e distribuisci solo quella, non la root del progetto.
Dopo aver distribuito la correzione, apri https://yourdomain.com/.git/config in un browser. Deve restituire 404, non il contenuto della tua configurazione Git. AppSafe lo ricontrolla a ogni scansione.
Se la directory era accessibile, considera compromessi tutte le API key, password e token mai comparsi in un commit. Ruotali — rimuovere il commit non basta, perché l'oggetto esiste ancora nei pack file che un attaccante potrebbe aver già scaricato.
FAQ
Distribuisco su una piattaforma gestita (Vercel, Netlify, Fly.io) — sono a rischio?
Le piattaforme gestite che eseguono la build dal sorgente in genere distribuiscono solo l'output della build, quindi la directory .git non viene servita. Il rischio è maggiore con deploy su VPS, container Docker costruiti dalla root del progetto o export di siti statici in cui viene copiato l'intero working tree.
Cosa controlla esattamente AppSafe?
AppSafe richiede /.git/config e /.git/HEAD e verifica se il corpo della risposta sembra un vero file Git (corrispondenza con i pattern [core] o ref:). Una pagina 200 generica che non contiene dati Git non viene segnalata.
Posso semplicemente eliminare la directory .git sul server?
Sì, se ti servono solo i file distribuiti per far girare l'app. Ma assicurati che il processo di deploy non la ricopi al push successivo. Bloccarla a livello di web server è una difesa aggiuntiva per quando gli script di deploy non sono coerenti.
La tua app è interessata?
AppSafe controlla questo e decine di altri problemi in un'unica scansione gratuita.
Scansiona la mia app gratisDal blog
Finti crawler AI stanno dando la caccia ai tuoi file .env. Ecco come controllare i tuoi
Gli scanner di credenziali prendono in prestito i nomi dei crawler AI per aggirare le allowlist, e cercano un file in particolare: il tuo .env. Come verificare se il tuo è raggiungibile e come metterlo al sicuro.
La violazione di Railway: come ruotare i segreti della tua app senza downtime
Railway ha chiesto a tutti gli utenti di rigenerare le variabili d'ambiente dopo che gli attaccanti hanno preso di mira le API key dei provider AI e delle piattaforme. Come verificare la tua esposizione, ruotare tutto senza mandare giù l'app e far sì che la prossima violazione faccia meno male.
PHP2Shell è sotto attacco: come verificare se la tua app è esposta
Due bug critici in PHP stesso sono passati da "patch rilasciata" a "sfruttati in the wild" in pochi giorni. Come capire se qualcosa che ospiti usa una versione vulnerabile, e cosa fare oggi.
Guide correlate
File .env esposti: come i malintenzionati trovano i tuoi secret
Un solo .env raggiungibile può consegnare l'intero stack.
Le source map in produzione fanno trapelare il tuo codice sorgente
I file .map distribuiti consegnano il tuo codice sorgente originale.
Indici di directory aperti: quando il tuo file server elenca tutto
Un file server che elenca il proprio contenuto regala agli attaccanti un inventario gratuito.
Backup del database esposti: cosa succede quando /backup.sql è raggiungibile
Un dump .sql raggiungibile equivale a consegnare l'intero database.