SBOM & VEX Explained

PUBLISHED:
November 25, 2025
|
BY:
Abhishek P Dharani

What's in your own software? 

You’re shipping features fast, pulling in third-party components, nested dependencies, random transitive packages from some dev’s weekend project... and you’re calling it secure?

Security reviews miss half of what’s actually running in prod. Dev teams move fast, and security doesn’t have the tools or the time to track every component or assess what’s actually exploitable. When the next zero-day hits, you’ll have no idea where it is, what it touches, or how to prove you’re not exposed.

It's a business risk as much as it is bad hygiene.

Table of Contents

  1. Why SBOMs alone aren’t enough
  2. What VEX really solves (and where it doesn’t)
  3. What developers must do to make SBOM + VEX work
  4. Vendor accountability checklist for SBOM and VEX
  5. Operationalizing SBOM + VEX in your pipeline
  6. SBOMs and VEX are new baseline for software supply chain security

Why SBOMs alone aren’t enough

At this point, every security program has an SBOM somewhere. Your CI pipeline probably spits one out for every build. Vendors send them along with every update. Compliance teams check the box and move on. But when you look closer, you realize an SBOM is just a list, a static record of what went into the software.

The moment a new CVE shows up, all eyes are on the SBOM. You search for the component, confirm it’s in use, and the panic starts. Tickets open across every affected service. Patching sprints begin. Releases get delayed. And after burning through cycles, you find out the vulnerable function wasn’t even loaded at runtime, the feature it lives in was turned off, and no exploit path exists in your environment.

This is what happens when SBOMs are treated as security controls instead of inventory references. You see what's present, but you can’t tell what matters, so the result becomes a never-ending stream of alerts, false urgency, and wasted effort.

To be clear, SBOMs still serve a purpose. They help you:

  • Understand exactly what dependencies and components are part of each artifact.
  • Track version drift or license issues across services.
  • Respond faster during incident investigations or audits.

But the second you're flooded with CVEs, none of that helps you decide what’s actually exploitable. You’re still stuck reviewing every alert manually, chasing down theoretical risks that have no real impact.

But with VEX, not as a replacement for SBOM, but as the critical layer of context you’ve been missing. With a well-formed VEX document, you can quickly assess:

  • Whether the vulnerable component is initialized or loaded at runtime.
  • Whether the attack path is reachable in your architecture.
  • Whether exploitability is mitigated by configuration, isolation, or compensating controls.
  • Whether the vendor has analyzed and confirmed impact in your environment.

That context is what lets you move fast without wasting time. You stop delaying features for issues that don’t matter, focus response on what’s real, and you finally get out of the cycle of reacting to every CVE like it’s a breach waiting to happen.

So yes, you need SBOMs. But stopping there leaves you guessing. The last thing you need is more lists. You need answers. And without VEX, you’re not getting them.

What VEX really solves (and where it doesn’t)

Once you’ve got an SBOM, the next thing you need is clarity about what can actually be exploited. That’s what VEX is designed to give you. It’s a structured way to declare whether a known vulnerability in a component is exploitable in a specific context. It doesn’t scan, it doesn’t fix, and it doesn’t guess. It gives you a signal, assuming you know how to interpret it.

VEX is designed to answer a simple but critical question: is this known issue exploitable in the way we’ve implemented or deployed this component? It gives you a structured and machine-readable way to track that. Think of the Log4j chaos. Just spotting it in your codebase wasn’t enough. What mattered was whether it was actually reachable, whether the vulnerable function was active, and whether the JVM was configured in a way that prevented exploitation. In cases where teams had already applied mitigations like runtime flags, a properly issued VEX told them they weren’t at risk.

That’s the upside. But here’s where things start to break down. VEX only works when the underlying assumptions are correct. It doesn’t run scans or verify your configuration. It just declares a status like “not affected” or “fixed” based on how a vulnerability interacts with the component in a specific context. If your environment doesn’t match that context, or if a mitigation mentioned in the VEX isn’t actually present in your deployment, then the VEX is useless. Worse, it creates false confidence.

