Tus pipelines son código. Por eso los leemos.
Análisis estático de tus archivos de workflow: inyecciones, actions sin fijar, tokens con demasiados privilegios y deriva de OIDC.
Seis dialectos de CI alimentan un solo parser: GitHub Actions, GitLab CI, Bitbucket, Azure DevOps, Jenkins, CircleCI.El commit a3f9c2e toca release.yml. Dos ejecuciones salen del build: #4821 y #4822.En la barrera, release.yml se lee como lo leería un atacante: trigger, permisos, cada uses: y run:.#4821 queda bloqueada: pull_request_target con contents: write y una action sin fijar nunca llegan al job de deploy.#4822 sale a prod-eu: SHA fijado, token de solo lectura, el título de la PR fuera del shell.
Seis fallos,
leídos en el archivo.
Convertimos tus workflows en un AST y un grafo de flujo de datos, y les aplicamos nuestros propios packs de reglas.
Por defecto, los permisos de GITHUB_TOKEN son write para casi todo. Detectamos permissions: sin definir y permisos amplios que no usas, y recomendamos el mínimo necesario para cada job.
PR no confiables que escriben en cachés que leen las ramas protegidas. Runners autoalojados reutilizados sin aislamiento.
@v3, @main, @latest: cada referencia flotante es un futuro incidente de supply chain.
Identidad federada con AWS, Azure y GCP desde GitHub, GitLab y CircleCI.
Cada vez que interpolas ${{ github.event.* }}, nombres de rama, títulos de PR o el texto de las issues en un bloque run:, abres la puerta a una inyección de shell en tu propio pipeline.
echo $SECRET, secretos pasados como argumentos posicionales, secretos volcados en artefactos, secretos incrustados en capas de contenedor.
Pasa el cursor por una línea marcada para ver su corrección.Toca una nota para ver su corrección.
Caza la mala configuración
antes de que corra el runner.
La mayoría de los incidentes de pipeline ya se ven en el YAML. Lo leemos como lo leería un atacante.
.github/workflows/release.yml:12sourcemessage: ${{ github.event.pull_request.title }}.github/workflows/notify.yml:4hopmessage: { type: string }.github/workflows/notify.yml:10sinkrun: echo "${{ inputs.message }}"
notify.yml:10pull_request.title reaches run: through inputs.message.
Los archivos de workflow se examinan con el mismo rigor que el código de tu aplicación: análisis del AST, propagación de taint y análisis de source a sink.
Conecta el repo,
el resto es automático.
Conecta GitHub o GitLab. Leemos tus archivos de pipeline en cada push, o cuando lo pidas.
.github/workflows/ci.ymlon: pushjobs: test: runs-on: ubuntu-24.04 steps: - run: npm test
Nada que añadir: este archivo se queda tal cual.
.gitlab-ci.ymlNada que añadir: este archivo se queda tal cual.
bitbucket-pipelines.ymlNada que añadir: este archivo se queda tal cual.
azure-pipelines.ymlNada que añadir: este archivo se queda tal cual.
JenkinsfileNada que añadir: este archivo se queda tal cual.
.circleci/config.ymlNada que añadir: este archivo se queda tal cual.
Cómo funciona,
en detalle.
La documentación explica la instalación, la configuración y cada opción.
Leer la documentaciónen inglésCode Scanning / CI/CD Integrations
GitHub Action Setup for Local Code Scanning
La GitHub Action oficial y un workflow listo para pegar, además de guías para otras siete plataformas de CI.
Preguntas frecuentes sobre el escáner CI/CD.
¿CybeDefend analiza mis archivos de pipeline sin ser un paso dentro del pipeline?
Exacto. Conectas el repositorio una sola vez. Nuestros escáneres leen directamente .github/workflows, .gitlab-ci.yml, Jenkinsfile y el resto, y publican los hallazgos como comentarios en la línea afectada y en el dashboard unificado. No hay que añadir ningún paso a tu pipeline ni instalar un runner privilegiado.
¿Qué formatos de pipeline admite CybeDefend?
Workflows de GitHub Actions (incluidas las actions compuestas y los workflows reutilizables), YAML de GitLab CI (incluidas las cadenas `include:`) y Jenkinsfile (Groovy declarativo y scripted). También leemos las definiciones de actions (action.yml y los wrappers de Dockerfile), así que seguimos los flujos de taint entre actions. Añadimos otros dialectos a petición de los clientes.
¿Cómo se detecta una inyección en workflows si solo se dispara con ciertos payloads de eventos?
No necesitamos el payload. Tratamos como no confiable cada valor que llega de `github.event.*`, `inputs.*`, `head_ref`, `pull_request.title/body` y de las refs de rama y de tag de un fork, y lo seguimos a través de `env:`, `with:`, los valores de output y los límites de las actions compuestas. Si ese valor llega a un bloque `run:`, a un `eval` en una action de JavaScript o a un comando con sustitución de shell, es un hallazgo, te hayan atacado ya o no.
¿Detecta CybeDefend GitHub Actions maliciosas o con typosquatting?
Sí. Cada entrada `uses:` se cruza con el feed de actions maliciosas de OpenSSF, la lista de publishers verificados y nuestras propias heurísticas de typosquatting sobre los nombres de las actions. Los tags sin fijar se señalan aparte, porque hasta una action legítima se convierte en un riesgo de supply chain si no la fijas a un SHA.
¿Y los secretos en archivos de workflow?
Todo lo que coincide con los patrones de entropía y de proveedor de nuestro pack de reglas de detección de secretos también se señala en los archivos de CI/CD. Además detectamos secretos pasados como argumentos posicionales de la CLI (visibles en `ps`), secretos escritos en los logs con `echo` y secretos incrustados en los inputs de workflows reutilizables. Los hallazgos se deduplican con los del escáner de secretos para que no te lleguen dos veces.
¿Se pueden analizar las configuraciones de runners autoalojados?
Sí. Analizamos las directivas `runs-on:`, detectamos runners que comparten el estado del sistema de archivos entre PR no confiables, señalamos la ausencia de controles del tipo `actions/cleanup` y avisamos de los jobs que escalan a root o montan el socket de Docker.
Instala VibeDefend en 5 segundos.
Un solo comando conecta a CybeDefend todos los agentes de programación de tu máquina: tus reglas de negocio, tus marcos normativos y protecciones que bloquean las acciones destructivas antes de que se ejecuten.
npx -y @cybedefend/vibedefend@latest installClaude Code
CursorOpenAI Codex
WindsurfVS Code Copilot