In depth
VEX statements carry one of four status values for each (product, vulnerability) pair. Not Affected means the vulnerable code is present but not reachable, with a justification code such as "vulnerable_code_not_in_execute_path" or "inline_mitigations_already_exist." Affected means the vulnerability is real and exploitable, paired with required action statements. Fixed means a patched version is available. Under Investigation means the vendor is triaging and a definitive statement will follow.
The two dominant VEX formats are CSAF VEX (the OASIS-standard format, machine-readable JSON, signed) and OpenVEX (a lightweight CycloneDX-compatible alternative from the Linux Foundation). CycloneDX itself also embeds VEX statements natively. CISA's "Minimum Requirements for VEX" guidance specifies the data fields that any VEX document must contain to be useful in a federal-procurement context.
Practically, VEX transforms an unmanageable vulnerability backlog into a triaged work queue. An enterprise running an SBOM against the NVD might surface 4,000 CVEs in a typical SaaS product's dependency graph; VEX statements from the vendor typically reduce the actionable list to fewer than 50. This is the difference between a vulnerability-management programme that scales and one that drowns its engineers. See supply chain attacks 2026.