So before relying on any VEX data, your team needs to confirm a few critical things:

  • You’re actually using the same component version referenced in the VEX.
  • The conditions that make the vulnerability unexploitable, such as disabled features, runtime flags, or architectural boundaries, are present in your environment and enforced.
  • The usage patterns in your codebase haven’t introduced any new exposure paths that override what the VEX assumed.

It’s tempting to treat VEX like a green light, especially when it saves time and unblocks a release, but it’s only accurate when the implementation matches the declaration. That’s where teams trip up. They trust the VEX without checking the setup. They assume mitigations are applied without confirming them. And they move on before verifying whether the context actually fits.

Used correctly, VEX is one of the most effective tools you have to focus your remediation efforts and avoid wasting time on non-issues. But that value depends on validation. You still need to check your runtime, your config, and your architecture. Otherwise, you’re just accepting risk blindly.

What developers must do to make SBOM + VEX work

Security teams can define policies, review artifacts, and evaluate risk posture, but they don’t own the build process. That’s why SBOM and VEX only work when engineering teams treat them as part of the development lifecycle instead of something external or optional. The thing is if your dev and DevOps teams aren’t generating accurate SBOMs and supplying real exploitability context, then VEX becomes useless and your entire supply chain visibility breaks down.

SBOMs must be generated automatically during every build

One of the most common mistakes teams make is treating SBOMs like static documents. Something generated once per release, stored somewhere, and forgotten. That doesn’t work. Every build needs to produce an SBOM, and that SBOM must reflect exactly what’s been compiled, containerized, or deployed. To get this right:

  • Integrate SBOM generation directly into your CI/CD pipelines.
  • Use standardized formats like CycloneDX or SPDX to ensure tooling compatibility.
  • Include all transitive dependencies, system libraries, and indirect packages pulled in during build time.

The SBOM must remain coupled with the artifact it represents. That way, when a new CVE surfaces, your security team can pinpoint which version of which artifact contains the vulnerable component.

Exploitability needs to be mapped at the development level

It’s not enough to know a vulnerable package exists. But is it actually being used? Is the affected functionality enabled? Are deployment controls already mitigating the issue? That context starts with the people writing and assembling the code. To support meaningful VEX accuracy, developers must:

  • Track where and how dependencies are used in the application.
  • Understand which features of a component are enabled by default versus explicitly configured.
  • Identify runtime controls, such as sandboxing, feature flags, or JVM arguments, that alter how a component behaves.

This context allows security teams or automation tools to validate whether a known CVE is relevant, and under what conditions it becomes a real risk.

Mitigations must be explicit and traceable

The entire point of VEX is to document whether a vulnerability is exploitable in a given environment, and if it isn’t, then why not. That requires clear and explicit documentation of mitigations, especially when you’re relying on configuration changes or architecture-level controls. Your team needs to:

  • Capture mitigation logic directly in code comments, configuration files, or build metadata.
  • Ensure that deployment teams enforce those mitigations in staging and production.
  • Align internal documentation with the VEX format so that automated generation or external consumption doesn’t misrepresent the exploitability status.

A VEX statement saying “component not affected due to runtime config” only holds up if that runtime config is present, enforced, and verifiable.

SBOM and VEX are only useful when tied to CI/CD

For SBOM and VEX to be operationally useful, they must be part of the build and deploy pipeline, instead of something generated manually or bolted on during release review. The entire point is to map vulnerabilities to actual software artifacts and their real-world configurations. That means every artifact must have a corresponding SBOM generated at build time and any VEX logic must be tied to the current state of that artifact’s usage.

