You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
OpenVEX is an implementation of Vulnerability Exploitability eXchange (VEX)
6
6
designed to be lightweight, and embeddable while meeting all requirements of
7
-
a valid VEX implementation as defined in the [Minimum Requirements for VEX] document published on April 2023 as defined by the VEX Working Group coordinated by the [Cybersecurity & Infrastructure Security
8
-
Agency](https://www.cisa.gov/) (CISA).
7
+
a valid VEX implementation as defined in the [Minimum Requirements for VEX]
8
+
document published on April 2023 as defined by the VEX Working Group coordinated
9
+
by the [Cybersecurity & Infrastructure Security Agency](https://www.cisa.gov/) (CISA).
9
10
10
11
11
12
## The VEX Statement
@@ -110,8 +111,8 @@ expected to flow.
110
111
#### Subcomponent
111
112
112
113
Any components possibly included in the product where the vulnerability originates.
113
-
The subcomponents SHOULD also be software identifiers and they SHOULD also be
114
-
listed in the product SBOM. subcomponents will most often be one or more of the
114
+
The subcomponents SHOULD also list software identifiers and they SHOULD also be
115
+
listed in the product SBOM. `subcomponents` will most often be one or more of the
115
116
product's dependencies.
116
117
117
118
### Document
@@ -133,10 +134,12 @@ Here is a sample of a minimal OpenVEX document:
@@ -190,12 +195,10 @@ The following table lists the fields of the OpenVEX statement struct.
190
195
| --- | --- | --- |
191
196
|@id| ✕ | Optional IRI identifying the statement to make it externally referenceable. |
192
197
| version | ✕ | Optional integer representing the statement's version number. Defaults to zero, required when incremented. |
193
-
| vulnerability | ✓ | Vulnerability SHOULD use existing and well known identifiers. For example: [CVE](https://cve.mitre.org/), [OSV](https://osv.dev/), [GHSA](https://github.com/advisories), a supplier's vulnerability tracking system such as [RHSA](https://access.redhat.com/security/security-updates/#/) or a propietary system. It is expected that vulnerability identification systems are external to and maintained separately from VEX.<br>`vulnerability` MAY be an IRI and MAY be arbitrary, created by the VEX document `author`. |
194
-
| vuln_description | ✕ | Optional free-form text describing the vulnerability |
198
+
| vulnerability | ✓ | A struct identifying the vulnerability. See the [Vulnerability Data Structure] section below for the complete data structure reference. |
195
199
| timestamp | ✕ | Timestamp is the time at which the information expressed in the Statement was known to be true. Cascades down from the document, see [Inheritance](#Inheritance). |
196
200
| last_updated | ✕ | Timestamp when the statement was last updated. |
197
-
| products | ✕ | Product identifiers that the statement applies to. Any software identifier can be used and SHOULD be traceable to a described item in an SBOM. The use of [Package URLs](https://github.com/package-url/purl-spec) (purls) is recommended. While a product identifier is required to have a complete statement, this field is optional as it can cascade down from the encapsulating document, see [Inheritance](#Inheritance). |
198
-
| subcomponents | ✕ | Identifiers of components where the vulnerability originates. While the statement asserts about the impact on the software product, listing `subcomponents` let scanners find identifiers to match their findings. |
201
+
| products | ✕ | List of product structs that the statement applies to. See the [Product Data Structure] section below for the full description. While a product is required to have a complete statement, this field is optional as it can cascade down from the encapsulating document, see [Inheritance](#Inheritance). |
199
202
| status | ✓ | A VEX statement MUST provide the status of the vulnerabilities with respect to the products and components listed in the statement. `status` MUST be one of the labels defined by VEX (see [Status](#Status-Labels)), some of which have further options and requirements. |
200
203
| supplier | ✕ | Supplier of the product or subcomponent. |
201
204
| status_notes | ✕ | A statement MAY convey information about how `status` was determined and MAY reference other VEX information. |
@@ -218,9 +221,11 @@ readable justification labels and optionally enrich the statement with an
These fields are shared by both the `product` and `subcomponent` structs:
280
+
281
+
| Field | Required | Description |
282
+
| --- | --- | --- |
283
+
|@id| ✕ | Optional [IRI](#IRI) identifying the component to make it externally referenceable. |
284
+
| identifiers | ✕ | A map of software identifiers where the key is the type and the value the identifier. OpenVEX favors the use of purl but others are recognized (see the Identifiers Labels table below) |
285
+
| hashes | ✕ | Map of cryptographic hashes of the component. The key is the algorithm name based on the [Hash Function Textual Names](https://www.iana.org/assignments/named-information/named-information.xhtml) from IANA. See [Hash Names Table] for the full supported list. |
286
+
287
+
The `product` struct uses the above listed fields but has a list of subcomponents,
288
+
each itself a `component` subclass:
289
+
290
+
| Field | Required | Description |
291
+
| --- | --- | --- |
292
+
| subcomponents | ✕ | List of `component` structs describing the subcomponents subject of the VEX statement. |
293
+
294
+
### Vulnerability Data Structure
295
+
296
+
The vulnerability field in an OpenVEX statement takes the value of a struct that
297
+
has the capability to enumerate the vulnerability name and other aliases that may
298
+
be used to track it in different databases and systems.
299
+
300
+
As with the product field, the vulberability has an optional "@id" field that
301
+
takes an IRI to make the field referenceable in the document and linkable from
| 2023-07-18 | Updated spec to reflect changes in [OPEV-0015: Expansion of the Vulnerability Field](https://github.com/openvex/community/blob/main/enhancements/opev-0015.md)|
636
+
| 2023-07-18 | Updated spec to reflect changes in [OPEV-0014: Expansion of the VEX Product Field](https://github.com/openvex/community/blob/main/enhancements/opev-0014.md)|
475
637
| 2023-07-18 | Bumped version of the spec to v0.0.2 after update to meet the VEX-WG doc. |
476
638
| 2023-06-01 | Removed supplier from the document level (following VEX-WG doc). |
477
639
| 2023-05-29 | Specification updated to reflect the published [Minimum Requirements for VEX] document. |
@@ -489,3 +651,4 @@ alert and dashboards could present users with the official guidance from the pro
0 commit comments