El modelo tradicional — escribir código, desplegar, y luego auditar seguridad — está obsoleto. En 2026, el coste global de los incidentes de seguridad supera los 10.5 billones de dólares anuales, y el 96% de los componentes open-source descargados contienen vulnerabilidades conocidas según Sonatype 2025. DevSecOps integra la seguridad en cada etapa del pipeline de entrega de software, donde corregir una vulnerabilidad cuesta 100x menos que en producción.
Este artículo sigue la guía de implementación del OWASP CI/CD Security Cheat Sheet y el NIST Secure Software Development Framework (SSDF), con ejemplos prácticos para GitHub Actions y GitLab CI.
1. Las 5 Etapas del Pipeline DevSecOps
Cada etapa del pipeline detecta una clase diferente de problemas. Ejecutar la misma herramienta en todas las etapas es redundante; el objetivo es cobertura completa con la mínima fricción en cada punto.
Código → Pre-commit → CI Build → CI/CD Tests → Release → Deploy → Monitor
(segundos) (minutos) (minutos) (minutos) (minutos) (continuo)
Etapa 1: Pre-commit — Seguridad en el Entorno del Desarrollador
Los hooks de pre-commit se ejecutan en el equipo del desarrollador antes de que el código llegue al repositorio. Detectan problemas en segundos, cuando el coste de corregirlos es mínimo.
Herramientas:
- Secret scanning: detectar tokens, claves API, contraseñas hardcodeadas (git-secrets, truffleHog, Gitleaks)
- Linting de seguridad ESLint/Semgrep: detectar patrones inseguros en el código antes del commit
- Pre-commit hooks: framework para gestionar hooks multiventana
# .pre-commit-config.yaml
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.18.0
hooks:
- id: gitleaks
- repo: https://github.com/returntocorp/semgrep
rev: v1.58.0
hooks:
- id: semgrep
args: ["--config=auto", "--error"]
Etapa 2: CI Build — Análisis en Pull Request
Se ejecuta en cada pull request. Es el punto donde se aplican los quality gates: PRs con hallazgos Critical o High no pueden mergearse.
SAST (Static Application Security Testing): Analiza el código fuente sin ejecutarlo.
| Herramienta | Tipo | Lenguajes | Ventaja |
|---|---|---|---|
| Semgrep | Open-source | 30+ | Reglas personalizables, resultados en PR |
| CodeQL | GitHub-native | 12 | Análisis semántico, integración nativa |
| SonarQube | Code quality + SAST | 30+ | Calidad de código + seguridad |
| Snyk Code | SAAS | 10+ | AI-powered, baja tasa de falsos positivos |
SCA (Software Composition Analysis): Escanea dependencias open-source en busca de CVEs conocidos:
# GitHub Actions — SCA con Trivy
- name: Escanear dependencias con Trivy
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'HIGH,CRITICAL'
SBOM (Software Bill of Materials): Generar un SBOM por cada build. Obligatorio para proveedores del gobierno de EE.UU. (Executive Order 14028) y requerido por la EU Cyber Resilience Act.
- name: Generar SBOM con syft
uses: anchore/sbom-action@v0
with:
path: ./
output-file: sbom.spdx.json
format: spdx-json
Etapa 3: Release — Seguridad en Artefactos
Antes de liberar un artefacto, verificar:
- Escaneo de imágenes Docker: Trivy, Grype o Snyk Container para vulnerabilidades en imágenes base y dependencias
- Firma de imágenes: Cosign (Sigstore) para firmar y verificar imágenes
- Verificación de SLSA: alcanzar SLSA Level 2+ garantiza integridad y procedencia del artefacto
# Firmar imagen con Cosign
- name: Firmar imagen Docker
env:
COSIGN_EXPERIMENTAL: 1
run: |
cosign sign --key env://COSIGN_PRIVATE_KEY \
${{ env.REGISTRY }}/app:${{ github.sha }}
Etapa 4: Deploy — Seguridad en Infraestructura
IaC Scanning (Infrastructure as Code): Escanear configuraciones de Terraform, CloudFormation, Kubernetes ante de desplegar:
| Herramienta | Propósito |
|---|---|
| Checkov | Escanea Terraform, CloudFormation, K8s, Helm, Dockerfile |
| tfsec (Trivy) | Escanea Terraform específicamente |
| KICS | Escanea IaC multiplataforma |
# GitHub Actions — Escaneo de IaC con Checkov
- name: Escanear Terraform con Checkov
uses: bridgecrewio/checkov-action@master
with:
directory: terraform/
framework: terraform
Hallazgos típicos que Checkov detecta:
- Buckets S3 sin cifrado
- Security groups con
0.0.0.0/0 - Contenedores ejecutándose como root
- Falta de resource limits en Kubernetes
Etapa 5: Operar y Monitorizar — Seguridad en Runtime
La única etapa que detecta lo que todo lo demás no pudo: vulnerabilidades zero-day divulgadas tras el último despliegue, certificados próximos a expirar, cambios de infraestructura fuera del pipeline, y configuration drift.
Herramientas:
- Runtime CVE scanning: Trivy en modo cliente-servidor para escaneo continuo de imágenes en producción
- Falco: runtime security para Kubernetes — detecta shells en contenedores, montajes de disco, conexiones salientes sospechosas
- WAF/WAAP: proteger APIs y aplicaciones en producción
- SIEM: correlación de logs de seguridad
2. Seguridad del Propio Pipeline CI/CD
El pipeline CI/CD es un objetivo de alto valor. Si un atacante compromete el pipeline, puede inyectar código malicioso en todos los artefactos que produce.
Secret Management
Nunca almacenar secretos en el código, en variables de entorno del CI, o en archivos de configuración. Usar un vault externo:
# GitHub Actions — usar secrets de GitHub + Azure Key Vault o AWS Secrets Manager
- name: Obtener secretos desde Azure Key Vault
uses: Azure/get-keyvault-secrets@v1
with:
keyvault: "kv-security-prod"
secrets: "API-KEY, DB-PASSWORD"
id: mySecret
Prácticas recomendadas:
- Rotar pipeline secrets cada 90 días (30 días para credenciales de producción)
- Usar secretos con ámbito por entorno (dev/staging/prod separados)
- Escanear artefactos de build para asegurar que ningún secreto se filtró en las capas de Docker
Protección del Pipeline
- Branch protection rules: requerir revisión de código, checks de seguridad y firma de commits
- Eliminar permisos por defecto: GitHub Actions debe usar
contents: readyissues: nonepor defecto - Pin actions a SHA: no usar tags mutables (
@v1) sino commits específicos (@a7f5a9e4) - Auditar cambios en la configuración del pipeline: cualquier cambio en
.github/workflows/debe requerir aprobación adicional
3. Métricas y Maturity Model
| Nivel | Descripción | Indicadores |
|---|---|---|
| Nivel 0 | No hay seguridad en el pipeline | Sin SAST, sin SCA, sin escaneo de imágenes |
| Nivel 1 | Escaneo básico en CI | SAST en PRs, SCA básico, secret scanning |
| Nivel 2 | Calidad de seguridad en CI/CD | Gates de seguridad (Critical/High bloquean PRs), SBOM generado |
| Nivel 3 | Seguridad integrada en todo el ciclo | Firma de artefactos, IaC scanning, runtime monitoring |
| Nivel 4 | DevSecOps maduro con SLSA Level 3+ | Verificación de procedencia, compliance automatizado, postura continua |
Métricas clave:
- Tiempo medio entre escaneo y corrección (MTTR para vulnerabilidades)
- Tasa de falsos positivos por herramienta
- Cobertura de escaneo (% de PRs con SAST/SCA ejecutado)
- Tiempo añadido al pipeline por etapa de seguridad
- SLSA level alcanzado por proyecto
4. Evitando Security Theater
El mayor riesgo en DevSecOps no es la falta de herramientas, sino el security theater: tener herramientas que producen alertas que nadie revisa.
Cómo evitarlo:
- Empezar con una herramienta y hacerla funcionar bien antes de añadir más
- Crear quality gates reales: Critical/High bloquean PRs, pero Medium/Low son informativos
- Hacer visibles y con fecha de expiración todas las excepciones
- Probar los gates trimestralmente: introducir una regresión de seguridad deliberadamente y verificar que el gate la detecta
Checklist de Seguridad en CI/CD
Pre-commit
- Secret scanning (gitleaks/truffleHog) en pre-commit hooks
- Linting de seguridad (Semgrep/ESLint) en pre-commit
CI Build (Pull Request)
- SAST ejecutado en cada PR (Semgrep/CodeQL)
- SCA ejecutado en cada PR (Trivy/Snyk)
- SBOM generado por build
- Quality gate: Critical/High bloquean merge
Release
- Imágenes Docker escaneadas (Trivy/Grype)
- Imágenes firmadas (Cosign)
- SLSA Level 2+ verificado
Deploy
- IaC scanning (Checkov/Trivy)
- Secretos desde vault externo
- Principio de mínimo privilegio en credenciales de CI
Monitorización
- Escaneo continuo de imágenes en producción
- Falco o similar para runtime security
- SIEM con alertas de seguridad del pipeline
- Prueba trimestral de regresión de seguridad
Conclusión
DevSecOps no es una herramienta que se compra — es un conjunto de prácticas que distribuye la responsabilidad de seguridad en cada etapa del pipeline. Las organizaciones que implementan correctamente las 5 etapas (pre-commit, CI build, release, deploy, monitor) reducen drásticamente la probabilidad de que una vulnerabilidad llegue a producción. El camino recomendado es empezar pequeño: secret scanning + SAST en PRs, establecer quality gates claros, y escalar gradualmente. Una organización con SLSA Level 2+, escaneo continuo y gates probados trimestralmente tiene una postura de seguridad en el pipeline significativamente mejor que la mayoría.
Artículos Relacionados
- Seguridad en Contenedores: Docker y Kubernetes — Hardening y runtime security para los artefactos desplegados por tu pipeline
- Supply Chain Attacks y Dependencias — Cómo proteger la cadena de suministro de software en CI/CD
- OWASP API Security Top 10 — Pruebas de seguridad automatizadas para APIs en tu pipeline
- Forense en la Nube: AWS, Azure y GCP — Investigación de incidentes cuando el pipeline ha sido comprometido