Here’s what that looks like in a CI/CD context:

  1. Every build job must include an SBOM generation step using tools like Syft, Trivy, or native support in build tools like Maven, Gradle, or Docker build plugins. These tools should export SBOMs in machine-readable formats like SPDX or CycloneDX and store them alongside the artifact in your artifact repository or container registry.
  2. The SBOM must be tightly versioned and artifact-linked. That means when you generate a new container image or binary, the SBOM is created for that exact build and tagged accordingly. This allows vulnerability management tools to perform targeted matching between CVEs and the exact deployed instance.
  3. VEX should be derived as part of a policy validation step. This involves static checks (e.g., verifying configuration files for disabled features), as well as dynamic context (e.g., validating that a mitigation like log4j2.formatMsgNoLookups=true is enforced at runtime). This data can either feed into VEX documents directly or serve as pre-validation for consuming external VEX data from vendors.
  4. Pipeline stages should validate consistency between the SBOM and VEX. For example, before deployment, a check should confirm that the VEX status declared (e.g., “not affected”) matches the actual runtime configuration used in the current deployment manifest or Helm chart. Any misalignment should block the release and trigger a review.
  5. All SBOMs and VEX outputs should be published to a centralized and queryable system. This enables downstream security tools, compliance scanners, and runtime defenders to cross-reference what's deployed against what’s exploitable without relying on tribal knowledge or spreadsheets.

When these pieces are in place, you stop reacting to CVEs with guessing. Instead, your teams can ask: which version of the service is deployed in prod, which exact packages are present, and what is the exploitability status in that context?

CI/CD integration is what makes SBOM and VEX actionable. Without it, you're left trying to match vulnerabilities against outdated snapshots and undocumented runtime behavior, which defeats the entire point of supply chain risk visibility.

Vendor accountability checklist for SBOM and VEX

If software from a vendor runs in your environment, you’re responsible for the risk. Use this checklist to hold suppliers to the same standards you apply internally, and cut through vague promises or incomplete documentation.

  1. SBOM Requirements

Make sure every vendor provides:

  • A machine-readable SBOM (SPDX or CycloneDX) with every version or release delivered.
  • SBOMs generated as part of their automated build process, not manually.
  • Full dependency coverage, including:
    • Direct and transitive packages
    • OS-level libraries
    • Build-time and runtime components
  • Version-tagged SBOMs that match the exact artifact deployed in your environment.
  • Storage or access via a queryable repository or delivery pipeline (not PDFs or ad-hoc email).

Red flag: “We’ll send the SBOM on request” — this usually means they’re not maintaining it properly.

  1. VEX Expectations

Require that vendors also deliver VEX documents that:

  • Explicitly list known vulnerabilities affecting components in the SBOM.
  • Provide exploitability status using valid VEX status types:
  • Not_affected
  • Affected
  • Fixed
  • Under_investigation
  • Include the technical reasoning behind the status:
    • Disabled features
    • Runtime configuration (e.g., sandboxing, flags)
    • Architectural isolation
  • Reference the specific build or artifact the VEX applies to.
  • Are updated on a consistent cadence or when new CVEs are disclosed.

Red flag: “We reviewed the CVE and it doesn’t apply” — without evidence, this statement is useless.

  1. Evidence of Exploitability Analysis

Ask vendors to show:

  • How the VEX determination was made, based on build context, configuration, or runtime validation.
  • Whether mitigation controls are implemented by default or require customer action.
  • How they verify exploitability assumptions across different deployment environments.

Red flag: VEX documents that only reflect vendor opinion with no traceable data source or validation logic.

  1. SLA and Contract Terms

Tie SBOM and VEX delivery to enforceable contract obligations:

  • Include SBOM and VEX delivery in your security SLA or MSA language.
  • Require vendors to:
    • Deliver updated SBOMs with every software drop.
    • Provide VEX coverage for all known CVEs in their supply chain.
    • Update VEX data when configurations or upstream packages change.
  • Ensure SLAs include response timelines for high-impact vulnerabilities.

Bottom line: If your vendors can’t show you what’s in their software and why it’s safe, they’re not ready to be in your environment.

Operationalizing SBOM + VEX in your pipeline

It’s not enough to generate SBOMs and collect VEX files. The only way they reduce real risk is when they’re fully embedded into your pipeline, generated automatically, validated continuously, and tied directly into how your teams manage vulnerabilities and deploy software.

Automate SBOM generation in CI/CD

Start by integrating SBOM creation into your existing build process. Every artifact should have an SBOM generated at build time, using tools that are compatible with your stack. Depending on your language and ecosystem:

  • Use Syft, Trivy, or CycloneDX CLI to generate SBOMs for containers and binaries.
  • Leverage native plugins like Maven CycloneDX, Gradle plugins, or npm sbom to build SBOMs at the package level.
  • Ensure the SBOM is stored with the artifact in your artifact repository (e.g., JFrog, Nexus, AWS CodeArtifact) and tagged with the exact version and commit it was built from.

