Introducción

Un equipo de seguridad que monitorea los logs de su instancia GitLab Self-Managed detecta una ráfaga de peticiones HTTP POST contra /api/v4/projects/{id}/repository/commits/ con parámetros file.path que apuntan fuera del directorio del repositorio. No hay token de autenticación en el header. No hay sesión. En una sola petición, un atacante sin credenciales puede extraer el archivo gitlab.rb, los tokens de API de CI/CD o claves SSH almacenadas en el servidor. Ese es el escenario concreto que CVE-2026-85706 habilita, y la CISA acaba de confirmar que ya no es teórico: atacantes están explorando internet activamente buscando instancias sin parche.

La plataforma GitLab —utilizada por más del 50% de las empresas Fortune 100 y con 30 millones de usuarios registrados— quedó expuesta a un vector que combina falta de enforcement de autenticación con una restricción insuficiente de rutas en la API de commits. El impacto no se limita a leer un archivo cualquiera: en arquitecturas DevSecOps modernas, un repositorio GitLab comprometido es una cadena de suministro entera. Los secretos que almacena alimentan pipelines de AWS, credenciales de Kubernetes, tokens de despliegue en Azure y configuraciones de VPN corporativa.

Qué ocurrió

GitLab publicó el parche el jueves en las versiones Community Edition (CE) 19.3.2, Enterprise Edition (EE) 19.2.6 y 19.1, corrigiendo dos defectos concurrentes: la ausencia de validación de autenticación en el endpoint de commits y una delimitación de rutas inadecuada que permite path traversal. El vendor no etiquetó la vulnerabilidad como «activamente explotada» en su advisory inicial, lo cual generó una ventana de exposición de aproximadamente 24 horas.

Esa ventana la aprovechó watchTowr Labs. Su equipo de inteligencia publicó observaciones de probes en internet contra servidores GitLab sin actualizar, especificando que la explotación requiere un único request HTTP. La firma advirtió que, basándose en el historial de vulnerabilidades críticas de GitLab, la transición de «probing» a «explotación indiscriminada» suele ser inmediata. Horas después, CISA incorporó CVE-2026-85706 al catálogo KEV (Known Exploited Vulnerabilities) y activó la Binding Operational Directive BOD 26-04, que otorga a las agencias federales del FCEB un plazo de tres días para aplicar el remediation.

Impacto para DevOps / Infraestructura / Cloud / Seguridad

El alcance de este flaw es desproporcionado respecto a la complejidad del exploit. Un atacante no autenticado, con acceso de red al puerto 80/443 de una instancia GitLab, puede leer archivos arbitrarios del filesystem del servidor. En deployments típicos, eso incluye /etc/gitlab/gitlab-secrets.json, que contiene las claves de cifrado de la base de datos, los secretos de GitLab Pages, tokens de OAuth y configuraciones de integración con proveedores cloud.

Para equipos que corren GitLab en AWS EC2 o EKS, la extracción de secretos habilita movimiento lateral hacia buckets S3, instancias RDS, clusters EKS con IAM roles adjuntos, y configuraciones de VPN (OpenVPN, WireGuard) que residen en el mismo host o en subredes internas. Un pipeline de GitLab CI/CD comprometido puede modificar .gitlab-ci.yml para inyectar comandos maliciosos que se ejecuten con privilegios del runner, alcanzando entornos de producción en horas.

Cuantificando: CISA ha marcado cuatro vulnerabilidades de GitLab como activamente explotadas desde noviembre de 2021, incluyendo CVE-2021-22175 y CVE-2021-39935 en febrero de este año. En enero de 2026, GitLab ya había parcheado un bypass de 2FA de alta severidad que permitía a un atacante con el account ID de una víctima eludir la autenticación de dos factores. El patrón es consistente: GitLab acumula CVEs críticos a un ritmo que exige automatización del patching, no ciclos trimestrales.

Detalles técnicos

Componente afectado: Repository Commits API en GitLab CE/EE.
Vectores de ataque combinados:

  • Missing Authentication Enforcement: el endpoint /api/v4/projects/{id}/repository/commits/ no valida correctamente la autenticación del solicitante antes de procesar la operación.
  • Improper Path Confinement: el parámetro file.path no se restringe al directorio raíz del repositorio, permitiendo secuencias ../ o rutas absolutas que escapan del sandbox.

