Dependency-Track - Análisis continuo de SBOM
Dependency-Track (un proyecto insignia de OWASP) es una plataforma para gestión de riesgo de cadena de suministro de software continua. Su idea definitoria: en lugar de escanear tus dependencias una vez en tiempo de compilación, carga un SBOM de CycloneDX por proyecto y la plataforma re-evalúa continuamente esos componentes conforme se divulgan nuevas vulnerabilidades. Cuando se publica una CVE, inmediatamente sabes qué aplicaciones contienen el componente afectado — sin recompilar o rescanear nada.
Despliegue
| Método | Comando |
|---|
| Docker Compose | curl -LO https://dependencytrack.org/docker-compose.yml && docker compose up -d |
| Contenedor (API) | docker run -p 8081:8080 dependencytrack/apiserver |
| Frontend | Contenedor dependencytrack/frontend (UI por defecto en 8080) |
| Kubernetes | Gráfico Helm disponible |
| Requisitos | ~4GB+ RAM; PostgreSQL para producción |
Conceptos principales
| Término | Significado |
|---|
| Proyecto | Una aplicación/servicio que rastrear |
| Componente | Una dependencia dentro de un proyecto |
| SBOM | Lista de materiales de CycloneDX que cargas |
| Vulnerabilidad | Una CVE/aviso que afecta un componente |
| Política | Reglas que cierran riesgo (licencia, severidad, edad) |
| Portafolio | Todos los proyectos, agregados |
Carga de un SBOM
Genera con Syft o herramientas cyclonedx-*, luego carga vía API:
# Genera un SBOM de CycloneDX
syft dir:. -o cyclonedx-json > bom.json
# Carga a Dependency-Track
curl -X POST "http://localhost:8081/api/v1/bom" \
-H "X-Api-Key: $DT_API_KEY" \
-F "project=$PROJECT_UUID" \
-F "bom=@bom.json"
| Punto final | Propósito |
|---|
POST /api/v1/bom | Carga un SBOM |
GET /api/v1/project | Lista proyectos |
PUT /api/v1/project | Crea un proyecto |
GET /api/v1/vulnerability/project/{uuid} | Vulnerabilidades para un proyecto |
GET /api/v1/metrics/project/{uuid}/current | Métricas de riesgo actuales |
Fuentes de inteligencia de vulnerabilidades
| Fuente | Proporciona |
|---|
| NVD | Datos de CVE |
| Avisos de GitHub | Avisos específicos del ecosistema |
| OSV | Base de datos de vulnerabilidades de código abierto |
| VulnDB | Comercial (opcional) |
| Interno | Tus propios avisos |
La plataforma refleja estos flujos y re-analiza cada componente almacenado contra ellos en un cronograma.
Motor de políticas
| Condición de política | Ejemplo |
|---|
| Severidad | Falla si hay vulnerabilidad CRITICAL |
| Licencia | Bloquea GPL en productos propietarios |
| Edad del componente | Marca dependencias no mantenidas por N años |
| Coordenadas | Prohíbe un paquete/versión específica |
| CWE | Marca clases de debilidad específicas |
Las políticas producen violaciones que aparecen junto a vulnerabilidades, así que riesgo de licencia e higiene se rastrean en el mismo lugar.
Integración en CI/CD
# En un pipeline: build → generar SBOM → cargar → cerrar
syft dir:. -o cyclonedx-json > bom.json
curl -X POST "$DT_URL/api/v1/bom" -H "X-Api-Key: $DT_API_KEY" \
-F "project=$PROJECT_UUID" -F "bom=@bom.json"
# Sondea el resultado del análisis y falla en violaciones de política
| Integración | Nota |
|---|
| Jenkins/GitHub Actions | Complementos/acciones oficiales disponibles |
| Webhooks | Notifica Slack/Teams/Jira en nuevos hallazgos |
| VEX | Registra decisiones de explotabilidad (no afectado, etc.) |
Clasificación y VEX
| Acción | Significado |
|---|
| No afectado | La ruta de código vulnerable no es alcanzable |
| Falso positivo | La detección es incorrecta |
| Resuelto | Arreglado en este proyecto |
| Suprimido | Riesgo aceptado con justificación |
Registrar estos como VEX mantiene el ruido bajo y documenta decisiones para auditores.
Dependency-Track vs escáneres puntuales
| Aspecto | Dependency-Track | Grype/Trivy | Socket |
|---|
| Modelo | Plataforma SBOM continua | Escaneo puntual | Detección de malware de comportamiento |
| Re-evaluación | Automática en CVEs nuevas | Solo cuando reejecutas | En cambios de dependencia |
| Vista de portafolio | Sí (todos los proyectos) | Por escaneo | Por PR |
| Mejor para | Riesgo de cadena de suministro a nivel de organización | Escaneo CI | Detección de paquete malicioso |
Aliméntalo con SBOMs de Syft; empareja con Grype para escaneo en tiempo de compilación y Socket para detección de paquete malicioso.
Recursos