Producto · CI/CD

Tus pipelines son código.Los leemos como tales.

Un escáner CI/CD dedicado. Análisis estático sobre los archivos de workflow en tu repo: workflow injection, actions sin pinear, tokens con privilegios excesivos, drift de OIDC. Detectado antes de que ningún runner coja el job.

Reserva una demo de 20 min
Qué caza el escáner

Seis clases de fallos en pipeline-as-code, leídos del archivo, antes de que corra ningún runner.

Nuestros escáneres parsean tus configuraciones de pipeline a un AST y un grafo de dataflow, después corren rule packs propios informados por OpenSSF Secure Workflows, los playbooks de StepSecurity y nuestra propia investigación sobre incidentes de envenenamiento reales. Los findings van al dashboard unificado junto a SAST, SCA, IaC, Secretos y Container.

Superficie de revisión de pull request con una línea de YAML de workflow anotada como sink contaminado, finding mostrado inline junto al paso problemático

Workflow injection (CWE-77 / 78)

Cada vez que interpolas ${{ github.event.* }}, nombres de rama, títulos de PR o cuerpos de issue en un bloque `run:`, estás haciendo shell-injection sobre tu propio pipeline. El escáner contamina cada input no confiable y lo sigue por cada paso hasta que aterriza en un shell, incluso a través de composite actions.

Cuadrícula de ecosistemas de fuentes de actions (GitHub, GitLab, Docker, Jenkins) cruzados para publishers sin pinear y no confiables

Actions sin pinear y no confiables

@v3, @main, @latest, cada ref flotante es un futuro incidente de cadena de suministro. El escáner marca cada action no pineada a un SHA completo, cada action de un publisher no verificado, y cruza con el feed de actions maliciosas.

Tokens con privilegios excesivos

Los scopes por defecto de GITHUB_TOKEN son `write` para casi todo. Detectamos `permissions:` sin configurar, scopes amplios que no usas y recomendamos el conjunto mínimo por job.

Misconfiguraciones de confianza OIDC

Identidad federada AWS, Azure y GCP desde GitHub, GitLab y CircleCI. Cazamos patrones `sub` excesivamente amplios, checks de audience ausentes y políticas de confianza que cualquier fork puede asumir.

Patrones de fuga de secretos

`echo $SECRET`, secretos pasados como args posicionales, secretos logueados en artefactos, secretos cocidos en capas de contenedor. Detectados estáticamente, antes de que el runner emita una línea.

Envenenamiento de cache y artefactos

PRs no confiables escribiendo en caches que ramas protegidas leen. Reutilización de runners self-hosted sin aislamiento. Uploads de artefactos desde contextos no confiables. Toda la clase de CVEs de cache-poisoning posteriores a 2024.

Por qué un escáner estático

Caza la misconfig antes de que corra el runner.

La mayoría de los incidentes de pipeline son visibles en el YAML. Lo leemos como lo lee un atacante, estáticamente, con contexto completo de dataflow, para que el finding aterrice en la revisión de la PR, no en una retro post-incidente.

Pipelines como activo de primera clase

Los archivos de workflow reciben el mismo escrutinio que tu código de aplicación: parseo AST, propagación de taint, análisis source-to-sink. El modelo de amenazas es específico de pipelines: triggers no confiables, fuentes de actions, scopes de tokens, confianza OIDC, aislamiento de runners.

GitHub Actions, GitLab CI, Jenkinsfile

Parsers de primera clase para los dialectos CI que mueven la mayoría de los pipelines hoy, incluyendo reusable workflows, cadenas `include:` de GitLab y Jenkinsfile (declarativo y scripted Groovy). Nuevos dialectos bajo demanda.

Los findings fluyen a la PR

Cada finding aterriza como un comentario inline en la línea YAML problemática, misma superficie que SAST. Sin dashboard nuevo que aprender, sin cola de triaje separada, sin paso de runner privilegiado que instalar.

Cómo corre el escáner

Conecta el repo, el resto es automático.

Conecta GitHub o GitLab. Nuestros escáneres tiran los archivos de pipeline y corren en cada push (o bajo demanda). Nada que instalar en tu CI, sin paso de runner privilegiado. Los findings van al dashboard unificado y a la revisión de tu PR.

Ver todas las integraciones
FAQ

Preguntas frecuentes sobre el escáner CI/CD.

¿Escaneas mis archivos de pipeline, no como paso dentro de mi pipeline?

Correcto. Conecta el repo una vez. Nuestros escáneres leen .github/workflows, .gitlab-ci.yml, Jenkinsfile y el resto directamente, después reportan findings como comentarios inline en la línea problemática y en el dashboard unificado. Sin paso que añadir a tu pipeline, sin runner privilegiado que instalar.

¿Qué formatos de archivos de pipeline parseáis?

Workflows de GitHub Actions (incluyendo composite y reusable workflows), YAML de GitLab CI (incluyendo cadenas `include:`) y Jenkinsfile (declarativo y scripted Groovy). Las definiciones de action (action.yml más wrappers Dockerfile-action) también se leen, así que se rastrean los flujos de taint cross-action. Otros dialectos se añaden bajo demanda del cliente.

¿Cómo encontráis workflow injection si solo se dispara con payloads de eventos concretos?

No necesitamos el payload. Contaminamos cada valor que viene de `github.event.*`, `inputs.*`, `head_ref`, `pull_request.title/body`, refs de rama y tag desde un fork, y lo seguimos a través de `env:`, `with:`, valores de output y fronteras de composite-action. Si el valor contaminado llega a un bloque `run:`, un `eval` en actions de JavaScript o un comando con sustitución de shell, eso es un finding, independientemente de si te han explotado ya o no.

¿Cazáis GitHub Actions maliciosas o typo-squatted?

Sí. Cada entrada `uses:` se cruza con el feed de actions maliciosas de OpenSSF, la lista de verified-publishers y nuestras propias heurísticas de typo-squat sobre nombres de actions. Los tags sin pinear se marcan por separado, porque incluso una action legítima se convierte en riesgo de cadena de suministro si no la pineas a un SHA.

¿Y los secretos en archivos de workflow?

Cualquier cosa que coincida con los patrones de entropía y de proveedor de nuestro rule pack de Detección de Secretos también se marca en archivos CI/CD. También detectamos secretos pasados como args posicionales de CLI (visibles en `ps`), secretos logueados via `echo` y secretos cocidos en inputs de reusable workflows. Los findings se deduplican con el escáner de secretos para que no los recibas dos veces.

¿Podéis escanear configuraciones de runners self-hosted?

Sí. Parseamos directivas `runs-on:`, detectamos runners con estado de filesystem compartido entre PRs no confiables, marcamos guards tipo `actions/cleanup` ausentes y avisamos sobre jobs que escalan a root o montan el socket de Docker.

Empieza

Instalación gratis en tu IDE. Primer escaneo en 5 minutos.

Sin tarjeta. Sin llamada de configuración. Elige tu agente, pega el comando, y Cybe aplica tus reglas desde el siguiente prompt.

Región
claude mcp add cybedefend --transport http https://mcp-eu.cybedefend.com/mcp

MCP alojado, sin instalación. Solo registra la URL en tu agente.

Reservar una demo de 20 min