CVE-2026-85706 — Scanner IOC e toolkit di rilevamento per il path traversal di GitLab. Rileva e ricerca lo sfruttamento della vulnerabilità critica di path traversal non autenticata in GitLab CE/EE con scansione IOC, regole di rilevamento Sigma, Suricata/Snort e SIEM.
Path Traversal Non Autenticato nell'API Repository Commits di GitLab CE/EE (CVSS 3.1: 10.0, Critico) Stato: Attivamente sfruttato in the wild · Inserito nel CISA KEV (2026-09-11, scadenza 2026-09-14) · Corretto da GitLab il 2026-09-10
Un toolkit gratuito e open-source per la risposta agli incidenti e il threat hunting per CVE-2026-85706 — una vulnerabilità critica di path traversal non autenticato in GitLab Community Edition (CE) ed Enterprise Edition (EE) che interessa l'API dei commit dei repository. Questo repository fornisce a team di sicurezza, analisti SOC, detection engineer e amministratori GitLab uno scanner IOC (Indicators of Compromise) pronto all'uso, regole di rilevamento Sigma / Suricata / Snort, query di hunting per Splunk / Elastic / OpenSearch e una guida di remediation passo-passo — tutto ciò che serve per rilevare tentativi di sfruttamento, confermare lo stato delle patch e rispondere rapidamente a questa vulnerabilità zero-day / n-day di GitLab.
🔎 Cerchi il percorso più rapido per capire "sono interessato?" Vai a Quick Start.
🚨 Cerchi a quale versione aggiornare? Vai a Versioni Corrette e Patch.
| CVE ID | CVE-2026-85706 |
| Vendor / Prodotto | GitLab Community Edition (CE) & Enterprise Edition (EE), self-managed |
| Classe di vulnerabilità | Path Traversal (CWE-35), parte della più ampia famiglia Improper Limitation of a Pathname (CWE-22) |
| Componente interessato | Repository Commits API (/api/v4/projects/:id/repository/commits...) |
| Causa principale | Confinamento improprio del percorso combinato con mancata applicazione dell'autenticazione nell'endpoint API interessato |
| Versioni interessate | GitLab CE/EE 18.7 fino a (esclusa) 19.1.8, 19.2 fino a (esclusa) 19.2.6, 19.3 fino a (esclusa) 19.3.2 |
| Autenticazione richiesta | Nessuna — sfruttamento non autenticato, pre-auth |
| Vettore di attacco | Rete, singola richiesta HTTP |
| Punteggio CVSS 3.1 | 10.0 (Critico) |
| Impatto | Lettura arbitraria di file sul server GitLab — file di configurazione, segreti, token, codice sorgente, potenzialmente chiavi SSH e credenziali del database |
| Segnalato da | Ricercatore di sicurezza esterno (handle HackerOne "s3ntago"), tramite il programma bug bounty HackerOne di GitLab |
| Divulgato / Corretto | 10 settembre 2026 — parte di una release di sicurezza critica di GitLab che corregge 17 vulnerabilità in totale (vedi Vulnerabilità Correlate) |
| CISA KEV | Aggiunto l'11 settembre 2026; remediation per le agenzie federali civili entro il 14 settembre 2026; CISA ha segnalato questa CVE come soggetta a triage forense ai sensi della Binding Operational Directive (BOD) 26-04, riflettendo la possibilità che i sistemi vulnerabili possano essere già stati compromessi prima della patch |
| Stato di sfruttamento | Confermata attività di scansione / probing osservata in the wild — watchTowr ha segnalato i primi tentativi di sfruttamento in the wild circa dopo la divulgazione pubblica, con sfruttamento di massa valutato come probabile a seguire |
Un attaccante non autenticato può inviare una singola richiesta HTTP craftata all'API
dei commit dei repository di GitLab, fornendo un parametro file.path (o
file_path) contenente sequenze di directory traversal
(../, varianti URL-encoded, ecc.), e ottenere dal server il
contenuto di file arbitrari al di fuori della directory del repository prevista —
inclusi il file dei segreti di GitLab stesso, la configurazione del database, chiavi private
SSH e altri dati sensibili lato server. Poiché non sono richieste credenziali
e la richiesta è banale da costruire, GitLab e ricercatori terzi
valutano questa vulnerabilità come severità massima (CVSS 10.0) e CISA ha
confermato sfruttamento attivo in the wild.
gitlab-secrets.json, database.yml o token dei runner CI/CD può pivotare
verso un accesso molto più profondo di quanto suggerisca la sola lettura di file iniziale.GitLab ha corretto CVE-2026-85706 nelle seguenti release il 2026-09-10:
Qualsiasi istanza GitLab CE/EE self-managed su un livello di patch precedente all'interno
di questi branch — o su un branch major/minor più vecchio — dovrebbe essere
considerata vulnerabile e aggiornata immediatamente. L'offerta SaaS di GitLab.com
è corretta direttamente da GitLab e non richiede azione da parte dei clienti. Vedi docs/remediation.md per una guida completa
passo-passo all'aggiornamento e alla risposta agli incidenti.
Nota sull'aggiornamento: su istanze GitLab a nodo singolo, l'aggiornamento a queste versioni comporta downtime mentre le migrazioni del database vengono completate prima del riavvio di GitLab. Le istanze multi-nodo possono applicare la patch senza downtime seguendo la procedura documentata da GitLab per l'aggiornamento zero-downtime. La versione 19.3.2 include anche migrazioni post-deploy che vengono eseguite dopo il completamento dell'aggiornamento — tienine conto nella tua finestra di manutenzione.
CVE-2026-85706 è stato il problema principale in una release di sicurezza critica di GitLab che copre 17 vulnerabilità in totale. Altri due problemi nella stessa release meritano di essere monitorati insieme ad esso, poiché interessano una superficie di attacco simile e il rischio di esposizione di credenziali/segreti:
| Vulnerabilità | Severità | Note |
|---|---|---|
| CVE-2026-85706 — Path Traversal nell'API dei commit dei repository | Critico (CVSS 10.0) | Lettura arbitraria di file non autenticata — il focus di questo repository |
| Deserializzazione Insicura nel serializer delle sottoscrizioni GraphQL (GitLab EE) | Critico | Interessa solo GitLab EE; difetti di deserializzazione di questo tipo possono potenzialmente portare a esecuzione di codice remoto a seconda della sfruttabilità |
| Buffer Overflow nel wrapper di conversione Unicode (GitLab EE) | Alto | |
| Il test della Scheduled Pipeline Execution Policy consente agli Developer di accedere a variabili CI/CD protette | Alto | Rischio di esposizione di credenziali/segreti rilevante per le stesse azioni di risposta "proteggi i tuoi segreti CI/CD" nella guida di remediation di questo repo |
| Cross-Site Scripting nel renderer di tabelle JSON Markdown (CE/EE) | Alto | |
| Autorizzazione Errata nel matcher dello scope delle variabili d'ambiente CI/CD (CE/EE) | Alto | |
| Denial of Service nel limitatore di complessità GraphQL (CE/EE) | Alto | |
| Autenticazione Impropria nell'applicazione delle restrizioni di accesso SAML SSO (CE/EE) | Medio | |
| Credenziali Insufficientemente Protette negli emitter senddata di Workhorse (CE/EE) | Medio | |
| Diversi ulteriori problemi di bypass dell'autorizzazione e controllo degli accessi nelle regole di approvazione degli ambienti protetti e nei framework di compliance (EE) | Medio |
Conclusione pratica: se stai applicando la patch per CVE-2026-85706, stai già includendo le correzioni per tutti i problemi sopra elencati nella stessa release 19.3.2 / 19.2.6 / 19.1.8 — non c'è motivo di applicare la patch solo per CVE-2026-85706 e rimandare il resto. Trattala come un'unica release da applicare integralmente, non come un menu di correzioni pianificabili indipendentemente.
gitlab-cve-2026-85706-ioc/ ├── README.md ← you are here ├── LICENSE ← MIT ├── CHANGELOG.md ├── CONTRIBUTING.md ├── SECURITY.md ├── scanner/ │ ├── gitlab_cve_2026_85706_ioc_scanner.py ← main IOC scanner (stdlib-only Python 3) │ └── requirements.txt ← documents "no dependencies needed" ├── detection/ │ ├── sigma_rule_gitlab_cve_2026_85706.yml ← Sigma rule (SIEM-agnostic) │ ├── network_ids_cve_2026_85706.rules ← Suricata/Snort signatures │ └── siem_hunting_queries.md ← Splunk / Elastic / OpenSearch / grep queries ├── docs/ │ ├── ioc_list.md ← full IOC reference (network, host, post-exploitation) │ ├── remediation.md ← patch & incident-response playbook │ └── timeline.md ← public disclosure & exploitation timeline ├── tests/ │ ├── test_scanner.py ← unit tests (stdlib unittest) │ └── fixtures/sample_production_json.log ← sanitized sample log for testing └── .github/workflows/ci.yml ← GitHub Actions: lint, test, smoke-test on every push
---
## 🚀 Avvio rapido
### 1. Scansiona i tuoi log GitLab alla ricerca di IOC
Lo scanner è **pura libreria standard Python 3** — non è richiesto
`pip install`, quindi puoi copiare solo quel singolo file su un host GitLab
bloccato ed eseguirlo immediatamente.```bash
git clone https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc.git
cd gitlab-cve-2026-85706-ioc
python3 scanner/gitlab_cve_2026_85706_ioc_scanner.py \
--production-log /var/log/gitlab/gitlab-rails/production_json.log \
--api-log /var/log/gitlab/gitlab-rails/api_json.log \
--nginx-log /var/log/gitlab/nginx/gitlab_access.log \
--format json --out report.json
Il codice di uscita 1 significa che è stato trovato almeno un potenziale IOC — rivedi
report.json immediatamente. Il codice di uscita 0 significa che non sono state trovate corrispondenze nei
log che hai fornito (vedi Limitazioni — questa
non è una garanzia di compromissione).
Puoi anche puntarlo a qualsiasi log arbitrario/ruotato con --generic-log
(flag ripetibile), e scegliere --format text|json|csv per il report.
python3 scanner/gitlab_cve_2026_85706_ioc_scanner.py --check-version 19.2.3
python3 scanner/gitlab_cve_2026_85706_ioc_scanner.py --check-version 19.2.6
### 3. Distribuisci le regole di rilevamento al tuo SIEM / IDS
- Importa [`detection/sigma_rule_gitlab_cve_2026_85706.yml`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/sigma_rule_gitlab_cve_2026_85706.yml)
nella tua pipeline compatibile con Sigma (Splunk tramite `sigma-cli`, Elastic
Detection Rules, Microsoft Sentinel, Chronicle, ecc.).
- Distribuisci [`detection/network_ids_cve_2026_85706.rules`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/network_ids_cve_2026_85706.rules)
su Suricata o Snort — **inizia in modalità solo avviso** e ottimizza SID/soglie
per il tuo ambiente prima di abilitare il blocco.
- Copia/incolla le query già pronte da
[`detection/siem_hunting_queries.md`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/siem_hunting_queries.md)
per Splunk (SPL), Elastic/Kibana (KQL + DSL), OpenSearch (PPL) e il triage
semplice con `ripgrep`/`grep`.
---
## Come funziona lo scanner
`gitlab_cve_2026_85706_ioc_scanner.py` analizza i log JSON strutturati di GitLab
(`production_json.log`, `api_json.log`) nonché i log di accesso generici in
formato combined dei reverse proxy, e segnala le richieste che corrispondono al
pattern di sfruttamento documentato pubblicamente per CVE-2026-85706:
1. **Corrispondenza endpoint** — il percorso della richiesta colpisce la famiglia
di endpoint vulnerabili:
`/api/v4/projects/:id/repository/commits` e le relative sotto-risorse.
2. **Corrispondenza parametro** — è presente un parametro in stile
`file.path` / `file_path` / `path` nella query string, nel corpo del form o
nel corpo JSON.
3. **Corrispondenza payload** — il valore di quel parametro contiene una sequenza
di path traversal (`../`, URL-encoded, double-encoded, overlong-UTF-8 e
varianti di segmento di percorso con punto e virgola) **oppure** fa riferimento
a un file target sensibile noto (`/etc/passwd`, `gitlab-secrets.json`,
`secrets.yml`, `database.yml`, chiavi private SSH, ecc.).
4. **Contesto di autenticazione** — lo scanner verifica la presenza di
`PRIVATE-TOKEN`, `Authorization` o di un campo `user_id` non nullo per
determinare se la richiesta era autenticata, in linea con la condizione di
sfruttamento **non autenticato / pre-auth** centrale per questa CVE.
5. **Euristica sulla frequenza** — indipendentemente dalla corrispondenza del
payload, gli IP di origine che effettuano un volume insolitamente elevato di
richieste all'API commits in una breve finestra vengono segnalati come
probabile ricognizione automatizzata.
I risultati sono classificati **CRITICAL / HIGH / MEDIUM** ed esportati come
JSON strutturato, CSV o testo leggibile per il triage.
## Output di esempio```text
CVE-2026-85706 IOC Scan Report — 2 finding(s)
============================================================
[CRITICAL] 2026-09-11T02:14:33.120Z src=203.0.113.9 method=POST auth=False
path: /api/v4/projects/42/repository/commits/HEAD
matched: ../../../../etc/passwd
reason: path-traversal sequence in file path parameter; known sensitive/system file referenced; unauthenticated request (matches pre-auth exploitation condition)
log: production_json.log
[CRITICAL] 2026-09-11T02:16:45.501Z src=203.0.113.9 method=POST auth=False
path: /api/v4/projects/17/repository/commits/abc123
matched: ..%2f..%2f..%2fopt%2fgitlab%2fembedded%2fservice%2fgitlab-rails%2fconfig%2fsecrets.yml
reason: path-traversal sequence in file path parameter; unauthenticated request (matches pre-auth exploitation condition)
log: production_json.log
(Generato dal fixture campione sanificato in tests/fixtures/.)
I dettagli completi, inclusi gli indicatori basati sull'host e di post-sfruttamento, sono in
docs/ioc_list.md. Indicatori di rete principali:
/api/v4/projects/<id>/repository/commits*file.path / file_path contenente ../, %2e%2e%2f,
..%2f, %252e%252e%252f, o sequenze di traversal simili/etc/passwd, /etc/shadow, gitlab-secrets.json,
secrets.yml, database.yml, id_rsa, .env, o
/opt/gitlab/embedded/service/gitlab-rails/config/secrets.ymlPRIVATE-TOKEN / Authorization valido
o una sessione autenticata| File | Piattaforma | Scopo |
|---|---|---|
detection/sigma_rule_gitlab_cve_2026_85706.yml | Sigma (agnostico rispetto al SIEM) | Regola di rilevamento basata sui log convertibile in Splunk, Elastic, Sentinel, Chronicle, QRadar, ecc. |
detection/network_ids_cve_2026_85706.rules | Suricata / Snort | Firme a livello di rete per sensori IDS/IPS inline |
detection/siem_hunting_queries.md | Splunk, Elastic/Kibana, OpenSearch, grep/ripgrep | Query di hunting pronte da copiare e incollare per indagini manuali/ad-hoc |
Consulta il playbook completo in docs/remediation.md.
Riepilogo:
GitLab.com (SaaS) è interessato? Nessuna azione da parte dei clienti è richiesta per GitLab.com — GitLab applica le patch alla sua piattaforma SaaS direttamente. Questo tooling è destinato alle istanze GitLab CE/EE self-managed.
Serve l'autenticazione per essere sfruttati? No — è proprio questo che rende questa CVE CVSS 10.0. Si tratta di un path traversal non autenticato contro un singolo endpoint API.
Esiste un exploit / PoC pubblico disponibile?
Al momento della stesura, non è stato identificato alcun proof-of-concept pubblico confermato,
sebbene siano state osservate attività di scansione/probing attive. Questo
repository non contiene né collega codice di exploit — vedi
CONTRIBUTING.md per il motivo, e consulta sempre
l'advisory ufficiale GitLab CVE-2026-85706
per le ultime indicazioni del fornitore.
Lo scanner mi dirà con certezza se sono stato compromesso? Nessuno strumento può garantirlo. Esegue un rilevamento best-effort basato sui log che fornisci. Vedi Limitazioni e disclaimer.
Quale conservazione dei log mi serve?
La rotazione predefinita dei log di GitLab potrebbe non conservare i log fino alla data
di divulgazione (2026-09-10). Estrai dal tuo SIEM/archivio log centralizzato se i tuoi
log sull'host sono già stati ruotati — vedi la nota in
detection/siem_hunting_queries.md.
Questo repository funziona per deployment GitLab Helm/Kubernetes o Docker?
Sì, purché tu possa esportare production_json.log / api_json.log (o
i log di accesso del tuo ingress/reverse-proxy) in un file che lo scanner possa leggere;
usa --generic-log per qualsiasi cosa al di fuori dei tre tipi di log denominati.
Quali versioni esatte sono interessate? GitLab CE/EE 18.7 fino a (esclusa) 19.1.8, 19.2 fino a (esclusa) 19.2.6, e 19.3 fino a (esclusa) 19.3.2. Qualsiasi versione precedente al branch 18.7 è anche non supportata/fine vita e dovrebbe essere considerata vulnerabile e aggiornata a prescindere.
È stato effettivamente sfruttato, o solo "a rischio"? Sfruttamento confermato. watchTowr Labs ha osservato i primi tentativi di sfruttamento in-the-wild circa 24 ore dopo la divulgazione pubblica di GitLab, e la CISA ha successivamente aggiunto CVE-2026-85706 al suo catalogo KEV proprio perché ha confermato lo sfruttamento nel mondo reale — non è un risultato teorico o di "sola divulgazione responsabile".
Cosa significa per me la designazione di "forensic triage" della CISA BOD 26-04?
La CISA ha segnalato questa CVE come richiedente forensic triage ai sensi della Binding
Operational Directive 26-04, il che significa che per i sistemi federali si presume
che un'istanza vulnerabile esposta a Internet potrebbe essere già stata
acceduta prima di essere sottoposta a patch — non solo teoricamente esposta. La
stessa assunzione è un default ragionevole per qualsiasi organizzazione: considera
l'applicazione della patch come il primo passo di un processo di risposta agli incidenti, non la sua conclusione.
Vedi docs/remediation.md per la checklist completa assume-breach
(rotazione dei segreti, revisione delle credenziali, audit CI/CD).
È stato corretto qualcos'altro nella stessa release di GitLab? Sì — la release del 10 settembre 2026 ha corretto 17 problemi di sicurezza in totale, incluso un secondo problema di severità Critica (deserializzazione non sicura nel serializzatore delle sottoscrizioni GraphQL, GitLab EE) e un buffer overflow di severità Alta in un wrapper di conversione Unicode. Vedi Vulnerabilità correlate corrette nella stessa release. Poiché tutte queste sono incluse nelle stesse versioni 19.3.2 / 19.2.6 / 19.1.8, l'applicazione della patch per CVE-2026-85706 le risolve già tutte.
docs/ioc_list.md.CONTRIBUTING.md per la policy di scope del progetto.Contributi di nuovi IOC, port di regole di rilevamento, segnalazioni di falsi positivi,
e miglioramenti allo scanner sono benvenuti — vedi
CONTRIBUTING.md per le linee guida (inclusa la
policy no-exploit-code e i requisiti di sanificazione dei dati).
I dettagli completi delle citazioni e ulteriore contesto sono in
docs/timeline.md.
Rilasciato sotto la MIT License. Il contenuto di rilevamento (Sigma, regole Suricata/Snort, query SIEM) è fornito così com'è per uso difensivo; adatta le soglie e la gestione dei falsi positivi al tuo ambiente prima di farvi affidamento in produzione.
CVE-2026-85706 GitLab CVE-2026-85706 GitLab path traversal GitLab vulnerability GitLab IOC GitLab indicators of compromise GitLab security advisory GitLab exploit detection GitLab CVSS 10.0 GitLab CISA KEV GitLab repository commits API vulnerability GitLab unauthenticated file read GitLab arbitrary file read path traversal CVE 2026 GitLab patch 19.3.2 GitLab patch 19.2.6 GitLab patch 19.1.8
GitLab secrets exposure GitLab CI/CD credential theft Sigma rule GitLab Suricata rule GitLab Snort rule GitLab Splunk GitLab hunting
GitLab incident response GitLab threat hunting self-managed GitLab security
| PoC pubblico | Non confermato pubblicamente disponibile al momento della stesura |
| GitLab.com / Dedicated | GitLab.com (SaaS) era già corretto al momento della divulgazione; i clienti GitLab Dedicated non hanno dovuto intraprendere alcuna azione. Solo le istanze CE/EE self-managed richiedono intervento |