
GitLab Exploit zum Lesen beliebiger Dateien
Dieses Skript ermöglicht Remote-Codeausführung gegen GitLab Community Edition (CE) und Enterprise Edition (EE). Die CVE ist ein beliebiges Dateilesen, das es dir erlaubt, den Rails-secret_key_base zu extrahieren, indem du die GitLab-Datei secrets.yaml herunterlädst. Dies wiederum ermöglicht es dir, Codeausführung zu erlangen, indem du dein eigenes experimentation_subject_id-Cookie signierst, das GitLab intern für A/B-Tests verwendet. Die im Cookie eingebettete Payload enthält eine Deserialisierungsschwachstelle, die es erlaubt, Code auf der GitLab-Instanz auszuführen.
Das beliebige Dateilesen existiert in GitLab EE/CE 8.5 und später. Dies wurde in 12.9.1, 12.8.8 und 12.7.8 behoben. Allerdings betrifft die RCE nur Version 12.4.0 und höher, als das anfällige experimentation_subject_id-Cookie eingeführt wurde.
Getestet auf 12.8.1
Das Modul wurde mit Python 3.9 getestet und erfordert die folgenden Abhängigkeiten:
Wenn du pipenv installiert hast, kannst du schnell loslegen, indem du pipenv install und pipenv shell ausführst, um eine Shell in der virtuellen pipenv-Umgebung zu erhalten.
$ ./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
Ein Makefile ist enthalten, um die lokale Entwicklung oder das Testen des Exploits zu erleichtern. Es hängt von docker und docker-compose ab, um schnell eine lokale Version von GitLab zu starten, die anfällig für diese CVE ist.
make up
Startet eine lokale Instanz von GitLab und eine debian-Instanz, um das Testen einer Reverse Shell zu erleichtern. Die GitLab-Instanz ist von deinem Localhost auf Port 5580 aus erreichbar. Dieses zusätzliche Image gibt dir eine IP, die aus dem Docker-Netzwerk erreichbar ist. Es ist möglich, deinen Localhost aus dem Docker-Container erreichbar zu machen, aber das ist meiner Meinung nach den Aufwand nicht wert, und ich möchte definitiv nicht für die Verwendung von --privileged werben.
Das Verbinden mit der RHOST-debian-Instanz kann einfach mit folgendem Befehl erfolgen:
make shell
Dies ermöglicht es dir, deine Reverse Shell mit nc -lnvp 9000 vorzubereiten.
Wenn das erledigt ist, bist du bereit, den Exploit zu testen. Du kannst Folgendes ausführen:
make exploit
Um den Exploit auszuführen: Dieser führt die RCE nicht aus, sondern gibt stattdessen das GitLab-Rails-Geheimnis aus.
make exploit-rce
Verkettet diese CVE mit der oben genannten RCE-Payload, um eine Reverse Shell zu erhalten.
Viel Spaß beim Hacken!