
Exploit di lettura arbitraria di file in GitLab
Questo script fornisce l'esecuzione remota di codice contro GitLab Community Edition (CE) ed Enterprise Edition (EE). La CVE è una lettura arbitraria di file che consente di estrarre la secret_key_base di Rails scaricando il file secrets.yaml di GitLab. Questo a sua volta permette di ottenere l'esecuzione di codice firmando il proprio cookie experimentation_subject_id che GitLab utilizza internamente per i test A/B. Il payload incorporato nel cookie contiene una vulnerabilità di deserializzazione che consente di eseguire codice sull'istanza GitLab.
La lettura arbitraria di file esiste in GitLab EE/CE 8.5 e versioni successive. È stata corretta in 12.9.1, 12.8.8 e 12.7.8. Tuttavia, la RCE riguarda solo la versione 12.4.0 e successive, quando è stato introdotto il cookie vulnerabile
experimentation_subject_id.
Testato su 12.8.1
Il modulo è stato testato con Python 3.9 e richiede le seguenti dipendenze:
Se hai pipenv installato, puoi iniziare rapidamente eseguendo pipenv install e pipenv shell per ottenere una shell nell'ambiente virtuale pipenv.
$ ./cve_2020_10977.py --help
usage: cve_2020_10977.py [-h] --url URL -u USERNAME -p PASSWORD [--cmd CMD]
optional arguments:
-h, --help show this help message and exit
--url URL Target URL
-u USERNAME, --username USERNAME
Gitlab username
-p PASSWORD, --password PASSWORD
Gitlab password
--cmd CMD Command to execute
È incluso un Makefile per facilitare lo sviluppo locale o per testare l'exploit. Dipende da docker e docker-compose per avviare rapidamente una versione locale di GitLab vulnerabile a questa CVE.
make up
Avvierà un'istanza locale di GitLab e un'istanza Debian per facilitare il test di una reverse shell. L'istanza GitLab sarà disponibile dal tuo localhost sulla porta 5580. Avere questa immagine aggiuntiva ti fornisce un IP raggiungibile dall'interno della rete Docker. È possibile rendere il tuo localhost raggiungibile dal container Docker, ma secondo me non vale lo sforzo, e sicuramente non voglio promuovere l'uso di --privileged.
La connessione all'istanza Debian RHOST può essere effettuata facilmente con:
make shell
Questo ti consente di preparare la tua reverse shell con nc -lnvp 9000.
Quando hai fatto questo, sei pronto per testare l'exploit. Puoi eseguire:
make exploit
Per eseguire l'exploit, questo non effettuerà la RCE, ma stamperà invece il segreto Rails di GitLab.
make exploit-rce
Combinerà questa CVE con il payload RCE menzionato sopra per ottenere una reverse shell.
Buon hacking!