Ho lasciato la mia directory .git leggibile dal web server, quali rischi ho?


7

In una delle mie applicazioni Web, ho lasciato accidentalmente la directory .git leggibile dal server Web nelle ultime settimane. L'indice è stato disabilitato. La visita dell'URL website.com/.git comporterebbe un errore 404 indistinguibile da qualsiasi altro errore 404, ma ad esempio la navigazione su website.com/.git/config scaricherà il file.

Che tipo di rischi ci sono con le mie applicazioni? È possibile che siano esposte abbastanza informazioni che qualcuno avrebbe potuto scaricare l'intero codice sorgente dell'applicazione?


Hai provato a git clone http://website.com/.git? Questo è il rischio maggiore (essere in grado di clonare l'intero repo).
VonC,

Dovrò provarlo sul mio server di sviluppo ... Mi sono appena reso conto della vulnerabilità mentre sogno ad occhi aperti e ho risolto il bug al più presto.
Thomas Hunter,

Risposte:


4

Sì, è possibile scaricare l'intero contenuto del repository (compresa la cronologia) - un semplice git clonelo farebbe. Tuttavia, questo presuppone che qualcuno sapesse dell'esistenza di quella .gitdirectory ... è più probabile che nessuno l'abbia nemmeno notato. Puoi sempre controllare i log del tuo server web per essere sicuro.


1
tranne se ci sono persone "auto-test" da queste parti che per curl $URL/.git/configtutto il giorno per ogni urlo che vedono ... :)
Akira,

Con la cartella .git nella directory principale, solo qualcuno avrebbe dovuto eseguire git clone domainname.com ? E avrebbe funzionato con l'elenco delle directory disabilitato?
Thomas Hunter,

@Thomas: Git non utilizza elenchi di directory, poiché il loro formato varia notevolmente tra i server Web. Tutte le informazioni richieste sono in refse packed-refs.
gravità

Grazie per il consiglio. Ho controllato i miei log di accesso a lighttpd e non ho visto alcuna richiesta nella directory git (a parte il mio controllo nel panico oggi).
Thomas Hunter,

1
@Willem: Sono curioso di sapere dove nel codice sorgente esegue l'analisi dell'elenco di directory e come gestisce la dozzina di diversi formati.
Grawity

2

Un semplice git clonenella radice del documento non è del tutto esatto. La clonazione di un repository GIT esposto non è possibile con server " stupidi ", come un'esposizione accidentale di .git tramite HTTP, a meno che non git update-server-infovenga eseguita sul server. Mentre alcuni dei metadati sono disponibili, .git/objectsnon è sempre possibile ottenere il contenuto della directory (ovvero le cose succose). È possibile recuperare oggetti che non sono impacchettati . Non dovrebbe essere il caso di una copia / repository funzionante su un server di produzione.

È una storia diversa per una macchina di sviluppo con modifiche impegnate che non vengono inviate a un telecomando. In questo caso, il garbage collector di solito non viene chiamato, a meno che non si invochi git gc, quindi i file non fanno ancora parte dei pacchetti. Puoi recuperare via HTTP i file che sono stati salvati dall'ultima pressione.

update-server-info fondamentalmente crea una mappa dei ref (.git / info / refs) e dei pacchetti di file (.git / oggetti / info / pacchetti). Mentre .git / pack-refs può essere usato per sostituire il primo, ottenere i pacchetti non è possibile senza avere l'indice di directory abilitato o effettivamente SHA-1 forzato brutalmente (che è una cattiva idea dall'inizio).


1
Vedi anche gli script PoC per recuperare i riferimenti .git / index: github.com/evilpacket/DVCS-Pillage e k0st.wordpress.com/2012/10/23/… e github.com/kost/dvcs-ripper
Willem
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.