Saltearse al contenido

Seguridad en CI/CD

El pipeline de CI/CD tiene acceso al código, a los secretos de despliegue y a producción: comprometerlo es comprometer todo lo que construye y despliega. SolarWinds mostró que atacar el build es más rentable que atacar un endpoint. Esta ficha cubre cómo asegurar la cadena de suministro de software.

- acceso a CÓDIGO + SECRETOS + capacidad de DESPLEGAR a producción
- comprometer el build = inyectar en TODOS los artefactos (SolarWinds)
- superficie: runners, plugins, dependencias de pipeline, tokens, webhooks
Poisoned pipeline execution (PPE) inyectar en el build via PR/config malicioso
-> aislar runners, revisar cambios en el pipeline, no ejecutar PRs no confiables con secretos
Robo de secretos del CI tokens con demasiado alcance
-> OIDC (sin secretos de larga vida), mínimo privilegio, secretos efímeros (dso-secrets)
Dependencias del pipeline actions/plugins de terceros comprometidos
-> fijar por HASH (no por tag mutable), allowlist de actions
Compromiso de runner/agente runner compartido o persistente
-> runners efímeros y aislados por job
- branch protection: revisión obligatoria, no push directo a main, status checks
- firma de commits (GPG/Sigstore) y verificación
- CODEOWNERS para rutas sensibles (pipeline, infra)
- 2FA/MFA obligatorio y mínimo privilegio en la plataforma (GitHub/GitLab)
SLSA marco de niveles de integridad de la cadena de suministro
Firma Sigstore/cosign: firmar artefactos e imágenes -> verificar en despliegue
Provenance atestación de CÓMO y DÓNDE se construyó el artefacto
Admisión el clúster solo admite imágenes firmadas/verificadas (dso-k8ssec)
- SAST (dso-sast), SCA+SBOM (dso-deps), secretos (dso-secrets), IaC scan (dso-iac)
- fallar el build ante hallazgos críticos; resultados en el PR
- escaneo de imágenes de contenedor antes de publicar (dso-containers)
  • Tratar el pipeline como producción: mínimo privilegio, runners efímeros, secretos OIDC/efímeros.
  • Fijar actions/plugins por hash y aplicar branch protection + firma de commits.
  • Firmar y verificar artefactos (Sigstore/SLSA) y admitir solo imágenes verificadas.
  • Integrar todos los gates (SAST/SCA/secrets/IaC/imagen) y proteger el acceso a la plataforma.
  • SolarWinds (2020): inyección en el proceso de build → backdoor distribuido a 18.000 clientes.
  • Codecov (2021): script de CI comprometido filtró secretos de clientes.
  • tj-actions/changed-files y otros incidentes de GitHub Actions por tags mutables → fijar por hash.
  • Branch protection, revisión obligatoria, firma de commits
  • Secretos OIDC/efímeros, mínimo privilegio, nada de larga vida
  • Actions/plugins fijados por hash + allowlist
  • Runners efímeros y aislados; PRs no confiables sin secretos
  • Gates de SAST/SCA/secrets/IaC/imagen en el pipeline
  • Firma y verificación de artefactos (Sigstore/SLSA)
  • Admisión solo de imágenes firmadas (Hardening de Kubernetes)