Parte: 11 — DevSecOps y seguridad del SDLC · Fuente: Securing DevOps (Julien Vehent) y OWASP Top 10 A06:2021 (Vulnerable and Outdated Components) ⏱️ Duración estimada: 100 min · Nivel: Intermedio
Aprender Software Composition Analysis (SCA): identificar todas las dependencias de terceros de un proyecto, detectar cuáles tienen vulnerabilidades conocidas (CVE), evaluar el riesgo real de licencias y componentes, y automatizar todo en el pipeline. El 70–90% del código de una app moderna es de terceros; ese es tu verdadero perímetro de ataque. Usaremos OWASP Dependency-Check y Trivy.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Dependencias directas vs transitivas | El riesgo suele esconderse en las transitivas |
| 2 | CVE, CVSS, EPSS y KEV | Priorizar por explotabilidad, no solo por severidad |
| 3 | Bases de datos: NVD, GHSA, OSV | De dónde vienen los avisos |
| 4 | Dependency-Check vs Trivy | Herramientas y sus fortalezas |
| 5 | Lockfiles y reproducibilidad | Escanear lo que realmente se instala |
| 6 | Actualización automatizada | Dependabot/Renovate para no acumular deuda |
| 7 | Riesgos de licencia y typosquatting | No todo riesgo es un CVE |
Instalación y uso básico:
# Trivy (filesystem/dependencias):
trivy fs --scanners vuln ./mi-proyecto
# OWASP Dependency-Check (CLI):
dependency-check --project miapp --scan ./ --format HTML --out reporte/
# osv-scanner sobre un lockfile:
osv-scanner --lockfile package-lock.json
🧪 Laboratorio ejecutable del programa:
devsecops-pipeline— es la capa 1 del lab, con el ejercicio de cobertura: dos dependencias sin versión fijada que el escáner no puede resolver.
npm ls --all o pip list + pipdeptree). Observa cuántas son transitivas.trivy fs --scanners vuln --severity HIGH,CRITICAL ./mi-proyecto
# Falla el build solo con CRITICAL explotables:
trivy fs --exit-code 1 --severity CRITICAL --scanners vuln ./
dependabot.yml que abra PRs semanales para el ecosistema del proyecto:version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule: { interval: "weekly" }
open-pull-requests-limit: 5
trivy fs --scanners license ./ y localiza dependencias con licencias copyleft incompatibles con tu producto.Implementa un flujo de SCA en un repositorio con gate de CI y actualización automatizada.
Criterio de aceptación: (a) el pipeline escanea dependencias (Trivy o Dependency-Check) en cada PR; (b) el gate falla solo por vulnerabilidades priorizadas por riesgo (no todo CVSS alto); (c) existe configuración de Dependabot/Renovate activa; y (d) se entrega un breve informe que prioriza los 5 hallazgos principales usando CVSS + EPSS + KEV con justificación.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Cientos de CVE y el equipo se paraliza | Priorizas por CVSS crudo. Filtra por EPSS/KEV y explotabilidad, empieza por lo alcanzable. |
| Un CVE reportado no aplica a tu uso | La función vulnerable no se usa. Documenta como no explotable (VEX) y suprime. |
| El escaneo no ve transitivas | Escaneas manifests, no el lockfile resuelto. Escanea el lockfile (package-lock.json, poetry.lock). |
| Dependabot abre 50 PRs y nadie los revisa | Sin límite ni agrupación. Usa open-pull-requests-limit y grouping. |
| Actualización rompe la app | Cambio breaking. Ten tests en CI que corran antes de mergear el PR de update. |
❓ ¿SCA y SBOM son lo mismo? No. SCA es el proceso de analizar componentes por vulnerabilidades; el SBOM (clase 246) es el inventario resultante de componentes. SCA suele producir o consumir un SBOM.
❓ ¿Debo actualizar toda dependencia con CVE inmediatamente? No ciegamente. Prioriza por explotabilidad (KEV/EPSS), exposición y si tu código usa la parte vulnerable. Un CVE crítico en una función que no llamas puede esperar.
❓ ¿Por qué dos escáneres dan resultados distintos? Usan bases de datos y heurísticas de matching diferentes (NVD, GHSA, OSV) y distinta cobertura por ecosistema. Combinar dos mejora la cobertura.
❓ ¿Cómo me protejo de typosquatting? Fija versiones con lockfile y hashes, revisa nombres de paquetes nuevos, usa registries internos con allowlist y herramientas que detecten paquetes recién publicados o de baja reputación.
Clase 239 — DAST: análisis dinámico de aplicaciones