This makes the SBOM reproducible, traceable, and always in sync with what’s deployed.

Validate VEX against runtime reality

VEX only adds value when it matches how the software actually behaves in your environment. That means validating exploitability assumptions. In practice, this looks like:

  • Parsing VEX documents using tools that support CycloneDX or OpenVEX formats.
  • Comparing declared mitigations (e.g., disabled features, runtime flags) against deployment manifests, container entrypoints, or Kubernetes config.
  • Flagging discrepancies where a VEX claim (e.g., “not affected due to JVM flag”) doesn’t align with the actual runtime configuration.

Security tooling should not accept VEX at face value. Your pipeline needs logic that verifies the conditions behind each VEX statement are actually enforced in your environment.

Feed VEX into your vulnerability management stack

The end goal is to reduce alert fatigue without skipping real risk. That means pulling SBOM and VEX data into the systems your teams already use to triage and remediate. To get there:

  • Ingest SBOMs into your SCA platform or vuln management tool (e.g., Snyk, Anchore, Tenable, Aqua).
  • Configure those tools to respect VEX metadata when scoring, filtering, or prioritizing vulnerabilities.
  • Route actionable issues to ticketing systems or security workflows, using only the filtered set based on actual exploitability.

This helps your teams stop wasting time on noise and focus on vulnerabilities that truly matter in your context.

Secure the pipeline like you would a production system

Operationalizing SBOM and VEX is only as strong as the environment around it. If your build systems are exposed or your pipeline is misconfigured, then the entire process can be compromised. This is where lessons from DevSecOps come into play. Key actions include:

  • Lock down your CI/CD infrastructure using least privilege access, secrets management, and signed builds.
  • Treat build artifacts and SBOMs as sensitive data, because they are.
  • Include SBOM and VEX validation in your threat modeling and SDLC security reviews.

These practices need to run every time software is built and shipped.

SBOMs and VEX are new baseline for software supply chain security

But only if you make them actionable.

Attackers don’t wait for you to prepare a checklist weeks before an audit. They exploit gaps in your build process, your dependencies, and your vendor relationships while you’re launching features. That means SBOM plus VEX is now a core control if you want to stay ahead of risk instead of scrambling after it.

One risk many security leaders overlook is complacency. Once you see an SBOM and a VEX document, it’s easy to assume you’re safe. Reality is vulnerability status changes constantly with new CVEs, dependency updates, and configuration drift. Unless you embed SBOM/VEX validation into your pipeline and treat it as living documentation, you’ll end up blind to newly exploitable changes.

On the opportunity side, supply‑chain security is becoming a hygiene standard for compliance frameworks and customer trust. Organizations treating it as infrastructure now will gain a competitive advantage in regulation-heavy industries. Over the next 12 to 18 months expect more mandates around supply-chain risk transparency and stronger pressure from clients to prove provenance and exploitability posture before you deploy.

If you're ready to turn supply‑chain risk from a liability into a managed vector, you don’t have to go it alone. At we45 we help organizations embed SBOM and VEX into their pipelines by enforcing build provenance, enabling real‑time vulnerability management, and aligning supply‑chain practices with compliance frameworks. When you’re ready, we’ll help you bring clarity and control to your supply chain security.

FAQ

What is the main problem with relying only on an SBOM for software security?

An SBOM (Software Bill of Materials) is merely a static inventory list of components and dependencies within the software. The main problem is that it treats every vulnerability (CVE) found in a listed component as an alert, leading to "alert fatigue," false urgency, and wasted effort. You know what's present, but the SBOM alone cannot tell you what is actually exploitable in your specific runtime environment. You end up chasing down theoretical risks that have no real impact, delaying releases, and starting patching sprints unnecessarily.

How does a VEX document address the limitations of an SBOM?

VEX (Vulnerability Exploitability eXchange) provides the critical layer of context missing from an SBOM. It is a structured declaration of whether a known vulnerability in a component is exploitable in a specific product or deployment context. A well-formed VEX document allows you to quickly assess if the vulnerable component is loaded at runtime, if the attack path is reachable in your architecture, or if exploitability is already mitigated by configuration, isolation, or compensating controls. This context allows teams to focus their response only on real, actionable risks.

