CVE-2026-85706 — Сканер IOC и набор инструментов для обнаружения обхода пути в GitLab. Обнаружение и поиск эксплуатации критической уязвимости обхода пути в GitLab CE/EE без аутентификации с помощью сканирования IOC, правил обнаружения Sigma, Suricata/Snort и SIEM.
GitLab CE/EE Repository Commits API Unauthenticated Path Traversal (CVSS 3.1: 10.0, Critical) Статус: активно эксплуатируется в реальных атаках · Включена в CISA KEV (2026-09-11, срок 2026-09-14) · Исправлена в GitLab 2026-09-10
Бесплатный инструмент с открытым исходным кодом для , посвящённый — критической уязвимости обхода пути без аутентификации в GitLab Community Edition (CE) и Enterprise Edition (EE), затрагивающей . Этот репозиторий даёт командам безопасности, аналитикам SOC, инженерам по обнаружению и администраторам GitLab готовый к запуску , , и — всё необходимое для обнаружения попыток эксплуатации, подтверждения статуса исправления и реагирования на эту уязвимость GitLab нулевого дня / n-дня.
🔎 Ищете самый быстрый способ узнать, затронуты ли вы? Перейдите к Быстрому старту.
🚨 Ищете, до какой версии обновляться? Перейдите к Исправленным версиям и патчу.
| CVE ID | CVE-2026-85706 |
| Производитель / продукт | GitLab Community Edition (CE) и Enterprise Edition (EE), self-managed |
| Класс уязвимости | Обход пути (CWE-35), часть более широкого семейства «Ненадлежащее ограничение имени пути» (CWE-22) |
| Затронутый компонент | API коммитов репозитория (/api/v4/projects/:id/repository/commits...) |
| Первопричина | Ненадлежащее ограничение пути в сочетании с отсутствием обязательной аутентификации в затронутой конечной точке API |
| Затронутые версии | GitLab CE/EE 18.7 до (не включая) 19.1.8, 19.2 до (не включая) 19.2.6, 19.3 до (не включая) 19.3.2 |
| Требуется аутентификация | Нет — эксплуатация без аутентификации, до аутентификации |
| Вектор атаки | Сеть, один HTTP-запрос |
| Оценка CVSS 3.1 | 10.0 (Critical) |
| Воздействие | Чтение произвольных файлов на сервере GitLab — файлы конфигурации, секреты, токены, исходный код, потенциально SSH-ключи и учётные данные базы данных |
| Кем сообщено | Внешний исследователь безопасности (ник на HackerOne «s3ntago»), через программу bug bounty GitLab на HackerOne |
| Раскрыто / исправлено | 10 сентября 2026 г. — часть критического релиза безопасности GitLab, исправляющего в общей сложности 17 уязвимостей (см. Связанные уязвимости) |
| CISA KEV | Добавлено 11 сентября 2026 г.; срок устранения для федеральных гражданских ведомств — 14 сентября 2026 г.; CISA отметила эту CVE как подлежащую криминалистическому анализу в соответствии с Директивой по оперативной безопасности (BOD) 26-04, что отражает вероятность того, что к уязвимым системам могли получить доступ ещё до установки патча |
| Статус эксплуатации | Подтверждено активное сканирование / зондирование в реальных атаках — watchTowr сообщила о первых попытках эксплуатации в реальных условиях примерно через после публичного раскрытия, при этом массовая эксплуатация оценивается как вероятная |
Неаутентифицированный злоумышленник может отправить один специально
сформированный HTTP-запрос к API коммитов репозитория GitLab, указав параметр
file.path (или file_path), содержащий последовательности обхода
каталогов (../, URL-кодированные варианты и т. д.), и заставить сервер вернуть
содержимое произвольных файлов за пределами предполагаемого каталога репозитория —
включая собственный файл секретов GitLab, конфигурацию базы данных, приватные
SSH-ключи и другие конфиденциальные данные на стороне сервера. Поскольку учётные
данные не требуются, а запрос тривиально сконструировать, GitLab и сторонние
исследователи оценивают это как максимальную степень серьёзности (CVSS 10.0),
а CISA подтвердила активную эксплуатацию в реальных атаках.
gitlab-secrets.json, database.yml или токены CI/CD runner, может получить
гораздо более глубокий доступ, чем предполагает одно лишь первоначальное чтение файлов.GitLab исправила CVE-2026-85706 в следующих релизах 2026-09-10:
Любой экземпляр self-managed GitLab CE/EE на более раннем уровне патчей в
пределах этих веток — или вообще на более старой мажорной/минорной ветке — следует
считать уязвимым и немедленно обновить. SaaS-предложение GitLab.com
исправляется самим GitLab и не требует действий от клиентов. Полное
пошаговое руководство по обновлению и реагированию на инциденты см. в docs/remediation.md.
Примечание об обновлении: на одноузловых экземплярах GitLab обновление до этих версий связано с простоем, пока завершаются миграции базы данных перед перезапуском GitLab. Многоузловые экземпляры могут применить патч без простоя, следуя документированной процедуре GitLab по обновлению без простоя. Версия 19.3.2 также включает пост-развёртывающие миграции, которые выполняются после завершения обновления — учтите это при планировании окна обслуживания.
CVE-2026-85706 была главной проблемой в критическом релизе безопасности GitLab, охватывающем в общей сложности 17 уязвимостей. Две другие проблемы в том же релизе стоит отслеживать вместе с ней, поскольку они затрагивают схожую поверхность атаки и риск раскрытия учётных данных/секретов:
| Уязвимость | Серьёзность | Примечания |
|---|---|---|
| CVE-2026-85706 — обход пути в API коммитов репозитория | Critical (CVSS 10.0) | Неаутентифицированное чтение произвольных файлов — предмет этого репозитория |
| Небезопасная десериализация в сериализаторе подписок GraphQL (GitLab EE) | Critical | Затрагивает только GitLab EE; недостатки десериализации такого типа потенциально могут привести к удалённому выполнению кода в зависимости от эксплуатируемости |
| Переполнение буфера в обёртке преобразования Unicode (GitLab EE) | High | |
| Тест политики выполнения запланированного конвейера позволяет разработчикам получать доступ к защищённым переменным CI/CD | High | Риск раскрытия учётных данных/секретов, связанный с теми же действиями по реагированию «защитите свои секреты CI/CD» в руководстве по устранению в этом репозитории |
| Межсайтовый скриптинг в рендерере таблиц Markdown JSON (CE/EE) | High | |
| Некорректная авторизация в сопоставителе области переменных окружения CI/CD (CE/EE) | High | |
| Отказ в обслуживании в ограничителе сложности GraphQL (CE/EE) | High | |
| Ненадлежащая аутентификация при применении ограничений входа SAML SSO (CE/EE) | Medium | |
| Недостаточно защищённые учётные данные в эмиттерах senddata Workhorse (CE/EE) | Medium | |
| Несколько дополнительных проблем обхода авторизации и контроля доступа в правилах утверждения защищённых сред и фреймворках соответствия (EE) | Medium |
Практический вывод: если вы устанавливаете патч для CVE-2026-85706, вы уже получаете исправления для всего перечисленного выше в том же релизе 19.3.2 / 19.2.6 / 19.1.8 — нет причин устанавливать патч только для CVE-2026-85706 и откладывать остальное. Относитесь к этому как к одному релизу, который нужно применить целиком, а не как к меню независимо планируемых исправлений.
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
---
## 🚀 Быстрый старт
### 1. Сканирование журналов GitLab на наличие IOC
Сканер использует **только стандартную библиотеку Python 3** — `pip install`
не требуется, поэтому вы можете скопировать всего один файл на изолированный хост GitLab
и сразу запустить его.```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
Код выхода 1 означает, что был найден как минимум один потенциальный IOC — немедленно проверьте
report.json. Код выхода 0 означает, что совпадений в предоставленных
вами логах не найдено (см. Ограничения — это
не гарантия компрометации).
Вы также можете указать его на любой произвольный/ротированный лог с помощью --generic-log
(флаг можно повторять) и выбрать --format text|json|csv для отчёта.
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. Разверните правила обнаружения в вашем SIEM / IDS
- Импортируйте [`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)
в ваш Sigma-совместимый конвейер (Splunk через `sigma-cli`, Elastic
Detection Rules, Microsoft Sentinel, Chronicle и т. д.).
- Разверните [`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)
в Suricata или Snort — **начните в режиме только оповещения** и настройте SID/пороги
под вашу среду, прежде чем включать блокировку.
- Скопируйте/вставьте готовые запросы из
[`detection/siem_hunting_queries.md`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/siem_hunting_queries.md)
для Splunk (SPL), Elastic/Kibana (KQL + DSL), OpenSearch (PPL) и обычного
`ripgrep`/`grep` для триажа.
---
## Как работает сканер
`gitlab_cve_2026_85706_ioc_scanner.py` разбирает структурированные JSON-логи GitLab
(`production_json.log`, `api_json.log`), а также журналы доступа обратного прокси
в общем комбинированном формате, и помечает запросы, соответствующие публично
задокументированному шаблону эксплуатации CVE-2026-85706:
1. **Совпадение по эндпоинту** — путь запроса попадает в семейство уязвимых эндпоинтов:
`/api/v4/projects/:id/repository/commits` и подресурсы.
2. **Совпадение по параметру** — в строке запроса, теле формы или теле JSON
присутствует параметр вида `file.path` / `file_path` / `path`.
3. **Совпадение по полезной нагрузке** — значение этого параметра содержит
последовательность обхода пути (`../`, URL-кодированную, дважды кодированную, overlong-UTF-8
и варианты с точкой с запятой в сегменте пути) **или** ссылается на известный
конфиденциальный целевой файл (`/etc/passwd`, `gitlab-secrets.json`, `secrets.yml`,
`database.yml`, приватные ключи SSH и т. д.).
4. **Контекст аутентификации** — сканер проверяет наличие `PRIVATE-TOKEN`,
`Authorization` или ненулевого поля `user_id`, чтобы определить, был ли
запрос аутентифицирован, что соответствует **неаутентифицированному / pre-auth**
условию эксплуатации, центральному для этой CVE.
5. **Эвристика по частоте** — независимо от совпадения по полезной нагрузке, IP-адреса источников,
делающие необычно большое количество запросов к API commits за короткое
окно, помечаются как вероятная автоматизированная разведка.
Находки оцениваются как **CRITICAL / HIGH / MEDIUM** и экспортируются в виде
структурированного JSON, CSV или удобочитаемого текста для триажа.
## Пример вывода```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
(Сгенерировано из очищенного образца фикстуры в tests/fixtures/.)
Полная информация, включая индикаторы на уровне хоста и постэксплуатационные индикаторы, находится в
docs/ioc_list.md. Ключевые сетевые индикаторы:
/api/v4/projects/<id>/repository/commits*file.path / file_path, содержащий ../, %2e%2e%2f,
..%2f, %252e%252e%252f или аналогичные последовательности обхода пути/etc/passwd, /etc/shadow, gitlab-secrets.json,
secrets.yml, database.yml, id_rsa, .env или
/opt/gitlab/embedded/service/gitlab-rails/config/secrets.ymlPRIVATE-TOKEN / Authorization
или аутентифицированной сессии| Файл | Платформа | Назначение |
|---|---|---|
detection/sigma_rule_gitlab_cve_2026_85706.yml | Sigma (независимо от SIEM) | Правило обнаружения на основе логов, конвертируемое в Splunk, Elastic, Sentinel, Chronicle, QRadar и т. д. |
detection/network_ids_cve_2026_85706.rules | Suricata / Snort | Сигнатуры сетевого уровня для встроенных сенсоров IDS/IPS |
detection/siem_hunting_queries.md | Splunk, Elastic/Kibana, OpenSearch, grep/ripgrep | Готовые к копированию поисковые запросы для ручного/специализированного расследования |
Полный план действий см. в docs/remediation.md.
Краткое изложение:
Затронут ли GitLab.com (SaaS)? Для GitLab.com никаких действий со стороны клиентов не требуется — GitLab исправляет свою SaaS- платформу напрямую. Этот инструментарий предназначен для самостоятельно управляемых экземпляров GitLab CE/EE.
Нужна ли аутентификация для эксплуатации? Нет — именно поэтому у этой CVE оценка CVSS 10.0. Это неаутентифицированный обход пути через единственную конечную точку API.
Есть ли публичный эксплойт / PoC?
На момент написания этого текста подтверждённый публичный proof-of-concept не
выявлен, хотя наблюдалось активное сканирование/зондирование. Этот
репозиторий не содержит и не ссылается на код эксплойта — см.
CONTRIBUTING.md о причинах, и всегда проверяйте
официальный рекомендательный документ GitLab по CVE-2026-85706
для получения актуальных рекомендаций вендора.
Сканер точно скажет мне, был ли я скомпрометирован? Ни один инструмент не может этого гарантировать. Он выполняет обнаружение по мере возможностей на основе предоставленных вами логов. См. Ограничения и отказ от ответственности.
Какое хранение логов мне нужно?
Стандартная ротация логов GitLab может не сохранять логи вплоть до даты раскрытия
(2026-09-10). Извлекайте данные из вашего централизованного SIEM/архива логов, если ваши
локальные логи уже ротированы — см. примечание в
detection/siem_hunting_queries.md.
Работает ли этот репозиторий для развёртываний GitLab Helm/Kubernetes или Docker?
Да, при условии, что вы можете экспортировать production_json.log / api_json.log (или
логи доступа вашего ingress/обратного прокси) в файл, который сканер может прочитать;
используйте --generic-log для всего, что выходит за рамки трёх именованных типов логов.
Какие именно версии затронуты? GitLab CE/EE 18.7 до (не включая) 19.1.8, 19.2 до (не включая) 19.2.6 и 19.3 до (не включая) 19.3.2. Всё, что старше ветки 18.7, также не поддерживается/снято с поддержки и должно рассматриваться как уязвимое и обновляться в любом случае.
Это действительно эксплуатировалось или просто «под угрозой»? Подтверждена эксплуатация. watchTowr Labs наблюдала первые попытки эксплуатации в реальных условиях примерно через 24 часа после публичного раскрытия GitLab, и CISA впоследствии добавила CVE-2026-85706 в свой каталог KEV именно потому, что подтвердила эксплуатацию в реальном мире — это не теоретическая находка и не «только ответственное раскрытие».
Что означает для меня обозначение «forensic triage» из CISA BOD 26-04?
CISA отметила эту CVE как требующую криминалистической экспертизы в рамках Binding
Operational Directive 26-04, что означает, что для федеральных систем предполагается,
что уязвимый экземпляр, доступный из интернета, возможно, уже был
скомпрометирован до установки патча — а не просто теоретически подвержен. То же
предположение является разумным по умолчанию для любой организации: рассматривайте
установку патча как первый шаг процесса реагирования на инцидент, а не как его завершение.
Полный контрольный список на случай предполагаемой компрометации (ротация секретов, проверка учётных данных, аудит CI/CD) см. в docs/remediation.md.
Было ли что-то ещё исправлено в том же релизе GitLab? Да — релиз от 10 сентября 2026 года исправил 17 проблем безопасности в общей сложности, включая вторую проблему критического уровня серьёзности (небезопасная десериализация в сериализаторе подписок GraphQL, GitLab EE) и переполнение буфера высокого уровня серьёзности в обёртке преобразования Unicode. См. Связанные уязвимости, исправленные в том же релизе. Поскольку все они поставляются в одних и тех же версиях 19.3.2 / 19.2.6 / 19.1.8, установка патча для CVE-2026-85706 уже устраняет и их.
docs/ioc_list.md.CONTRIBUTING.md о политике охвата проекта.Приветствуются вклады в виде новых IOC, портов правил обнаружения, отчётов о ложных срабатываниях
и улучшений сканера — см.
CONTRIBUTING.md для получения рекомендаций (включая
политику отсутствия кода эксплойтов и требования к очистке данных).
Полные сведения о цитировании и дополнительный контекст находятся в
docs/timeline.md.
Выпущено под лицензией MIT. Содержимое для обнаружения (Sigma, правила Suricata/Snort, запросы SIEM) предоставляется как есть для защитного использования; настройте пороги и обработку ложных срабатываний под вашу собственную среду, прежде чем полагаться на него в операционной деятельности.
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 | На момент написания не подтверждено наличие публично доступного |
| GitLab.com / Dedicated | GitLab.com (SaaS) уже был исправлен на момент раскрытия; клиентам GitLab Dedicated не требовалось предпринимать действий. Действия требуются только для self-managed экземпляров CE/EE |