¿QUÉ ES Y POR QUÉ ES CRUCIAL?
El software moderno se construye hasta en un 80-90% sobre librerías de código abierto (npm, Maven, PyPI, Go modules). El análisis de componentes de software (SCA) inspecciona el árbol de dependencias -- directas y transitivas -- para detectar versiones con vulnerabilidades conocidas (CVEs) antes de llegar a producción. Esta etapa además incorpora dos prácticas clave de Supply Chain Security: generar un SBOM (inventario exacto de todo lo que compone el artefacto) y firmar criptográficamente ese artefacto para garantizar que lo que se despliega es exactamente lo que se construyó, sin manipulación intermedia.
⚠️ RIESGOS Y AMENAZAS EN ESTA ETAPA:
- Ejecución remota de código (RCE) como Log4Shell (CVE-2021-44228) en librerías desactualizadas.
- Ataques a la cadena de suministro por typosquatting o secuestro de cuentas de mantenedores (ej. el backdoor en xz-utils, CVE-2024-3094).
- Imposibilidad de responder "¿usamos la librería vulnerable X?" en minutos ante un incidente crítico, por no tener un SBOM actualizado.
- Artefactos de build manipulados en tránsito o en el registry por no verificar firmas ni procedencia (provenance).
🧰 CATÁLOGO DE HERRAMIENTAS DESTACADAS
OWASP Dependency-Check
Open Source (Apache-2.0)Analizador de dependencias del proyecto OWASP que compara componentes Java, .NET, Node.js, Python y Ruby contra la base de datos NVD (National Vulnerability Database) y OSS Index.
Trivy (SCA Mode)
Open Source (Apache-2.0)Escáner integral y extremadamente veloz de Aqua Security para dependencias de lenguaje, paquetes de SO y manifiestos de proyecto; también puede generar SBOM en formato CycloneDX o SPDX en la misma corrida.
Snyk Open Source
Freemium (requiere cuenta Snyk) / EnterprisePlataforma de seguridad que identifica vulnerabilidades y problemas de licenciamiento en paquetes de terceros, y puede generar Pull Requests automáticos de corrección (fix PRs).
OSV-Scanner
Open Source (Apache-2.0)Herramienta desarrollada por Google que consulta la base de datos abierta y federada OSV.dev (alimentada por GitHub Security Advisories, PyPA, Go, etc.) para detectar vulnerabilidades en archivos lock de dependencias.
Syft (SBOM)
Open Source (Apache-2.0)Genera un SBOM (Software Bill of Materials) completo -- en formato CycloneDX, SPDX o Syft JSON -- a partir de código fuente, un directorio o una imagen de contenedor. Es el complemento natural de Grype para vulnerabilidades.
Cosign (Sigstore)
Open Source (Apache-2.0)Parte del proyecto Sigstore (OpenSSF): firma y verifica criptográficamente imágenes de contenedor y artefactos de build, permitiendo comprobar en el pipeline de despliegue que el artefacto no fue alterado y proviene de un build confiable (alineado con el nivel SLSA 2+).
🔧 INTEGRACIÓN EN PIPELINES DE CI/CD
Ejemplos listos para copiar y adaptar. El objetivo es que el job falle (exit code ≠ 0) y bloquee el merge/deploy cuando aparece un hallazgo de severidad alta -- ese es el "gate" real de DevSecOps.
name: sca-supply-chain
on: [push, pull_request]
jobs:
sca-scan:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Trivy - Vulnerability scan + SBOM
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
format: 'cyclonedx'
output: 'sbom.cdx.json'
exit-code: '1'
severity: 'CRITICAL,HIGH'
- name: Upload SBOM como artifact
uses: actions/upload-artifact@v4
with:
name: sbom
path: sbom.cdx.json
trigger:
- main
pr:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self
- script: |
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
trivy fs --scanners vuln --severity CRITICAL,HIGH --exit-code 1 .
trivy fs --format cyclonedx --output sbom.cdx.json .
displayName: 'Trivy - SCA scan + SBOM (CycloneDX)'
- publish: sbom.cdx.json
artifact: sbom
displayName: 'Publicar SBOM como artifact del pipeline'
- Bloquear builds que contengan vulnerabilidades con severidad CRÍTICA o ALTA sin excepción justificada.
- Mantener archivos lock (package-lock.json, pom.xml, go.sum) actualizados y auditados; usar bots como Dependabot o Renovate.
- Generar un SBOM en cada build de release y conservarlo -- es lo que permite responder rápido ante el próximo Log4Shell.
- Firmar artefactos de producción (cosign) y validar la firma antes de desplegar (política de admission control).