Skip to content

VEX and suppression

The VEX formats the Vulnetix CLI reads and writes, where VEX statements change scan results, and how ignore rules, nosec comments and VEX suppress findings today.

Updated 03 Nov 2026Checked against cli@v4.4.0, vdb-api@4145f0a

A VEX statement says whether a product is affected by a vulnerability. The CLI writes VEX for its own triage decisions, reads VEX that anyone else wrote, applies it to SBOMs and scans, and sends it to Vulnetix, where false-positive and won’t-fix statements become suppression rules.

Two mechanisms hide findings, and they are reported differently:

Mechanism Who asserts it Scope Reported as
VEX statements (--vex-file, --vex, declared VexSource documents, vex apply) The document’s author, often an upstream vendor Vulnerabilities in an SBOM “VEX not affected” or “VEX fixed”
Ignore rules (vulnetix ignore) and nosec comments Your team Findings of every scanner “suppressed by ignore rules” or “by nosec comments”

Formats

Format Read Written
OpenVEX 0.2.0 yes, recognised by an @context on openvex.dev vex merge, bom enrich companion file, triage --vex-format openvex, scan reconciliation files under .vulnetix/
CycloneDX VEX yes, any document with bomFormat: CycloneDX. Only vulnerabilities[] entries with an analysis block are statements. triage (default --vex-format cdx), vex apply --out, bom enrich
CSAF 2.0 VEX yes, recognised by a document.category containing vex no

All three are normalised into one statement model, so matching and application work the same whichever format the author used. The CLI validates against the vendored openvex-0.2.0 and cyclonedx-1.7 schemas in cli/schemas/third_party/.

Status mapping

OpenVEX status CycloneDX analysis.state CSAF product status Suppresses in vex apply and scans
not_affected not_affected, false_positive known_not_affected yes
fixed resolved, resolved_with_pedigree fixed yes
affected exploitable known_affected no, adds an action statement
under_investigation in_triage under_investigation no

Commands

Command Does
vulnetix vex apply Apply statements to an SBOM and report total, suppressed and effective counts
vulnetix vex ls, validate, merge Review, check and combine VEX documents
--vex-file and --vex on scan, sca, sast, secrets, containers, iac Apply VEX from files, directories and https URLs before the quality gates. --vex needs CLI v4.2.0. An authenticated scan also applies the Resolve Platform’s statements (CLI v4.4.0).
vulnetix ignore (alias suppress) Add, list, remove and sync ignore rules
vulnetix vdb vex get, vdb vex list Read VEX that Vulnetix holds for a CVE. See VDB API.

What reaches Vulnetix

When a command is authenticated, the VEX it read or wrote is sent to POST /v2/cli.vex-ingest, and the findings ignore rules and nosec comments hid are reported to cli.finalize. See VEX sent to Vulnetix.

A standing source of suppression rules, read from a TEA server, an S3 bucket, a git repository or URLs, is the VexSource kind. Since CLI v4.2.0 a scan also reads the path and urls sources declared under .vulnetix/config itself, and since CLI v4.4.0 an authenticated scan applies the statements the Resolve Platform holds for every source type, tea, s3 and git included; see Declared VexSource documents, Statements the Resolve Platform holds and VEX documents as suppression rules.

GitHub Actions

Validate, list, merge or apply VEX documents in a workflow with the vex GitHub Action.

Platform IaC

Suppression rules you write are Suppression documents. A standing source of VEX, read from a TEA server, an S3 bucket, a git repository or URLs, is a VexSource; see VEX documents as suppression rules. Rules from a local .vulnetix/memory.yaml and vulnetix ignore stay as they are. See the kind catalogue.

When Drift protection is on, a change made in the console or through a legacy API to a suppression rule that is managed as code (by Terraform or a repository) is refused with HTTP 409 managed_by_platform_iac. Change it where it is declared, or ask an admin to turn Drift protection off. Rules written as a side effect of triaging a finding are not blocked.

Edit this pageSources: cli/cmd/vex.go, cli/cmd/vex_ingest.go, cli/cmd/suppress.go, cli/cmd/suppress_report.go, cli/internal/vex/read.go, cli/internal/vex/merge.go, cli/internal/triage/vex.go, cli/internal/suppress/suppress.go, vdb-api/internal/handler/v2_cli_vex_ingest.go
esc
↑ ↓ move↵ openSearches in your browser. A key like autonomy.max or a code like threshold_required jumps straight to it.