CVE-2026-85706 — GitLab Path-Traversal-IOC-Scanner & Detection-Toolkit. Erkennen und Aufspüren der Ausnutzung der kritischen nicht authentifizierten GitLab CE/EE Path-Traversal-Schwachstelle mit IOC-Scanning, Sigma-, Suricata/Snort- und SIEM-Erkennungsregeln.
GitLab CE/EE Repository Commits API Unauthenticated Path Traversal (CVSS 3.1: 10.0, Kritisch) Status: Aktiv in freier Wildbahn ausgenutzt · Gelistet in CISA KEV (2026-09-11, fällig 2026-09-14) · Gepatcht durch GitLab 2026-09-10
Ein kostenloses, quelloffenes Incident-Response- und Threat-Hunting-Toolkit für — eine kritische, unauthentifizierte Path-Traversal- Schwachstelle in GitLab Community Edition (CE) und Enterprise Edition (EE), die die betrifft. Dieses Repository bietet Sicherheitsteams, SOC-Analysten, Detection-Engineers und GitLab-Administratoren einen sofort einsatzbereiten , , und einen — alles, was Sie brauchen, um Ausnutzungsversuche zu erkennen, den Patch-Status zu bestätigen und auf diese GitLab-Zero-Day- / N-Day-Schwachstelle schnell zu reagieren.
🔎 Sie suchen den schnellsten Weg zu „Bin ich betroffen?" Springen Sie zu Quick Start.
🚨 Sie suchen, auf welche Version Sie patchen müssen? Springen Sie zu Fixed Versions & Patch.
| CVE ID | CVE-2026-85706 |
| Vendor / Product | GitLab Community Edition (CE) & Enterprise Edition (EE), self-managed |
| Vulnerability class | Path Traversal (CWE-35), part of the broader Improper Limitation of a Pathname family (CWE-22) |
| Affected component | Repository Commits API (/api/v4/projects/:id/repository/commits...) |
| Root cause | Improper path confinement combined with missing authentication enforcement in the affected API endpoint |
| Affected versions | GitLab CE/EE 18.7 up to (not including) 19.1.8, 19.2 up to (not including) 19.2.6, 19.3 up to (not including) 19.3.2 |
| Authentication required | None — unauthenticated, pre-auth exploitation |
| Attack vector | Network, single HTTP request |
| CVSS 3.1 score | 10.0 (Critical) |
| Impact | Arbitrary file read on the GitLab server — configuration files, secrets, tokens, source code, potentially SSH keys and database credentials |
| Reported by | External security researcher (HackerOne handle "s3ntago"), via GitLab's HackerOne bug bounty program |
| Disclosed / Patched | September 10, 2026 — part of a critical GitLab security release fixing 17 vulnerabilities in total (see Related Vulnerabilities) |
| CISA KEV | Added September 11, 2026; federal civilian remediation due September 14, 2026; CISA has flagged this CVE as subject to forensic triage under Binding Operational Directive (BOD) 26-04, reflecting the possibility that vulnerable systems may already have been accessed before patching |
| Exploitation status | Confirmed active scanning / probing observed in the wild — watchTowr reported the first in-the-wild exploitation attempts roughly 24 hours after public disclosure, with mass exploitation assessed as likely to follow |
Ein unauthentifizierter Angreifer kann eine einzelne manipulierte HTTP-Anfrage an
GitLabs Repository-Commits-API senden, einen file.path- (oder
file_path-)Parameter mit Directory-Traversal-Sequenzen
(../, URL-kodierte Varianten usw.) übergeben und den Server dazu bringen, den
Inhalt beliebiger Dateien außerhalb des vorgesehenen Repository-Verzeichnisses
zurückzugeben — einschließlich GitLabs eigener Secrets-Datei, Datenbankkonfiguration, privater
SSH-Schlüssel und anderer sensibler serverseitiger Daten. Da keine Anmeldedaten
erforderlich sind und die Anfrage trivial zu erstellen ist, bewerten GitLab und Drittanbieter-
Forscher dies als maximale Schwere (CVSS 10.0) und CISA hat
aktive Ausnutzung in freier Wildbahn bestätigt.
gitlab-secrets.json, database.yml oder CI/CD-Runner-Tokens liest, kann
sich weit tieferen Zugriff verschaffen, als der anfängliche Datei-Lesezugriff allein
vermuten lässt.GitLab hat CVE-2026-85706 in den folgenden Releases am 2026-09-10 behoben:
Jede selbstverwaltete GitLab-CE/EE-Instanz auf einem früheren Patch-Level innerhalb
dieser Branches — oder auf einem älteren Major-/Minor-Branch — sollte als
verwundbar betrachtet und sofort aktualisiert werden. GitLabs SaaS-
Angebot GitLab.com wird direkt von GitLab gepatcht und erfordert keine Kunden-
Aktion. Siehe docs/remediation.md für einen vollständigen
schrittweisen Upgrade- und Incident-Response-Leitfaden.
Upgrade-Hinweis: Bei Single-Node-GitLab-Instanzen ist mit einem Upgrade auf diese Versionen Ausfallzeit verbunden, während Datenbankmigrationen abgeschlossen werden, bevor GitLab neu startet. Multi-Node-Instanzen können den Patch ohne Ausfallzeit anwenden, indem sie GitLabs dokumentiertes Zero-Downtime-Upgrade- Verfahren befolgen. Version 19.3.2 enthält außerdem Post-Deploy-Migrationen, die nach Abschluss des Upgrades ausgeführt werden — berücksichtigen Sie dies in Ihrem Wartungsfenster.
CVE-2026-85706 war das Hauptthema in einem kritischen GitLab-Security- Release, das insgesamt 17 Schwachstellen abdeckt. Zwei weitere Probleme im selben Release sollten ebenfalls verfolgt werden, da sie ähnliche Angriffsflächen und Risiken der Offenlegung von Anmeldedaten/Secrets betreffen:
| Vulnerability | Severity | Notes |
|---|---|---|
| CVE-2026-85706 — Path Traversal in repository commits API | Critical (CVSS 10.0) | Unauthenticated arbitrary file read — the focus of this repository |
| Insecure Deserialization in GraphQL subscription serializer (GitLab EE) | Critical | Affects GitLab EE only; deserialization flaws of this type can potentially lead to remote code execution depending on exploitability |
| Buffer Overflow in Unicode conversion wrapper (GitLab EE) | High | |
| Scheduled Pipeline Execution Policy test allows Developers to access protected CI/CD variables | High | Credential/secret exposure risk relevant to the same "protect your CI/CD secrets" response actions in this repo's remediation guide |
| Cross-Site Scripting in Markdown JSON table renderer (CE/EE) | High | |
| Incorrect Authorization in CI/CD environment variable scope matcher (CE/EE) | High | |
| Denial of Service in GraphQL complexity limiter (CE/EE) | High | |
| Improper Authentication in SAML SSO sign-in restriction enforcement (CE/EE) | Medium | |
| Insufficiently Protected Credentials in Workhorse senddata emitters (CE/EE) | Medium | |
| Several additional authorization-bypass and access-control issues in protected environment approval rules and compliance frameworks (EE) | Medium |
Praktische Schlussfolgerung: Wenn Sie für CVE-2026-85706 patchen, ziehen Sie bereits Fixes für alle oben genannten Probleme im selben 19.3.2 / 19.2.6 / 19.1.8-Release ein — es gibt keinen Grund, nur für CVE-2026-85706 zu patchen und den Rest aufzuschieben. Betrachten Sie dies als ein Release, das vollständig angewendet werden sollte, nicht als Menü unabhängig planbarer Fixes.
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
---
## 🚀 Schnellstart
### 1. Scannen Sie Ihre GitLab-Logs auf IOCs
Der Scanner ist **reine Python-3-Standardbibliothek** — kein `pip install`
erforderlich, sodass Sie nur die eine Datei auf einen abgeschotteten GitLab-Host
kopieren und sie sofort ausführen können.```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
Exit-Code 1 bedeutet, dass mindestens ein potenzieller IOC gefunden wurde — überprüfe
report.json sofort. Exit-Code 0 bedeutet, dass in den von dir bereitgestellten
Logs keine Übereinstimmungen gefunden wurden (siehe Limitations — dies
ist keine Kompromittierungsgarantie).
Du kannst es auch auf ein beliebiges/rotiertes Log mit --generic-log
(wiederholbares Flag) richten und --format text|json|csv für den Bericht wählen.
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. Erkennungsregeln in Ihrem SIEM / IDS bereitstellen
- Importieren Sie [`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)
in Ihre Sigma-kompatible Pipeline (Splunk über `sigma-cli`, Elastic
Detection Rules, Microsoft Sentinel, Chronicle usw.).
- Stellen Sie [`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)
für Suricata oder Snort bereit — **beginnen Sie im Nur-Alarm-Modus** und passen Sie SIDs/Schwellenwerte
an Ihre Umgebung an, bevor Sie die Blockierung aktivieren.
- Kopieren Sie fertige Abfragen aus
[`detection/siem_hunting_queries.md`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/siem_hunting_queries.md)
für Splunk (SPL), Elastic/Kibana (KQL + DSL), OpenSearch (PPL) und einfache
`ripgrep`/`grep`-Triage.
---
## Wie der Scanner funktioniert
`gitlab_cve_2026_85706_ioc_scanner.py` parst GitLabs strukturierte JSON-Logs
(`production_json.log`, `api_json.log`) sowie generische Reverse-Proxy-Zugriffslogs
im Combined-Format und markiert Anfragen, die dem öffentlich
dokumentierten Ausnutzungsmuster für CVE-2026-85706 entsprechen:
1. **Endpunkt-Übereinstimmung** — der Anforderungspfad trifft die verwundbare Endpunkt-Familie:
`/api/v4/projects/:id/repository/commits` und Unterressourcen.
2. **Parameter-Übereinstimmung** — ein Parameter im Stil `file.path` / `file_path` / `path`
ist im Query-String, Formular-Body oder JSON-Body vorhanden.
3. **Payload-Übereinstimmung** — der Wert dieses Parameters enthält eine Path-Traversal-
Sequenz (`../`, URL-kodiert, doppelt kodiert, überlanges UTF-8 und
Semikolon-Pfadsegment-Varianten) **oder** verweist auf eine bekannte sensible
Zieldatei (`/etc/passwd`, `gitlab-secrets.json`, `secrets.yml`,
`database.yml`, private SSH-Schlüssel usw.).
4. **Authentifizierungskontext** — der Scanner prüft auf `PRIVATE-TOKEN`,
`Authorization` oder ein nicht-null `user_id`-Feld, um festzustellen, ob die
Anfrage authentifiziert war, was der **unauthentifizierten / Pre-Auth**-
Ausnutzungsbedingung entspricht, die für dieses CVE zentral ist.
5. **Rate-Heuristik** — unabhängig von der Payload-Übereinstimmung werden Quell-IPs, die
ein ungewöhnlich hohes Volumen an Anfragen an die Commits-API in einem kurzen
Zeitfenster senden, als wahrscheinliche geskriptete Aufklärung markiert.
Befunde werden als **CRITICAL / HIGH / MEDIUM** bewertet und als
strukturiertes JSON, CSV oder menschenlesbarer Text für die Triage exportiert.
## Beispielausgabe```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
(Generiert aus dem bereinigten Beispiel-Fixture in tests/fixtures/.)
Vollständige Details, einschließlich hostbasierter und Post-Exploitation-Indikatoren, finden sich in
docs/ioc_list.md. Die wichtigsten Netzwerkindikatoren:
/api/v4/projects/<id>/repository/commits*file.path / file_path-Parameter, der ../, %2e%2e%2f,
..%2f, %252e%252e%252f oder ähnliche Traversal-Sequenzen enthält/etc/passwd, /etc/shadow, gitlab-secrets.json,
secrets.yml, database.yml, id_rsa, .env oder
/opt/gitlab/embedded/service/gitlab-rails/config/secrets.ymlPRIVATE-TOKEN / Authorization-Header
oder authentifizierte Sitzung| Datei | Plattform | Zweck |
|---|---|---|
detection/sigma_rule_gitlab_cve_2026_85706.yml | Sigma (SIEM-agnostisch) | Logbasierte Erkennungsregel, konvertierbar nach Splunk, Elastic, Sentinel, Chronicle, QRadar usw. |
detection/network_ids_cve_2026_85706.rules | Suricata / Snort | Netzwerkschicht-Signaturen für Inline-IDS/IPS-Sensoren |
detection/siem_hunting_queries.md | Splunk, Elastic/Kibana, OpenSearch, grep/ripgrep | Copy-paste-fähige Hunting-Abfragen für manuelle/Ad-hoc-Untersuchungen |
Das vollständige Playbook finden Sie in docs/remediation.md.
Zusammenfassung:
Ist GitLab.com (SaaS) betroffen? Für GitLab.com ist keine Kundenaktion erforderlich — GitLab patcht seine SaaS- Plattform direkt. Dieses Tooling ist für selbstverwaltete GitLab CE/EE- Instanzen gedacht.
Benötigt man Authentifizierung, um ausgenutzt zu werden? Nein — genau das macht diese CVE zu CVSS 10.0. Es handelt sich um einen unauthentifizierten Path Traversal gegen einen einzelnen API-Endpunkt.
Gibt es einen öffentlichen Exploit / PoC?
Zum Zeitpunkt dieses Schreibens wurde kein bestätigter öffentlicher Proof-of-Concept
identifiziert, obwohl aktives Scannen/Probing beobachtet wurde. Dieses
Repository enthält keinen Exploit-Code und verlinkt auch nicht darauf — siehe
CONTRIBUTING.md für die Gründe, und prüfen Sie stets den
offiziellen GitLab CVE-2026-85706 Advisory
für die neueste Herstelleranleitung.
Sagt mir der Scanner mit Sicherheit, ob ich kompromittiert wurde? Kein Tool kann das garantieren. Es führt eine Best-Effort-Erkennung basierend auf den Logs durch, die Sie bereitstellen. Siehe Einschränkungen & Haftungsausschluss.
Welche Log-Aufbewahrung benötige ich?
GitLabs standardmäßige Log-Rotation bewahrt Logs möglicherweise nicht bis zum Offenlegungsdatum
(2026-09-10) auf. Ziehen Sie Daten aus Ihrem zentralisierten SIEM/Log-Archiv, wenn Ihre
hostbasierten Logs bereits rotiert wurden — siehe den Hinweis in
detection/siem_hunting_queries.md.
Funktioniert dieses Repository für GitLab Helm/Kubernetes- oder Docker-Deployments?
Ja, solange Sie production_json.log / api_json.log (oder
Ihre Ingress-/Reverse-Proxy-Zugriffslogs) in eine Datei exportieren können, die der Scanner lesen kann;
verwenden Sie --generic-log für alles außerhalb der drei genannten Log-Typen.
Welche Versionen sind genau betroffen? GitLab CE/EE 18.7 bis (ausschließlich) 19.1.8, 19.2 bis (ausschließlich) 19.2.6 und 19.3 bis (ausschließlich) 19.3.2. Alles älter als der 18.7-Zweig ist ebenfalls nicht unterstützt/End-of-Life und sollte unabhängig davon als verwundbar behandelt und aktualisiert werden.
Wurde dies tatsächlich ausgenutzt oder nur „gefährdet"? Bestätigt ausgenutzt. watchTowr Labs beobachtete die ersten In-the-Wild- Ausnutzungsversuche etwa 24 Stunden nach GitLabs öffentlicher Offenlegung, und CISA nahm CVE-2026-85706 anschließend speziell deshalb in seinen KEV-Katalog auf, weil es eine reale Ausnutzung bestätigte — dies ist kein theoretischer oder „nur Responsible Disclosure"-Befund.
Was bedeutet die CISA BOD 26-04 „Forensic Triage"-Einstufung für mich?
CISA kennzeichnete diese CVE gemäß Binding
Operational Directive 26-04 als forensische Triage erfordernd, was bedeutet, dass für föderale Systeme die Annahme gilt,
dass eine verwundbare, internetzugewandte Instanz möglicherweise bereits
zugegriffen wurde, bevor sie gepatcht wurde — nicht nur theoretisch exponiert. Dieselbe
Annahme ist eine vernünftige Standardeinstellung für jede Organisation: Betrachten Sie
das Patchen als Schritt eins eines Incident-Response-Prozesses, nicht als dessen Ende.
Siehe docs/remediation.md für die vollständige Assume-Breach-
Checkliste (Secret-Rotation, Credential-Überprüfung, CI/CD-Audit).
Wurde im selben GitLab-Release noch etwas anderes behoben? Ja — das Release vom 10. September 2026 behob insgesamt 17 Sicherheitsprobleme, darunter ein zweites Problem mit kritischem Schweregrad (unsichere Deserialisierung im GraphQL-Subscription-Serializer, GitLab EE) und einen hochgradigen Pufferüberlauf in einem Unicode-Konvertierungs-Wrapper. Siehe Verwandte Schwachstellen, die im selben Release behoben wurden. Da alle diese in denselben Versionen 19.3.2 / 19.2.6 / 19.1.8 enthalten sind, behebt das Patchen für CVE-2026-85706 sie bereits mit.
docs/ioc_list.md.CONTRIBUTING.md für die Scope-Richtlinie des Projekts.Beiträge zu neuen IOCs, Detection-Rule-Ports, False-Positive-Berichten
und Scanner-Verbesserungen sind willkommen — siehe
CONTRIBUTING.md für Richtlinien (einschließlich der
No-Exploit-Code-Richtlinie und der Anforderungen zur Datenbereinigung).
Vollständige Zitationsdetails und zusätzlicher Kontext finden sich in
docs/timeline.md.
Veröffentlicht unter der MIT License. Detection-Inhalte (Sigma, Suricata/Snort-Regeln, SIEM-Abfragen) werden wie besehen für defensive Nutzung bereitgestellt; passen Sie Schwellenwerte und False-Positive-Behandlung an Ihre eigene Umgebung an, bevor Sie sich operativ darauf verlassen.
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
| Public PoC |
| Not confirmed publicly available at time of writing |
| GitLab.com / Dedicated | GitLab.com (SaaS) was already patched at disclosure; GitLab Dedicated customers did not need to take action. Only self-managed CE/EE instances require action |