Vulnerabilità
VEX: che cosa dice un documento Vulnerability Exploitability eXchange
Se confronta una SBOM con un database di vulnerabilità, ottiene un lungo elenco di CVE, molte delle quali non sono sfruttabili nel prodotto. VEX è il modo in cui un fornitore indica quali sono pertinenti: una dichiarazione leggibile da una macchina, per ciascuna vulnerabilità, che dice se il prodotto è interessato e perché.
Aggiornato il
Che cos'è VEX?
VEX, abbreviazione di Vulnerability Exploitability eXchange, è una dichiarazione leggibile da una macchina che indica se un prodotto è interessato da una specifica vulnerabilità nota. Un fornitore la pubblica affinché chi usa il prodotto sappia quali vulnerabilità richiedono un intervento e quali no. Nella maggior parte delle organizzazioni questo lavoro del fornitore spetta al product security incident response team (PSIRT).
I Minimum Requirements for VEX di CISA (aprile 2023) lo definiscono indipendentemente da qualsiasi formato di file: un documento VEX è un contenitore di una o più dichiarazioni VEX, e ogni dichiarazione assegna uno stato a una vulnerabilità in uno o più prodotti. VEX è progettato per funzionare con SBOM, database di vulnerabilità e advisory di sicurezza, ma non ha bisogno di nessuno di essi.
Perché esiste VEX: il rumore delle SBOM
Una SBOM elenca tutti i componenti di un prodotto, comprese le dipendenze transitive. Uno scanner confronta questi componenti con gli advisory e riporta ogni CVE in ogni versione che trova. Molti di questi risultati non sono pertinenti: la funzione vulnerabile non viene mai chiamata, un'opzione di build la esclude dalla compilazione o la configurazione del prodotto blocca l'attacco. Senza VEX, ogni cliente deve capirlo da solo, oppure aprire un ticket di assistenza per chiederlo al fornitore.
VEX sposta questa analisi sulla parte che può svolgerla una sola volta, per tutti: il fornitore. Lo scanner del cliente legge il documento VEX e sopprime i risultati che il fornitore ha contrassegnato come non pertinenti per il prodotto.
I quattro stati VEX
Ogni dichiarazione VEX riporta esattamente uno di questi quattro stati:
| Stato | Significato | Richiesto inoltre |
|---|---|---|
not_affected |
Non è necessaria alcuna correzione o mitigazione. La vulnerabilità non riguarda i prodotti elencati. | Una giustificazione, o un impact statement che spieghi il motivo |
affected |
La vulnerabilità riguarda i prodotti elencati e l'autore raccomanda un intervento. | Un action statement: che cosa dovrebbero fare gli utenti |
fixed |
Le versioni di prodotto elencate contengono una correzione. | Niente di più |
under_investigation |
L'autore sta indagando e non ha ancora deciso. | Niente di più; è previsto che cambi |
Giustificazioni VEX per not_affected
Una dichiarazione not_affected deve spiegare il perché. I requisiti di CISA stabiliscono che DOVREBBE usare una di
cinque giustificazioni e che, in caso contrario, DEVE fornire un impact statement in testo libero. OpenVEX e CSAF usano le stesse
cinque:
-
component_not_present: il componente vulnerabile non è incluso nel prodotto. -
vulnerable_code_not_present: il componente è incluso, ma il codice vulnerabile no, di solito per il modo in cui è stato configurato o compilato. -
vulnerable_code_not_in_execute_path: il codice vulnerabile è presente, ma il prodotto non lo chiama mai. -
vulnerable_code_cannot_be_controlled_by_adversary: il codice è presente e usato, ma un attaccante non può controllarlo per sfruttare la vulnerabilità. -
inline_mitigations_already_exist: protezioni integrate che gli utenti non possono disattivare impediscono lo sfruttamento.
Le giustificazioni differiscono per le evidenze che richiedono. component_not_present richiede un registro accurato di
ciò che il prodotto contiene. Le tre centrali richiedono un'analisi del codice, come l'analisi di raggiungibilità o una revisione
manuale, e sono quelle che i clienti mettono più spesso in discussione.
Che cosa contiene una dichiarazione VEX
I requisiti minimi di CISA elencano questi elementi:
- Metadati del documento: un ID del documento, una versione che aumenta a ogni modifica, l'autore (una persona o un'organizzazione, non uno strumento) e quando è stato emesso per la prima volta e aggiornato per l'ultima.
- Dettagli del prodotto: uno o più identificatori di prodotto, idealmente gli stessi usati dalla SBOM del prodotto, come un package URL (purl). Una dichiarazione può anche indicare il sottocomponente che contiene la vulnerabilità.
- Dettagli della vulnerabilità: un ID di vulnerabilità per dichiarazione, di solito una CVE, e una descrizione o un link a una descrizione.
- Stato, con la giustificazione, l'impact statement o l'action statement che richiede.
- Metadati della dichiarazione: un ID, una versione e i timestamp della dichiarazione stessa.
Un esempio di documento VEX
Questo documento OpenVEX dice che un prodotto, example-api 3.2.0, distribuisce una versione vulnerabile di log4j-core
ma non è interessato da Log4Shell, perché la classe vulnerabile viene rimossa durante la build:
{
"@context": "https://openvex.dev/ns/v0.2.0",
"@id": "https://example.com/vex/2026-0042",
"author": "Example Corp PSIRT",
"timestamp": "2026-10-02T09:00:00Z",
"version": 1,
"statements": [
{
"vulnerability": { "name": "CVE-2021-44228" },
"products": [
{
"@id": "pkg:generic/example/[email protected]",
"subcomponents": [
{ "@id": "pkg:maven/org.apache.logging.log4j/[email protected]" }
]
}
],
"status": "not_affected",
"justification": "vulnerable_code_not_present",
"impact_statement": "The JndiLookup class is removed from log4j-core at build time."
}
]
}
Il prodotto e il suo sottocomponente sono identificati da package URL, così uno scanner può confrontarli con i componenti della SBOM del prodotto. La stessa dichiarazione in CycloneDX o CSAF riporta gli stessi fatti con una struttura diversa.
Formati VEX: OpenVEX, CycloneDX VEX e CSAF VEX
VEX è un insieme di requisiti, non un formato di file. CISA indica tre formati che possono contenerlo, e non sono intercambiabili:
| OpenVEX | CycloneDX VEX | CSAF VEX | |
|---|---|---|---|
| Che cos'è | Un piccolo formato JSON creato solo per VEX | La sezione vulnerabilities di un documento CycloneDX |
Il profilo csaf_vex dello standard di advisory CSAF |
| Standard | Specifica aperta, v0.2.0 | ECMA-424 (CycloneDX 1.6 e successivi) | OASIS Standard (CSAF 2.0, 2022) |
| Stati | I quattro stati VEX |
I propri stati di analisi: not_affected, exploitable, in_triage,
resolved, resolved_with_pedigree, false_positive
|
Elenchi di stato del prodotto: known_not_affected, known_affected, fixed,
under_investigation
|
| Giustificazioni | Le cinque giustificazioni CISA |
Nove proprie, come code_not_reachable e requires_configuration
|
Le cinque giustificazioni CISA, come flag |
| Adatto ai team che | Vogliono il file VEX più piccolo possibile | Distribuiscono già SBOM CycloneDX | Pubblicano già advisory di sicurezza CSAF |
| Letto da Trivy | Sì | Sì, per le scansioni di SBOM | Sì |
| Letto da Grype | Sì | Non indicato | Sì |
OpenVEX è il più leggero: un documento con un autore, un timestamp, una versione e un elenco di dichiarazioni. La sua specifica tratta VEX come una sequenza di dichiarazioni, ciascuna delle quali sostituisce o integra quelle precedenti.
CycloneDX VEX usa la stessa struttura vulnerabilities che CycloneDX usa per tutto il resto, con un
oggetto analysis che contiene uno stato, una giustificazione, valori di risposta come update o
will_not_fix e dettagli in testo libero. I dati VEX possono stare all'interno della SBOM o in un documento CycloneDX
separato che punta alla SBOM con BOM-Link. Tenga presente che il suo vocabolario di giustificazioni non è quello di CISA, quindi la
conversione da o verso OpenVEX o CSAF richiede una mappatura. Veda CycloneDX vs SPDX per il lato
SBOM.
CSAF VEX è un documento CSAF completo con categoria csaf_vex. Richiede un product tree, una CVE o un
altro ID, note e, per ogni prodotto, un impact statement (se non interessato) o una correzione (se interessato). È più pesante di
OpenVEX, ma è adatto alle organizzazioni che distribuiscono già advisory CSAF tramite un provider CSAF.
VEX vs VDR
Un Vulnerability Disclosure Report (VDR) elenca le vulnerabilità che riguardano effettivamente un prodotto, insieme alla loro analisi e correzione. NIST SP 800-161 raccomanda i VDR come pratica per la supply chain, e CycloneDX supporta sia VEX sia VDR. La differenza, secondo gli esempi di CycloneDX:
- VDR dice quali vulnerabilità riguardano il prodotto. Può coprire vulnerabilità trovate nel Suo codice e mai pubblicate altrove.
- VEX è soprattutto una dichiarazione negativa: quali vulnerabilità note non riguardano il prodotto, e perché. Copre solo le vulnerabilità note.
Molti fornitori pubblicano entrambi: il VDR risponde a "che cosa devo correggere", il VEX a "che cosa posso ignorare".
Come gli scanner usano VEX
Un documento VEX fa risparmiare lavoro solo se gli strumenti del cliente lo leggono. Due scanner open source ampiamente usati lo fanno:
-
Trivy acquisisce VEX tramite la sua
opzione
--vex(contrassegnata come sperimentale) da un file locale, da un repository VEX, da un'attestazione OCI o da un riferimento nella SBOM. Legge OpenVEX, CycloneDX VEX per le scansioni di SBOM e CSAF VEX, e smette di riportare le vulnerabilità contrassegnate comenot_affected. -
Grype acquisisce OpenVEX e CSAF VEX tramite
--vex. Sposta le corrispondenzenot_affectedefixedin un elenco di elementi ignorati, mostrato con--show-suppressed, e può facoltativamente aggiungere ai risultati le dichiarazioniaffectedeunder_investigation.
La corrispondenza dipende dagli identificatori. Se il VEX indica il prodotto con un identificatore diverso da quello usato dalla SBOM, lo scanner non può collegarli e il risultato resta.
Chi pubblica VEX
VEX proviene di solito dal fornitore: il vendor, la distribuzione open source o il produttore del dispositivo che distribuisce il prodotto. All'interno del fornitore è un compito del PSIRT, parte dello stesso ciclo di vita della gestione delle vulnerabilità che produce advisory e correzioni. Red Hat, ad esempio, pubblica documenti CSAF VEX in una directory dedicata del suo feed CSAF, accanto ai propri advisory. Per sapere che cosa fanno ogni giorno gli ingegneri PSIRT, veda il ruolo del PSIRT.
Anche i clienti scrivono VEX per uso proprio, registrando le decisioni di triage sul prodotto di un fornitore affinché il loro scanner smetta di segnalarle. Normative come il Cyber Resilience Act dell'UE chiedono ai fabbricanti di gestire le vulnerabilità nei componenti che distribuiscono, e VEX è un modo per indicare agli utenti quali sono pertinenti.
Mantenere VEX aggiornato
-
Gli stati cambiano. Una dichiarazione di solito inizia come
under_investigatione termina comenot_affected, oppure comeaffectede poifixed. Pubblichi ogni modifica; CISA richiede che la versione aumenti ogni volta. -
Le nuove release richiedono nuove dichiarazioni. Un verdetto
not_affectedper la 3.2.0 non dice nulla sulla 3.3.0. Lo ricontrolli ogni volta che cambiano il componente, la sua versione o la configurazione di build. - Tenga VEX separato dalla SBOM. La SBOM descrive una release e resta fissa. VEX continua a cambiare dopo il rilascio, quindi pubblicarlo come documento a sé evita di riemettere le SBOM.
- Pubblichi dove gli strumenti guardano. Accanto alla SBOM, come attestazione sull'immagine container o nel Suo feed di advisory, e indichi dove nella Sua policy di divulgazione. Veda la divulgazione coordinata delle vulnerabilità.
I limiti di VEX
-
È un'affermazione, non una prova. Una dichiarazione
not_affectedè la valutazione dell'autore. CISA raccomanda di legare crittograficamente l'identità dell'autore al documento, ma la maggior parte dei destinatari si fida di VEX perché si fida del fornitore. - Il silenzio non significa nulla. VEX non implica alcuno stato predefinito. Una vulnerabilità senza dichiarazione è sconosciuta, non priva di effetti sul prodotto.
- I formati non corrispondono uno a uno. CycloneDX usa stati e giustificazioni diversi da OpenVEX e CSAF, quindi le conversioni perdono dettagli.
- Vale quanto l'inventario. Dire che un componente non è presente richiede di sapere esattamente che cosa contiene il prodotto, comprese le dipendenze transitive e tutto ciò che la build ha scaricato al di fuori del package manager.
VEX parte da una SBOM accurata
Ogni dichiarazione VEX rimanda a dei componenti, e la giustificazione più facile da difendere, component_not_present, è
vera solo se l'inventario è completo. Una SBOM generata scansionando i lockfile a posteriori può elencare dipendenze di sviluppo che
non vengono mai distribuite e non vedere i pacchetti che la build ha scaricato in altro modo.
CRACI esegue le build GitHub Actions sui propri runner e registra i pacchetti effettivamente scaricati da ciascun job, comprese le dipendenze transitive, i pacchetti ripristinati dalle cache e le dipendenze che nessun lockfile elenca. Ogni SBOM riporta uno stato di completezza e si esporta in CycloneDX o SPDX. Le SBOM monitorate vengono rivalutate di continuo, la cronologia delle build mostra quali build passate contenevano una dipendenza vulnerabile, e CRACI supporta VEX. Veda la generazione di SBOM e il monitoraggio delle vulnerabilità.
VEX: domande frequenti
Che cosa significa VEX?
VEX sta per Vulnerability Exploitability eXchange. È una dichiarazione leggibile da una macchina che indica se un prodotto è interessato da una specifica vulnerabilità nota, pubblicata affinché gli utenti sappiano quali vulnerabilità segnalate richiedono un intervento.
Qual è la differenza tra una SBOM e VEX?
Una SBOM elenca i componenti di un prodotto. VEX dice, per una data vulnerabilità, se quel prodotto è interessato. La SBOM cambia raramente dopo una release; le dichiarazioni VEX cambiano man mano che il fornitore indaga e corregge. Per questo VEX viene di solito pubblicato come documento separato che fa riferimento al prodotto, invece di essere incorporato nella SBOM.
Quali sono i quattro stati VEX?
not_affected, affected, fixed e under_investigation. Una dichiarazione not_affected richiede una giustificazione o un impact statement, e una dichiarazione affected richiede un action statement che indichi che cosa dovrebbero fare gli utenti.
Quale formato VEX dovrei usare?
Usi quello letto dai Suoi destinatari e dai loro strumenti. OpenVEX è il più piccolo e funziona con Trivy e Grype. CycloneDX VEX è adatto ai team che distribuiscono già SBOM CycloneDX. CSAF VEX è adatto alle organizzazioni che pubblicano già advisory di sicurezza CSAF, cosa comune nel software industriale ed enterprise. Molti fornitori finiscono per convertire da uno all'altro.
VEX è la stessa cosa di un advisory di sicurezza?
No. Un advisory di sicurezza spiega una vulnerabilità, chi è interessato e come correggerla, soprattutto per le persone. VEX è uno stato circoscritto e leggibile da una macchina per prodotto e vulnerabilità, soprattutto per gli strumenti. I due spesso viaggiano insieme: lo standard CSAF ha sia un profilo per gli advisory di sicurezza sia un profilo VEX.
Chi scrive i documenti VEX?
Di solito il fornitore del prodotto, spesso il suo product security incident response team (PSIRT), perché sa come il prodotto è compilato e configurato. I requisiti minimi di CISA consentono anche a terze parti di redigere VEX, e ogni documento deve indicare il proprio autore.
Gli scanner di vulnerabilità leggono VEX?
Diversi sì. Trivy accetta OpenVEX, CycloneDX e CSAF VEX tramite la sua opzione --vex ed elimina i risultati contrassegnati come not_affected. Grype accetta OpenVEX e CSAF VEX tramite --vex e sposta i risultati not_affected e fixed in un elenco di elementi ignorati.
Sappia quali pacchetti vulnerabili contengono le Sue build
Una dichiarazione VEX vale quanto l'inventario su cui si basa. Prenoti una demo per vedere i pacchetti effettivamente scaricati da ogni build GitHub Actions.
Prenota una demo