
GitLab Exploit de Lectura Arbitraria de Archivos
Este script proporciona ejecución remota de código contra GitLab Community Edition (CE) y Enterprise Edition (EE). El CVE es una lectura arbitraria de archivos que te permite extraer el secret_key_base de Rails descargando el archivo secrets.yaml de GitLab. Esto, a su vez, te permite obtener ejecución de código firmando tu propia cookie experimentation_subject_id que GitLab usa internamente para pruebas A/B. El payload incrustado en la cookie contiene una vulnerabilidad de deserialización que permite ejecutar código en la instancia de GitLab.
La lectura arbitraria de archivos existe en GitLab EE/CE 8.5 y posteriores. Esto se corrigió en 12.9.1, 12.8.8 y 12.7.8. Sin embargo, el RCE solo afecta a la versión 12.4.0 y superiores cuando se introdujo la cookie vulnerable
experimentation_subject_id.
Probado en 12.8.1
El módulo fue probado con python 3.9 y requiere las siguientes dependencias:
Si tienes pipenv instalado, puedes comenzar rápidamente ejecutando pipenv install y pipenv shell para obtener una shell en el entorno virtual de 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
Se incluye un Makefile para facilitar el desarrollo local o probar el exploit. Depende de docker y docker-compose para levantar rápidamente una versión local de GitLab que sea vulnerable a este CVE.
make up
Levantará una instancia local de GitLab y una instancia de debian para facilitar la prueba de una reverse shell. La instancia de GitLab estará disponible desde tu localhost en el puerto 5580. Tener esta imagen extra te da una IP que es accesible desde dentro de la red de docker. Es posible hacer que tu localhost sea accesible desde el contenedor de docker, pero no vale la pena el esfuerzo en mi opinión, y definitivamente no quiero promocionar el uso de --privileged
Conectarse a la instancia RHOST de debian se puede hacer fácilmente con:
make shell
Esto te permite preparar tu reverse shell con nc -lnvp 9000.
Cuando esto esté listo, estarás preparado para probar el exploit. Puedes ejecutar:
make exploit
Para ejecutar el exploit, esto no hará el RCE, sino que imprimirá el secreto de rails de GitLab.
make exploit-rce
Encadenará este CVE con el payload RCE mencionado anteriormente para obtener una reverse shell.
¡Feliz hacking!