
Sfruttamento di CVE-2018-18925, un'esecuzione di codice remoto contro lo strumento Git self-hosted: Gogs.
Sfruttamento di CVE-2018-18925, una Remote Code Execution contro lo strumento Git self-hosted: Gogs.
Gogs si basa sul framework Macaron. Il sistema usato per gestire la sessione è molto simile a quello che fa PHP. L'identificatore di sessione nel cookie è mappato a un file sul filesystem. Quando il server web riceve una richiesta con un identificatore di sessione (come cookie), cerca il file sul filesystem.
La vulnerabilità è un semplice directory traversal nel recupero del file usato per la sessione sul filesystem. Puoi, ad esempio, impostare il cookie i_like_gogits a ../../../../../../etc/passwd per ottenere un errore dal server.

Per sfruttare il bypass della sessione, avremo bisogno di un modo per caricare un file appositamente creato, poi useremo questo file come nostro id di sessione; possiamo creare il nostro file di id di sessione appositamente creato con https://github.com/RyouYoo/CVE-2018-18925/blob/main/main.go.
go run main.go
Quando si crea la copia del repository localmente, Gogs mette i file in /data/gogs/data/tmp/local-repo/[REPO_ID]/[FILENAME] (questo repository viene creato solo quando si usa la funzionalità "Upload file").

Dove [FILENAME] è il nome del file che carichi e [REPO_ID] è l'identificatore del repository che può essere trovato usando il link Fork:

Dove 5 è l'id del repository.
Per impostazione predefinita, le sessioni sono memorizzate in /data/gogs/data/sessions/. Pertanto, puoi usare il seguente percorso relativo per il tuo id di sessione: ../tmp/local-repo/[REPO_ID]/[FILENAME]. Usando questo percorso nel tuo cookie i_like_gogits, dovresti essere loggato come administrator.

Per ottenere RCE, puoi usare la funzionalità dei git hooks in un dato repository per eseguire uno script di shell.

In pre-receive inietta il tuo codice:

Poi effettua una push request, con git o con la funzione di creazione file, per far eseguire l'hook.