
GitLab Arbitrary File Read Exploit
Este script fornece execução remota de código contra GitLab Community Edition (CE) e Enterprise Edition (EE). O CVE é uma leitura arbitrária de arquivos que permite extrair o secret_key_base do Rails baixando o arquivo secrets.yaml do GitLab. Isso, por sua vez, permite obter execução de código assinando seu próprio cookie experimentation_subject_id que o GitLab usa internamente para testes A/B. O payload embutido no cookie contém uma vulnerabilidade de desserialização que permite executar código na instância do GitLab.
A leitura arbitrária de arquivos existe no GitLab EE/CE 8.5 e posteriores. Isso foi corrigido nas versões 12.9.1, 12.8.8 e 12.7.8. No entanto, o RCE afeta apenas a versão 12.4.0 e superiores, quando o cookie vulnerável
experimentation_subject_idfoi introduzido.
Testado na versão 12.8.1
O módulo foi testado com Python 3.9 e requer as seguintes dependências:
Se você tiver o pipenv instalado, pode começar rapidamente executando pipenv install e pipenv shell para obter um shell no ambiente virtual do 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
Um Makefile está incluído para facilitar o desenvolvimento local ou testar o exploit. Ele depende de docker e docker-compose para iniciar rapidamente uma versão local do GitLab vulnerável a este CVE.
make up
Vai iniciar uma instância local do GitLab e uma instância Debian para facilitar o teste de um reverse shell. A instância do GitLab estará disponível em seu localhost na porta 5580. Ter esta imagem extra fornece um IP que é acessível de dentro da rede Docker. É possível tornar seu localhost acessível a partir do contêiner Docker, mas não vale o esforço na minha opinião, e definitivamente não quero promover o uso de --privileged
Conectar-se à instância Debian RHOST pode ser facilmente feito com:
make shell
Isso permite que você prepare seu reverse shell com nc -lnvp 9000.
Quando isso estiver pronto, você está pronto para testar o exploit. Você pode executar:
make exploit
Para executar o exploit, isso não fará o RCE, mas em vez disso imprimirá o segredo do Rails do GitLab.
make exploit-rce
Isto encadeará este CVE com o payload RCE mencionado acima para obter um reverse shell.
Feliz hacking!