What is the critical question a VEX document is designed to answer?

The critical question VEX is designed to answer is: Is this known issue exploitable in the way we've implemented or deployed this component? It provides a structured, machine-readable way to track this exploitability status.

What are the risks of trusting VEX data without proper validation?

VEX only works if its underlying assumptions are correct. The risk of trusting it blindly is that it creates false confidence. VEX declares a status (e.g., "not affected") based on a specific context, but it does not scan or verify your live configuration. If your deployment environment does not match the context referenced in the VEX, or if a mentioned mitigation is not actually enforced, the VEX is inaccurate and potentially useless. Your team must confirm the correct component version is used and that all necessary mitigations are present and enforced in your runtime environment.

What is required from developers to ensure SBOM and VEX are effective?

Developers and DevOps teams must treat SBOM and VEX as integral parts of the development lifecycle, not as external or optional steps. This involves three key actions: Generate SBOMs Automatically: Integrate SBOM generation directly into CI/CD pipelines for every build, using standardized formats like CycloneDX or SPDX, and including all direct and transitive dependencies. Map Exploitability at the Development Level: Developers must understand and track how dependencies are used, which features are enabled, and what runtime controls (like feature flags or sandboxing) are in place, as this context is necessary for meaningful VEX accuracy. Make Mitigations Explicit and Traceable: Clearly document and enforce mitigation logic in code, configuration files, or build metadata so that the VEX statement is verifiable in production.

What are the required VEX status types vendors should use in their documents?

Vendors should use valid VEX status types to explicitly communicate the exploitability of known vulnerabilities. These status types include: Not_affected Affected Fixed Under_investigation

How can an organization operationalize SBOM and VEX within their CI/CD pipeline?

Operationalizing SBOM and VEX involves embedding them into the build and deploy pipeline: Automate Generation: Every build job must include an SBOM generation step using tools like Syft or Trivy, storing the SBOM alongside the artifact. Tightly Version and Link: The SBOM must be tightly versioned and linked to the exact artifact and commit it represents. Derive and Validate VEX: VEX should be derived as part of a policy validation step, which includes checking consistency between the VEX status (e.g., "not affected") and the actual runtime configuration (e.g., JVM flags, deployment manifests). Centralize Data: Publish all SBOMs and VEX outputs to a centralized, queryable system for downstream security tools and compliance scanners.

Why is CI/CD integration essential for SBOM and VEX?

CI/CD integration is essential because it makes SBOM and VEX actionable and prevents them from becoming stale. It ensures that every artifact has a current SBOM generated at build time and that VEX logic is tied to the current state of that artifact's usage and its real-world configuration. Without this integration, teams are left reacting to vulnerabilities based on outdated snapshots, which defeats the purpose of gaining supply chain risk visibility.

What are key vendor accountability requirements for customers seeking SBOM and VEX?

Customers must set clear requirements for their software suppliers: SBOMs: Require a machine-readable SBOM (SPDX or CycloneDX) with every release, generated automatically during the build process, covering full dependency coverage, and provided via a queryable repository, not ad hoc documents. VEX: Require VEX documents that explicitly list known vulnerabilities, use valid VEX status types, include the technical reasoning behind the status (e.g., disabled features, runtime config), and are updated on a consistent cadence. Evidence: Demand evidence of how the VEX determination was made, based on build context or runtime validation, not just vendor opinion. SLA: Tie the delivery and update of both SBOM and VEX to enforceable security SLA and contract obligations.

Abhishek P Dharani

I break things, find bugs, and make security engineers sweat (in a good way). As a Senior Security Engineer at we45, I hunt vulnerabilities, chain exploits, and automate away the boring stuff. If your app has a security flaw, I’ll spot it before attackers do. Off the clock, you’ll find me smashing shuttlecocks, chasing bug bounties, or trekking into the wild. I love cloud security, hacking challenges, and a good game (virtual or real). Also, cats and techno music. Priorities.
View all blogs
X