CVE-2026-85706 — Kit de herramientas de detección y escaneo de IOC para el path traversal de GitLab. Detecta y rastrea la explotación de la vulnerabilidad crítica de path traversal no autenticada en GitLab CE/EE con escaneo de IOC, reglas de detección para Sigma, Suricata/Snort y SIEM.
Path Traversal No Autenticado en la API de Commits de Repositorio de GitLab CE/EE (CVSS 3.1: 10.0, Crítico) Estado: Explotado activamente en el wild · Incluido en CISA KEV (2026-09-11, vence 2026-09-14) · Parcheado por GitLab 2026-09-10
Un gratuito y de código abierto para — una vulnerabilidad crítica de path traversal no autenticado en GitLab Community Edition (CE) y Enterprise Edition (EE) que afecta la . Este repositorio brinda a los equipos de seguridad, analistas de SOC, ingenieros de detección y administradores de GitLab un listo para ejecutar, , , y una — todo lo que necesita para detectar intentos de explotación, confirmar el estado del parche y responder a esta vulnerabilidad zero-day / n-day de GitLab rápidamente.
🔎 ¿Busca la vía más rápida para saber "¿estoy afectado?" Vaya a Inicio Rápido.
🚨 ¿Busca a qué versión parchear? Vaya a Versiones Corregidas y Parche.
| ID CVE | CVE-2026-85706 |
| Proveedor / Producto | GitLab Community Edition (CE) y Enterprise Edition (EE), autogestionado |
| Clase de vulnerabilidad | Path Traversal (CWE-35), parte de la familia más amplia de Limitación Inadecuada de un Nombre de Ruta (CWE-22) |
| Componente afectado | API de Commits de Repositorio (/api/v4/projects/:id/repository/commits...) |
| Causa raíz | Confinamiento de ruta inadecuado combinado con falta de aplicación de autenticación en el endpoint de API afectado |
| Versiones afectadas | GitLab CE/EE 18.7 hasta (sin incluir) 19.1.8, 19.2 hasta (sin incluir) 19.2.6, 19.3 hasta (sin incluir) 19.3.2 |
| Autenticación requerida | Ninguna — explotación no autenticada, pre-auth |
| Vector de ataque | Red, una sola solicitud HTTP |
| Puntuación CVSS 3.1 | 10.0 (Crítico) |
| Impacto | Lectura arbitraria de archivos en el servidor GitLab — archivos de configuración, secretos, tokens, código fuente, potencialmente claves SSH y credenciales de base de datos |
| Reportado por | Investigador de seguridad externo (alias de HackerOne "s3ntago"), a través del programa de bug bounty HackerOne de GitLab |
| Divulgado / Parcheado | 10 de septiembre de 2026 — parte de una versión de seguridad crítica de GitLab que corrige 17 vulnerabilidades en total (ver Vulnerabilidades Relacionadas) |
| CISA KEV | Agregado el 11 de septiembre de 2026; remediación federal civil vence el 14 de septiembre de 2026; CISA ha marcado este CVE como sujeto a triaje forense bajo la Directiva Operativa Vinculante (BOD) 26-04, lo que refleja la posibilidad de que los sistemas vulnerables ya hayan sido accedidos antes del parcheo |
| Estado de explotación | Escaneo / sondeo activo confirmado observado en el wild — watchTowr reportó los primeros intentos de explotación en el wild aproximadamente después de la divulgación pública, con explotación masiva evaluada como probable a continuación |
Un atacante no autenticado puede enviar una sola solicitud HTTP manipulada a
la API de commits de repositorio de GitLab, suministrando un parámetro file.path (o
file_path) que contenga secuencias de directory-traversal
(../, variantes codificadas en URL, etc.), y hacer que el servidor devuelva el
contenido de archivos arbitrarios fuera del directorio de repositorio previsto —
incluyendo el propio archivo de secretos de GitLab, configuración de base de datos, claves privadas
SSH y otros datos sensibles del lado del servidor. Debido a que no se
requieren credenciales y la solicitud es trivial de construir, GitLab y terceros
investigadores califican esto como severidad máxima (CVSS 10.0) y CISA ha
confirmado explotación activa en el wild.
gitlab-secrets.json, database.yml o tokens de runner de CI/CD puede pivotar
hacia un acceso mucho más profundo de lo que sugiere la lectura de archivo inicial por sí sola.GitLab corrigió CVE-2026-85706 en las siguientes versiones el 2026-09-10:
Cualquier instancia autogestionada de GitLab CE/EE en un nivel de parche anterior dentro
de estas ramas — o en una rama major/minor más antigua por completo — debe
considerarse vulnerable y actualizarse inmediatamente. La oferta SaaS de GitLab.com
es parcheada por GitLab directamente y no requiere acción del cliente. Ver docs/remediation.md para una guía completa
paso a paso de actualización y respuesta a incidentes.
Nota de actualización: en instancias GitLab de nodo único, actualizar a estas versiones implica tiempo de inactividad mientras las migraciones de base de datos se completan antes de que GitLab se reinicie. Las instancias multi-nodo pueden aplicar el parche sin tiempo de inactividad siguiendo el procedimiento documentado de actualización sin tiempo de inactividad de GitLab. La versión 19.3.2 también incluye migraciones post-despliegue que se ejecutan después de que la actualización se completa — tenga esto en cuenta para su ventana de mantenimiento.
CVE-2026-85706 fue el problema principal en una versión de seguridad crítica de GitLab que cubre 17 vulnerabilidades en total. Otros dos problemas en la misma versión vale la pena rastrearlos junto con él, ya que afectan una superficie de ataque similar y riesgo de exposición de credenciales/secretos:
| Vulnerabilidad | Severidad | Notas |
|---|---|---|
| CVE-2026-85706 — Path Traversal en la API de commits de repositorio | Crítico (CVSS 10.0) | Lectura arbitraria de archivos no autenticada — el foco de este repositorio |
| Deserialización Insegura en el serializador de suscripciones GraphQL (GitLab EE) | Crítico | Afecta solo a GitLab EE; fallas de deserialización de este tipo pueden potencialmente llevar a ejecución remota de código dependiendo de la explotabilidad |
| Desbordamiento de Búfer en el wrapper de conversión Unicode (GitLab EE) | Alto | |
| La prueba de Política de Ejecución de Pipeline Programada permite a los Developers acceder a variables de CI/CD protegidas | Alto | Riesgo de exposición de credenciales/secretos relevante para las mismas acciones de respuesta de "proteja sus secretos de CI/CD" en la guía de remediación de este repositorio |
| Cross-Site Scripting en el renderizador de tablas JSON de Markdown (CE/EE) | Alto | |
| Autorización Incorrecta en el matcher de alcance de variables de entorno de CI/CD (CE/EE) | Alto | |
| Denegación de Servicio en el limitador de complejidad de GraphQL (CE/EE) | Alto | |
| Autenticación Inadecuada en la aplicación de restricciones de inicio de sesión SAML SSO (CE/EE) | Medio | |
| Credenciales Insuficientemente Protegidas en los emisores senddata de Workhorse (CE/EE) | Medio | |
| Varios problemas adicionales de bypass de autorización y control de acceso en reglas de aprobación de entornos protegidos y marcos de cumplimiento (EE) | Medio |
Conclusión práctica: si está parcheando para CVE-2026-85706, ya está incorporando las correcciones para todo lo anterior en la misma versión 19.3.2 / 19.2.6 / 19.1.8 — no hay razón para parchear solo para CVE-2026-85706 y diferir el resto. Trate esto como una versión para aplicar en su totalidad, no un menú de correcciones programables de forma independiente.
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
---
## 🚀 Inicio rápido
### 1. Escanea tus registros de GitLab en busca de IOCs
El escáner es **Python 3 de biblioteca estándar pura** — no requiere `pip install`,
por lo que puedes copiar solo el archivo en un host de GitLab restringido
y ejecutarlo inmediatamente.```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
El código de salida 1 significa que se encontró al menos un IOC potencial — revisa
report.json inmediatamente. El código de salida 0 significa que no se encontraron coincidencias en
los logs que proporcionaste (consulta Limitaciones — esto
no es una garantía de compromiso).
También puedes apuntarlo a cualquier log arbitrario/rotado con --generic-log
(flag repetible), y elegir --format text|json|csv para el informe.
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. Desplegar reglas de detección en tu SIEM / IDS
- Importa [`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)
en tu pipeline compatible con Sigma (Splunk mediante `sigma-cli`, Elastic
Detection Rules, Microsoft Sentinel, Chronicle, etc.).
- Despliega [`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)
en Suricata o Snort — **comienza en modo solo alerta** y ajusta los SIDs/umbrales
a tu entorno antes de habilitar el bloqueo.
- Copia y pega consultas listas para usar desde
[`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) y triaje
simple con `ripgrep`/`grep`.
---
## Cómo funciona el escáner
`gitlab_cve_2026_85706_ioc_scanner.py` analiza los logs JSON estructurados de GitLab
(`production_json.log`, `api_json.log`), así como logs de acceso de proxy inverso en formato combinado genérico, y marca las solicitudes que coinciden con el patrón de explotación documentado públicamente para CVE-2026-85706:
1. **Coincidencia de endpoint** — la ruta de la solicitud alcanza la familia de endpoints vulnerable:
`/api/v4/projects/:id/repository/commits` y subrecursos.
2. **Coincidencia de parámetro** — hay un parámetro de estilo `file.path` / `file_path` / `path`
presente en la cadena de consulta, el cuerpo del formulario o el cuerpo JSON.
3. **Coincidencia de payload** — el valor de ese parámetro contiene una secuencia de path-traversal
(`../`, codificada en URL, doblemente codificada, UTF-8 sobredimensionado y
variantes de segmento de ruta con punto y coma) **o** hace referencia a un archivo objetivo sensible conocido
(`/etc/passwd`, `gitlab-secrets.json`, `secrets.yml`,
`database.yml`, claves privadas SSH, etc.).
4. **Contexto de autenticación** — el escáner busca `PRIVATE-TOKEN`,
`Authorization` o un campo `user_id` no nulo para determinar si la
solicitud estaba autenticada, coincidiendo con la condición de explotación
**no autenticada / pre-auth** central para este CVE.
5. **Heurística de tasa** — independientemente de la coincidencia de payload, las IP de origen que realizan
un volumen inusualmente alto de solicitudes a la API de commits en una ventana corta
se marcan como probable reconocimiento automatizado.
Los hallazgos se puntúan como **CRITICAL / HIGH / MEDIUM** y se exportan como
JSON estructurado, CSV o texto legible por humanos para su triaje.
## Salida de ejemplo```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
(Generado a partir del fixture de muestra sanitizado en tests/fixtures/.)
El detalle completo, incluidos los indicadores basados en host y de post-explotación, está en
docs/ioc_list.md. Indicadores de red destacados:
/api/v4/projects/<id>/repository/commits*file.path / file_path que contiene ../, %2e%2e%2f,
..%2f, %252e%252e%252f, o secuencias de traversal similares/etc/passwd, /etc/shadow, gitlab-secrets.json,
secrets.yml, database.yml, id_rsa, .env, o
/opt/gitlab/embedded/service/gitlab-rails/config/secrets.ymlPRIVATE-TOKEN / Authorization válida
o una sesión autenticada| Archivo | Plataforma | Propósito |
|---|---|---|
detection/sigma_rule_gitlab_cve_2026_85706.yml | Sigma (agnóstico de SIEM) | Regla de detección basada en logs convertible a Splunk, Elastic, Sentinel, Chronicle, QRadar, etc. |
detection/network_ids_cve_2026_85706.rules | Suricata / Snort | Firmas de capa de red para sensores IDS/IPS en línea |
detection/siem_hunting_queries.md | Splunk, Elastic/Kibana, OpenSearch, grep/ripgrep | Consultas de hunting listas para copiar y pegar para investigación manual/ad-hoc |
Consulte el playbook completo en docs/remediation.md.
Resumen:
¿Está afectado GitLab.com (SaaS)? No se requiere ninguna acción del cliente para GitLab.com — GitLab aplica los parches a su plataforma SaaS directamente. Estas herramientas son para instancias de GitLab CE/EE auto-gestionadas.
¿Necesito autenticación para ser explotado? No — eso es lo que hace que este CVE sea CVSS 10.0. Es un path traversal no autenticado contra un único endpoint de la API.
¿Hay un exploit / PoC público disponible?
Al momento de escribir esto, no se ha identificado ninguna prueba de concepto pública
confirmada, aunque se ha observado escaneo/sondeo activo. Este
repositorio no contiene ni enlaza código de exploit — consulte
CONTRIBUTING.md para saber por qué, y consulte siempre el
aviso oficial de GitLab sobre CVE-2026-85706
para obtener la guía más reciente del proveedor.
¿El escáner me dirá con certeza si fui comprometido? Ninguna herramienta puede garantizar eso. Realiza una detección de mejor esfuerzo basada en los logs que proporcione. Consulte Limitaciones y descargo de responsabilidad.
¿Qué retención de logs necesito?
La rotación de logs predeterminada de GitLab puede no conservar los logs hasta la fecha de
divulgación (2026-09-10). Extráigalos de su SIEM/archivo de logs centralizado si sus
logs en el host ya se han rotado — consulte la nota en
detection/siem_hunting_queries.md.
¿Este repositorio funciona para despliegues de GitLab Helm/Kubernetes o Docker?
Sí, siempre que pueda exportar production_json.log / api_json.log (o
los logs de acceso de su ingress/reverse-proxy) a un archivo que el escáner pueda leer;
use --generic-log para cualquier cosa fuera de los tres tipos de log nombrados.
¿Exactamente qué versiones están afectadas? GitLab CE/EE 18.7 hasta (sin incluir) 19.1.8, 19.2 hasta (sin incluir) 19.2.6, y 19.3 hasta (sin incluir) 19.3.2. Cualquier versión anterior a la rama 18.7 también carece de soporte/fin de vida y debe tratarse como vulnerable y actualizarse en cualquier caso.
¿Esto se explotó realmente, o solo estaba "en riesgo"? Explotación confirmada. watchTowr Labs observó los primeros intentos de explotación en el mundo real aproximadamente 24 horas después de la divulgación pública de GitLab, y CISA posteriormente añadió CVE-2026-85706 a su catálogo KEV específicamente porque confirmó explotación real — esto no es un hallazgo teórico ni de "solo divulgación responsable".
¿Qué significa para mí la designación de "triaje forense" de la CISA BOD 26-04?
CISA marcó este CVE como que requiere triaje forense bajo la Directiva
Operativa Vinculante 26-04, lo que significa que la suposición para los sistemas federales es
que una instancia vulnerable expuesta a internet puede haber sido ya
accedida antes de que se le aplicara el parche — no solo teóricamente expuesta. La
misma suposición es un valor predeterminado razonable para cualquier organización: trate
la aplicación del parche como el primer paso de un proceso de respuesta a incidentes, no como el final de uno.
Consulte docs/remediation.md para la lista completa de verificación de asumir-brecha
(rotación de secretos, revisión de credenciales, auditoría de CI/CD).
¿Se corrigió algo más en la misma versión de GitLab? Sí — la versión del 10 de septiembre de 2026 corrigió 17 problemas de seguridad en total, incluido un segundo problema de severidad Crítica (deserialización insegura en el serializador de suscripciones GraphQL, GitLab EE) y un desbordamiento de búfer de severidad Alta en un wrapper de conversión Unicode. Consulte Vulnerabilidades relacionadas corregidas en la misma versión. Dado que todas estas se incluyen en las mismas versiones 19.3.2 / 19.2.6 / 19.1.8, aplicar el parche para CVE-2026-85706 ya las remedia también.
docs/ioc_list.md.CONTRIBUTING.md para conocer la política de alcance del proyecto.Las contribuciones de nuevos IOC, ports de reglas de detección, informes de falsos positivos,
y mejoras del escáner son bienvenidas — consulte
CONTRIBUTING.md para conocer las directrices (incluida la
política de no incluir código de exploit y los requisitos de sanitización de datos).
Los detalles completos de las citas y el contexto adicional están en
docs/timeline.md.
Publicado bajo la Licencia MIT. El contenido de detección (Sigma, reglas de Suricata/Snort, consultas de SIEM) se proporciona tal cual para uso defensivo; ajuste los umbrales y el manejo de falsos positivos a su propio entorno antes de depender de ello operativamente.
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 | No confirmado públicamente disponible al momento de escribir |
| GitLab.com / Dedicated | GitLab.com (SaaS) ya estaba parcheado al momento de la divulgación; los clientes de GitLab Dedicated no necesitaron tomar acción. Solo las instancias CE/EE autogestionadas requieren acción |