Indicador de compromiso en logs:

POST /api/v4/projects/{project_id}/repository/commits/ HTTP/1.1
Content-Type: application/json

{
«file_path»: «../../../../etc/gitlab/gitlab-secrets.json»,
«branch»: «main»,
«commit_message»: «x»,
«actions»: [{«action»: «create», «file_path»: «../../../.ssh/id_rsa», «content»: «x»}]
}

Comando para detectar intentos de explotación en logs de Nginx/GitLab:

grep -E «POST /api/v4/projects/[0-9]+/repository/commits/» /var/log/gitlab/nginx/gitlab_access.log \
| grep -E «file.path.*(\.\./|/etc/|/home/|/root/)»

Versiones vulnerables: GitLab CE/EE anteriores a 19.3.2, 19.2.6 y 19.1.
CVSS: Severidad máxima (10.0) según la clasificación de CISA y el vendor.
Requisito del atacante: Ninguno. No autenticado, acceso de red al puerto del servicio.

Qué deberían hacer los administradores y equipos técnicos

Inmediatamente (0-24 horas):

  • Verificar la versión instalada: gitlab-rake gitlab:env:info. Si la instancia corre una versión anterior a 19.3.2 (CE) o 19.2.6 (EE), aplicar el parche con sudo gitlab-ctl reconfigure tras la actualización del paquete. En deployments Docker, actualizar la imagen gitlab/gitlab-ce o gitlab/gitlab-ee al tag correspondiente.
  • Revisar logs de acceso buscando el patrón de explotación descrito arriba. Si se encuentran requests sospechosos, rotar inmediatamente todos los secretos almacenados en la instancia: tokens de API, claves SSH, gitlab-secrets.json, credenciales de integraciones cloud y configuraciones de runners.
  • Restringir acceso a GitLab a redes internas o mediante VPN corporativa. Si la instancia está expuesta a internet por necesidad, implementar WAF rules que bloqueen requests a /api/v4/projects/*/repository/commits/ que contengan ../ o rutas absolutas en el body.
  • Corto plazo (1-7 días):

  • Auditar pipelines de CI/CD: revisar commits recientes en repositorios críticos buscando modificaciones a .gitlab-ci.yml, scripts de deploy o archivos de configuración de infraestructura como código (Terraform, CloudFormation, Helm charts).
  • Rotar credenciales de AWS (access keys, IAM roles adjuntos a runners), tokens de Kubernetes ServiceAccount, certificados de VPN y secretos de Azure/GCP que estén referenciados en GitLab CI/CD variables.
  • Implementar scanning automatizado de KEV Catalog contra el inventario de software. Herramientas como Trivy, Grype o el scanner integrado de AWS Inspector permiten correlar CVEs activos con instancias en producción.
  • Mediano plazo:

  • Establecer un SLA de patching para GitLab Self-Managed inferior a 48 horas para vulnerabilidades de severidad crítica. Automatizar la aplicación de parches con Ansible o Terraform, con rollback planificado.
  • Segregar GitLab de redes de producción. Los runners no deberían compartir red con bases de datos o servicios financieros. Aplicar principio de mínimo privilegio a las credenciales que consume CI/CD.
  • Conclusión

    CVE-2026-85706 no es un evento aislado sino la confirmación de un patrón: GitLab, por su posición como columna vertebral de la cadena de suministro de software, acumula CVEs que pasan de advisory a explotación activa en menos de 72 horas. La combinación de un vector trivial (un solo request HTTP sin autenticación) con el valor de lo que se puede extraer (secretos de cloud, claves SSH, configuraciones de VPN) convierte cada instancia sin parche en un objetivo de alto retorno para grupos de ransomware y actores estatales.

    Para equipos de infraestructura y seguridad, la lección operativa es clara: GitLab Self-Managed no puede mantenerse en un ciclo de actualización trimestral. La automatización del patching, la monitorización de logs con reglas específicas y la rotación preventiva de secretos son requisitos mínimos, no recomendaciones opcionales.

    Fuentes

    • https://www.bleepingcomputer.com/news/security/cisa-hackers-now-exploit-max-severity-gitlab-flaw-in-attacks/

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *