DependencyTrack / DependencyTrack/dependency-track

VEX documents (including OpenVEX) and .trivyignore are ignored during SBOM ingestion and re-analysis

Open
#4,862 6 comments 0 reactions 0 assignees View on GitHub
defect integration/trivy p2 size/M
Dominant language
Java
Stars
4.2k
Forks
811
Avg merge
8h 39m
Merged PRs (30d)
237

Description

### Current Behavior

Dependency-Track currently ignores both .trivyignore-based suppressions and externally attached VEX documents (e.g., OpenVEX) during SBOM ingestion and re-analysis.

We have automated pipelines that generate SBOMs using Trivy. While Trivy allows suppressions via .trivyignore, those suppressed CVEs still appear in Dependency-Track once the SBOM is uploaded. Additionally, we attempted to use OpenVEX (via vexctl) to attach a VEX document to the SBOM before pushing it to Dependency-Track, but those suppressions are also ignored.

When we attempt to upload an OpenVEX document directly to Dependency-Track via the “Apply VEX” feature, the upload fails due to schema validation issues. However, if we manually pull the VEX document from Dependency-Track, modify it to match the internal schema format (adding not_affected entries for desired CVEs), and re-upload, it successfully applies and hides the suppressed CVEs as expected.

While this proves that suppression via VEX technically works, it's not viable for automated pipelines, as it would require:

- Uploading the BOM
- Downloading the generated VEX
- Programmatically modifying it
- Re-uploading it

This is not scalable in CI/CD environments, especially when pipelines run daily and BOMs are constantly refreshed.

### Steps to Reproduce

- [ ] 1. Create a Trivy-generated SBOM and suppress one or more CVEs using .trivyignore.
- [ ] 2. Upload the SBOM to a Dependency-Track project.
- [ ] 3. Observe that the CVEs marked to be ignored still appear.
- [ ] 4. Create a VEX document using vexctl (OpenVEX format) containing not_affected entries for the same CVEs.
- [ ] 5. Attach the VEX to the SBOM or upload it separately using the “Apply VEX” feature.
- [ ] 6. Observe that the VEX is either ignored or rejected due to schema mismatch.
- [ ] 7. Manually download the VEX report from the same project, edit it in-place to match DT’s expected schema, and upload it back — now suppression works.

### Expected Behavior

Dependency-Track should:

- Respect .trivyignore suppressions during SBOM ingestion.

- Accept and apply external VEX documents such as OpenVEX (especially when compliant with the CycloneDX VEX 1.0 spec).

- Allow automated suppression flows during SBOM push, without requiring manual VEX patching post-upload.

- Optionally support global VEX or suppression lists, allowing teams to centrally manage suppressions (e.g., from a shared artifact or registry) across all projects and pipeline executions.

Possible references:

- [#3554](https://github.com/DependencyTrack/dependency-track/issues/3554) Export and Import VEX fails to match Vulnerabilities correctly
- [#1921](https://github.com/DependencyTrack/dependency-track/discussions/1921) Help needed for BOM-VEX link

### Dependency-Track Version

4.13.0

### Dependency-Track Distribution

Container Image

### Database Server

N/A

### Database Server Version

_No response_

### Browser

Google Chrome

### Checklist

- [x] I have read and understand the [contributing guidelines](https://github.com/DependencyTrack/dependency-track/blob/master/CONTRIBUTING.md#filing-issues)
- [x] I have checked the [existing issues](https://github.com/DependencyTrack/dependency-track/issues) for whether this defect was already reported

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.