Skip to content

Dependency-Track - Continuous SBOM Analysis Cheatsheet

Dependency-Track - Continuous SBOM Analysis Cheatsheet

Dependency-Track (an OWASP flagship project) is a platform for continuous software supply chain risk management. Its defining idea: instead of scanning your dependencies once at build time, you upload a CycloneDX SBOM per project and the platform continuously re-evaluates those components as new vulnerabilities are disclosed. When a CVE drops, you immediately know which of your applications contain the affected component — without rebuilding or rescanning anything.

Deployment

MethodCommand
Docker Composecurl -LO https://dependencytrack.org/docker-compose.yml && docker compose up -d
Container (API)docker run -p 8081:8080 dependencytrack/apiserver
Frontenddependencytrack/frontend container (default UI on 8080)
KubernetesHelm chart available
Requirements~4GB+ RAM; PostgreSQL for production

Core Concepts

TermMeaning
ProjectAn application/service you track
ComponentA dependency within a project
SBOMCycloneDX bill of materials you upload
VulnerabilityA CVE/advisory affecting a component
PolicyRules that gate risk (license, severity, age)
PortfolioAll projects, aggregated

Uploading an SBOM

Generate with Syft or cyclonedx-* tooling, then upload via API:

# Generate a CycloneDX SBOM
syft dir:. -o cyclonedx-json > bom.json

# Upload to 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"
EndpointPurpose
POST /api/v1/bomUpload an SBOM
GET /api/v1/projectList projects
PUT /api/v1/projectCreate a project
GET /api/v1/vulnerability/project/{uuid}Vulnerabilities for a project
GET /api/v1/metrics/project/{uuid}/currentCurrent risk metrics

Vulnerability Intelligence Sources

SourceProvides
NVDCVE data
GitHub AdvisoriesEcosystem-specific advisories
OSVOpen Source Vulnerabilities database
VulnDBCommercial (optional)
InternalYour own advisories

The platform mirrors these feeds and re-analyzes every stored component against them on a schedule.

Policy Engine

Policy conditionExample
SeverityFail if any CRITICAL vulnerability
LicenseBlock GPL in proprietary products
Component ageFlag dependencies unmaintained for N years
CoordinatesBan a specific package/version
CWEFlag specific weakness classes

Policies produce violations that appear alongside vulnerabilities, so license and hygiene risk are tracked in the same place.

CI/CD Integration

# In a pipeline: build → generate SBOM → upload → gate
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"

# Poll for the analysis result and fail on policy violations
IntegrationNote
Jenkins/GitHub ActionsOfficial plugins/actions available
WebhooksNotify Slack/Teams/Jira on new findings
VEXRecord exploitability decisions (not affected, etc.)

Triage & VEX

ActionMeaning
Not AffectedVulnerable code path is not reachable
False PositiveDetection is wrong
ResolvedFixed in this project
SuppressedAccepted risk with justification

Recording these as VEX keeps the noise down and documents decisions for auditors.

Dependency-Track vs Point Scanners

AspectDependency-TrackGrype/TrivySocket
ModelContinuous SBOM platformPoint-in-time scanBehavioral malware detection
Re-evaluationAutomatic on new CVEsOnly when you rerunOn dependency changes
Portfolio viewYes (all projects)Per-scanPer-PR
Best forOrg-wide supply chain riskCI scanningMalicious package detection

Feed it SBOMs from Syft; pair with Grype for build-time scanning and Socket for malicious-package detection.

Resources