CVE-2026-85706 — Scanner de IOC e Toolkit de Detecção para Path Traversal no GitLab. Detecte e rastreie a exploração da vulnerabilidade crítica de path traversal não autenticada no GitLab CE/EE com varredura de IOC, regras de detecção Sigma, Suricata/Snort e SIEM.
Path Traversal Não Autenticado na API de Commits de Repositório do GitLab CE/EE (CVSS 3.1: 10.0, Crítico) Estado: Ativamente explorada em ambiente real · Listada na CISA KEV (2026-09-11, prazo 2026-09-14) · Corrigida pelo GitLab em 2026-09-10
Um toolkit gratuito e de código aberto de resposta a incidentes e caça a ameaças para CVE-2026-85706 — uma vulnerabilidade crítica de path traversal não autenticado no GitLab Community Edition (CE) e Enterprise Edition (EE) que afeta a API de commits de repositório. Este repositório fornece a equipas de segurança, analistas de SOC, engenheiros de deteção e administradores de GitLab um scanner de IOC (Indicadores de Compromisso) pronto a executar, regras de deteção Sigma / Suricata / Snort, consultas de caça Splunk / Elastic / OpenSearch e um guia de remediação passo a passo — tudo o que precisa para detetar tentativas de exploração, confirmar o estado de correção e responder a esta vulnerabilidade zero-day / n-day do GitLab rapidamente.
🔎 À procura do caminho mais rápido para "estou afetado?" Salte para Início Rápido.
🚨 À procura de para que versão atualizar? Salte para Versões Corrigidas e Patch.
| ID CVE | CVE-2026-85706 |
| Fornecedor / Produto | GitLab Community Edition (CE) e Enterprise Edition (EE), autoalojado |
| Classe de vulnerabilidade | Path Traversal (CWE-35), parte da família mais ampla de Limitação Imprópria de um Nome de Caminho (CWE-22) |
| Componente afetado | API de Commits de Repositório (/api/v4/projects/:id/repository/commits...) |
| Causa raiz | Confinamento de caminho impróprio combinado com ausência de aplicação de autenticação no endpoint de API afetado |
| Versões afetadas | GitLab CE/EE 18.7 até (exclusive) 19.1.8, 19.2 até (exclusive) 19.2.6, 19.3 até (exclusive) 19.3.2 |
| Autenticação necessária | Nenhuma — exploração não autenticada, pré-autenticação |
| Vetor de ataque | Rede, um único pedido HTTP |
| Pontuação CVSS 3.1 | 10.0 (Crítico) |
| Impacto | Leitura arbitrária de ficheiros no servidor GitLab — ficheiros de configuração, segredos, tokens, código-fonte, potencialmente chaves SSH e credenciais de base de dados |
| Reportado por | Investigador de segurança externo (identificador HackerOne "s3ntago"), através do programa de bug bounty HackerOne do GitLab |
| Divulgado / Corrigido | 10 de setembro de 2026 — parte de uma versão de segurança crítica do GitLab que corrige 17 vulnerabilidades no total (ver Vulnerabilidades Relacionadas) |
| CISA KEV | Adicionada em 11 de setembro de 2026; remediação federal civil com prazo até 14 de setembro de 2026; a CISA sinalizou este CVE como sujeito a triagem forense ao abrigo da Diretiva Operacional Vinculativa (BOD) 26-04, refletindo a possibilidade de que sistemas vulneráveis possam já ter sido acedidos antes da correção |
| Estado de exploração | Scanning / probing ativo confirmado observado em ambiente real — a watchTowr reportou as primeiras tentativas de exploração em ambiente real cerca de após a divulgação pública, com exploração em massa avaliada como provável de se seguir |
Um atacante não autenticado pode enviar um único pedido HTTP manipulado à
API de commits de repositório do GitLab, fornecendo um parâmetro file.path (ou
file_path) contendo sequências de travessia de diretórios
(../, variantes codificadas em URL, etc.), e fazer com que o servidor devolva o
conteúdo de ficheiros arbitrários fora do diretório de repositório pretendido —
incluindo o próprio ficheiro de segredos do GitLab, configuração de base de dados, chaves
privadas SSH e outros dados sensíveis do lado do servidor. Como não são
necessárias credenciais e o pedido é trivial de construir, o GitLab e investigadores
terceiros classificam isto como severidade máxima (CVSS 10.0) e a CISA confirmou
exploração ativa em ambiente real.
gitlab-secrets.json, database.yml ou tokens de runner de CI/CD pode pivotar
para um acesso muito mais profundo do que a leitura de ficheiro inicial sugere.O GitLab corrigiu o CVE-2026-85706 nas seguintes versões em 2026-09-10:
Qualquer instância GitLab CE/EE autoalojada num nível de patch anterior dentro
destes ramos — ou num ramo major/minor mais antigo — deve ser
considerada vulnerável e atualizada imediatamente. A oferta SaaS do GitLab.com
é corrigida diretamente pelo GitLab e não requer ação do cliente. Ver
docs/remediation.md para um guia completo
passo a passo de atualização e resposta a incidentes.
Nota de atualização: em instâncias GitLab de nó único, a atualização para estas versões envolve tempo de inatividade enquanto as migrações de base de dados são concluídas antes de o GitLab reiniciar. Instâncias multi-nó podem aplicar o patch sem tempo de inatividade seguindo o procedimento documentado de atualização sem tempo de inatividade do GitLab. A versão 19.3.2 também inclui migrações pós-implementação que são executadas após a conclusão da atualização — tenha isto em conta na sua janela de manutenção.
O CVE-2026-85706 foi o problema em destaque numa versão de segurança crítica do GitLab que abrange 17 vulnerabilidades no total. Dois outros problemas na mesma versão merecem ser acompanhados a par dele, uma vez que afetam uma superfície de ataque semelhante e risco de exposição de credenciais/segredos:
| Vulnerabilidade | Severidade | Notas |
|---|---|---|
| CVE-2026-85706 — Path Traversal na API de commits de repositório | Crítico (CVSS 10.0) | Leitura arbitrária de ficheiros não autenticada — o foco deste repositório |
| Desserialização Insegura no serializador de subscrições GraphQL (GitLab EE) | Crítico | Afeta apenas o GitLab EE; falhas de desserialização deste tipo podem potencialmente levar a execução remota de código dependendo da explorabilidade |
| Buffer Overflow no wrapper de conversão Unicode (GitLab EE) | Alto | |
| O teste da Política de Execução de Pipeline Agendado permite que Developers acedam a variáveis de CI/CD protegidas | Alto | Risco de exposição de credenciais/segredos relevante para as mesmas ações de resposta "proteja os seus segredos de CI/CD" no guia de remediação deste repositório |
| Cross-Site Scripting no renderizador de tabelas JSON Markdown (CE/EE) | Alto | |
| Autorização Incorreta no matcher de âmbito de variáveis de ambiente de CI/CD (CE/EE) | Alto | |
| Negação de Serviço no limitador de complexidade GraphQL (CE/EE) | Alto | |
| Autenticação Imprópria na aplicação de restrições de início de sessão SAML SSO (CE/EE) | Médio | |
| Credenciais Insuficientemente Protegidas nos emissores senddata do Workhorse (CE/EE) | Médio | |
| Vários problemas adicionais de bypass de autorização e controlo de acesso em regras de aprovação de ambientes protegidos e frameworks de conformidade (EE) | Médio |
Conclusão prática: se está a aplicar o patch para o CVE-2026-85706, já está a incluir correções para todos os acima na mesma versão 19.3.2 / 19.2.6 / 19.1.8 — não há razão para aplicar o patch apenas para o CVE-2026-85706 e adiar o resto. Trate isto como uma versão a aplicar na íntegra, não um menu de correções agendáveis independentemente.
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
---
## 🚀 Início Rápido
### 1. Escaneie seus logs do GitLab em busca de IOCs
O scanner é **Python 3 puro da biblioteca padrão** — não requer `pip install`,
então você pode copiar apenas o arquivo único para um host GitLab restrito
e executá-lo imediatamente.```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
O código de saída 1 significa que pelo menos um possível IOC foi encontrado — revise
report.json imediatamente. O código de saída 0 significa que nenhuma correspondência foi encontrada nos
logs fornecidos (consulte Limitations — isto
não é uma garantia de comprometimento).
Você também pode apontá-lo para qualquer log arbitrário/rotacionado com --generic-log
(flag repetível), e escolher --format text|json|csv para o relatório.
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. Implantar regras de deteção no seu SIEM / IDS
- Importe [`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)
para o seu pipeline compatível com Sigma (Splunk via `sigma-cli`, Elastic
Detection Rules, Microsoft Sentinel, Chronicle, etc.).
- Implante [`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)
no Suricata ou Snort — **comece em modo apenas de alerta** e ajuste os SIDs/limiares
ao seu ambiente antes de ativar o bloqueio.
- Copie/cole consultas prontas a usar de
[`detection/siem_hunting_queries.md`](https://github.com/jithinkrishnanrs/gitlab-cve-2026-85706-ioc/blob/main/detection/siem_hunting_queries.md)
para Splunk (SPL), Elastic/Kibana (KQL + DSL), OpenSearch (PPL) e triagem simples
com `ripgrep`/`grep`.
---
## Como Funciona o Scanner
`gitlab_cve_2026_85706_ioc_scanner.py` analisa os logs JSON estruturados do GitLab
(`production_json.log`, `api_json.log`), bem como logs de acesso genéricos de
reverse-proxy em formato combinado, e sinaliza pedidos que correspondem ao padrão
de exploração publicamente documentado para CVE-2026-85706:
1. **Correspondência de endpoint** — o caminho do pedido atinge a família de endpoints vulneráveis:
`/api/v4/projects/:id/repository/commits` e sub-recursos.
2. **Correspondência de parâmetro** — está presente um parâmetro do tipo
`file.path` / `file_path` / `path` na query string, no corpo do formulário ou no corpo JSON.
3. **Correspondência de payload** — o valor desse parâmetro contém uma sequência
de path-traversal (`../`, codificada em URL, com dupla codificação, overlong-UTF-8 e
variantes de segmento de caminho com ponto e vírgula) **ou** referencia um ficheiro
alvo sensível conhecido (`/etc/passwd`, `gitlab-secrets.json`, `secrets.yml`,
`database.yml`, chaves privadas SSH, etc.).
4. **Contexto de autenticação** — o scanner verifica a presença de `PRIVATE-TOKEN`,
`Authorization` ou de um campo `user_id` não nulo para determinar se o
pedido foi autenticado, correspondendo à condição de exploração
**não autenticada / pré-autenticação** central a este CVE.
5. **Heurística de taxa** — independentemente da correspondência de payload, IPs de origem que fazem
um volume invulgarmente elevado de pedidos à API de commits numa janela
curta são sinalizados como provável reconhecimento automatizado.
Os resultados são classificados como **CRITICAL / HIGH / MEDIUM** e exportados como
JSON estruturado, CSV ou texto legível por humanos para triagem.
## Exemplo de Saída```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
(Generated from the sanitized sample fixture in tests/fixtures/.)
O detalhamento completo, incluindo indicadores baseados em host e de pós-exploração, está em
docs/ioc_list.md. Principais indicadores de rede:
/api/v4/projects/<id>/repository/commits*file.path / file_path contendo ../, %2e%2e%2f,
..%2f, %252e%252e%252f, ou sequências de travessia semelhantes/etc/passwd, /etc/shadow, gitlab-secrets.json,
secrets.yml, database.yml, id_rsa, .env, ou
/opt/gitlab/embedded/service/gitlab-rails/config/secrets.ymlPRIVATE-TOKEN / Authorization válido
ou sessão autenticada| Arquivo | Plataforma | Propósito |
|---|---|---|
detection/sigma_rule_gitlab_cve_2026_85706.yml | Sigma (agnóstico a SIEM) | Regra de detecção baseada em logs conversível para Splunk, Elastic, Sentinel, Chronicle, QRadar, etc. |
detection/network_ids_cve_2026_85706.rules | Suricata / Snort | Assinaturas de camada de rede para sensores IDS/IPS inline |
detection/siem_hunting_queries.md | Splunk, Elastic/Kibana, OpenSearch, grep/ripgrep | Consultas de hunting prontas para copiar e colar para investigação manual/ad-hoc |
Consulte o playbook completo em docs/remediation.md.
Resumo:
O GitLab.com (SaaS) é afetado? Nenhuma ação do cliente é necessária para o GitLab.com — o GitLab aplica patches em sua plataforma SaaS diretamente. Estas ferramentas são para instâncias GitLab CE/EE auto-gerenciadas.
Preciso de autenticação para ser explorado? Não — é isso que torna este CVE CVSS 10.0. É uma travessia de caminho não autenticada contra um único endpoint de API.
Existe um exploit / PoC público disponível?
Até o momento desta escrita, nenhuma prova de conceito pública confirmada foi
identificada, embora varredura/sondagem ativa tenha sido observada. Este
repositório não contém nem vincula código de exploit — consulte
CONTRIBUTING.md para entender o porquê, e sempre verifique o
aviso oficial do GitLab sobre CVE-2026-85706
para as orientações mais recentes do fornecedor.
O scanner me dirá com certeza se fui comprometido? Nenhuma ferramenta pode garantir isso. Ele realiza detecção de melhor esforço com base nos logs que você fornece. Consulte Limitações e Isenção de Responsabilidade.
Qual retenção de logs eu preciso?
A rotação de logs padrão do GitLab pode não reter logs até a data de divulgação
(2026-09-10). Extraia do seu SIEM/arquivo de logs centralizado se seus
logs no host já tiverem sido rotacionados — consulte a nota em
detection/siem_hunting_queries.md.
Este repositório funciona para implantações GitLab Helm/Kubernetes ou Docker?
Sim, desde que você possa exportar production_json.log / api_json.log (ou
seus logs de acesso de ingress/reverse-proxy) para um arquivo que o scanner possa ler;
use --generic-log para qualquer coisa fora dos três tipos de log nomeados.
Exatamente quais versões são afetadas? GitLab CE/EE 18.7 até (não incluindo) 19.1.8, 19.2 até (não incluindo) 19.2.6, e 19.3 até (não incluindo) 19.3.2. Qualquer versão mais antiga que a branch 18.7 também é não suportada/fim de vida e deve ser tratada como vulnerável e atualizada independentemente.
Isso foi realmente explorado, ou apenas "em risco"? Explorado confirmadamente. O watchTowr Labs observou as primeiras tentativas de exploração in-the-wild cerca de 24 horas após a divulgação pública do GitLab, e a CISA subsequentemente adicionou o CVE-2026-85706 ao seu catálogo KEV especificamente porque confirmou exploração no mundo real — este não é um achado teórico ou de "divulgação responsável apenas".
O que a designação de "triagem forense" da CISA BOD 26-04 significa para mim?
A CISA sinalizou este CVE como exigindo triagem forense sob a Diretiva
Operacional Vinculante 26-04, o que significa que a suposição para sistemas federais é
que uma instância vulnerável exposta à internet pode já ter sido
acessada antes de receber o patch — não apenas teoricamente exposta. A
mesma suposição é um padrão razoável para qualquer organização: trate
a aplicação do patch como a primeira etapa de um processo de resposta a incidentes, não o fim dele.
Consulte docs/remediation.md para a lista completa de verificação de presunção de violação
(rotação de segredos, revisão de credenciais, auditoria de CI/CD).
Algo mais foi corrigido na mesma versão do GitLab? Sim — a versão de 10 de setembro de 2026 corrigiu 17 problemas de segurança no total, incluindo um segundo problema de severidade Crítica (desserialização insegura no serializador de assinatura GraphQL, GitLab EE) e um estouro de buffer de severidade Alta em um wrapper de conversão Unicode. Consulte Vulnerabilidades Relacionadas Corrigidas na Mesma Versão. Como todas essas correções são entregues nas mesmas versões 19.3.2 / 19.2.6 / 19.1.8, a aplicação do patch para CVE-2026-85706 já as remedia também.
docs/ioc_list.md.CONTRIBUTING.md para a política de escopo do projeto.Contribuições de novos IOCs, portes de regras de detecção, relatórios de falsos positivos,
e melhorias no scanner são bem-vindas — consulte
CONTRIBUTING.md para diretrizes (incluindo a
política de não inclusão de código de exploit e os requisitos de sanitização de dados).
Detalhes completos de citação e contexto adicional estão em
docs/timeline.md.
Lançado sob a Licença MIT. O conteúdo de detecção (Sigma, regras Suricata/Snort, consultas SIEM) é fornecido como está para uso defensivo; ajuste os limiares e o tratamento de falsos positivos ao seu próprio ambiente antes de confiar nele operacionalmente.
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 público | Não confirmado como disponível publicamente no momento da redação |
| GitLab.com / Dedicated | O GitLab.com (SaaS) já estava corrigido na divulgação; os clientes do GitLab Dedicated não precisaram de tomar medidas. Apenas instâncias CE/EE autoalojadas requerem ação |