Skip to content

Support OpenVEX and CycloneDX VEX in validate - #115

Merged
BacchusJackson merged 1 commit into
mainfrom
vex-support
Nov 4, 2026
Merged

BacchusJackson merged 1 commit into
mainfrom
vex-support

Conversation

@BacchusJackson

Copy link
Copy Markdown
Member

validate can now skip findings that a VEX document marks as not exploitable, so accepted risk can live in a standard file and not only in the config's allow lists.

  • Sources: --vex FILE (repeatable), GATECHECK_VEX (comma-separated, used when the flag is absent), and vex.files in the config.
  • Formats: OpenVEX (v0.2.0 objects and the older string form) and CycloneDX VEX (analysis.state).
  • Statuses that skip a finding: OpenVEX not_affected and fixed; CycloneDX not_affected, false_positive, resolved, and resolved_with_pedigree.
  • Matching: by id plus aliases (Grype relatedVulnerabilities, Trivy VendorIDs, OSV aliases, CycloneDX references). When a statement names packages (OpenVEX subcomponents, CycloneDX affects), the finding's package URL has to match. osv-scanner purls are built from the ecosystem. The latest statement wins.
  • Order: right after the cveLimit deny list. An explicit deny still fails, and skipped findings don't count toward the KEV, EPSS, or severity limits. Bundles pick it up as well.
  • New page: docs/vex.md.

Tests cover the pkg/vex parsers and matching (including a purl bug with scoped npm names), plus end-to-end validation on the sample Grype, Trivy, osv-scanner, and bundle reports. I also ran the built binary on test/trivy-report.json: it went from exit 1 to exit 0 with --vex.

Fixes #102

🤖 Generated with Claude Code

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Deploying gatecheck-website with  Cloudflare Pages  Cloudflare Pages

Latest commit: aa5cd57
Status: ✅  Deploy successful!
Preview URL: https://f5b659a2.gatecheck-website.pages.dev
Branch Preview URL: https://vex-support.gatecheck-website.pages.dev

View logs

validate --vex, GATECHECK_VEX, and the config's vex.files read OpenVEX
and CycloneDX VEX. Grype, CycloneDX, Trivy, and osv-scanner findings
marked not exploitable are dropped after the deny list, so they skip the
KEV, EPSS, and severity rules. Statements that name packages match by
package URL, and the latest statement wins.

Fixes #102
@BacchusJackson
BacchusJackson merged commit aa5cd57 into main Nov 4, 2026
8 checks passed

This branch was successfully deployed

1 active deployment
github-pages — aa5cd575 Deployed Nov 4, 2026 by BacchusJackson via deploy #71
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support VEX for accepted risk

1 participant