Skip to content

Commit d919792

Browse files
authored
Merge pull request #25 from puerco/minimum-reqs-update
Update spec to final VEX-WG document
2 parents 07cfbe5 + 4a0fbbd commit d919792

File tree

1 file changed

+34
-24
lines changed

1 file changed

+34
-24
lines changed

OPENVEX-SPEC.md

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
# OpenVEX Specification v0.0.0
1+
# OpenVEX Specification v0.0.2
22

33
## Overview
44

55
OpenVEX is an implementation of Vulnerability Exploitability eXchange (VEX)
66
designed to be lightweight, and embeddable while meeting all requirements of
7-
a valid VEX implementation as defined in the [Minimum Requirements for Vulnerability
8-
Exploitability eXchange (VEX)](http://example.com) document published on XXX
9-
by the VEX working group coordinated by the [Cybersecurity & Infrastructure
10-
Security Agency](https://www.cisa.gov/) (CISA).
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).
119

1210

1311
## The VEX Statement
@@ -132,7 +130,7 @@ Here is a sample of a minimal OpenVEX document:
132130
"author": "Wolfi J Inkinson",
133131
"role": "Document Creator",
134132
"timestamp": "2023-01-08T18:02:03.647787998-06:00",
135-
"version": "1",
133+
"version": 1,
136134
"statements": [
137135
{
138136
"vulnerability": "CVE-2023-12345",
@@ -153,14 +151,14 @@ The following table lists the fields in the document struct
153151

154152
| Field | Required | Description |
155153
| --- | --- | --- |
156-
| @context || The URL linking to the OpenVEX context definition. Fixed to `https://openvex.dev/ns`. |
157-
| @id || The IRI identifying the VEX document. |
158-
| author || Author is the identifier for the author of the VEX statement. Ideally, a common name, may be a URI. `author` can be an individual or organization. The author identity SHOULD be cryptographically associated with the signature of the VEX statement or document or transport. |
159-
| role | | role describes the role of the document author. |
154+
| @context || The URL linking to the OpenVEX context definition. Fixed to `https://openvex.dev/ns` before 1.0 is released. |
155+
| @id || The IRI identifying the VEX document. |
156+
| author || Author is the identifier for the author of the VEX statement. This field should ideally be a machine readable identifier such as an IRI, email address, etc. `author` MUST be an individual or organization. `author` identity SHOULD be cryptographically associated with the signature of the VEX document or other exchange mechanism. |
157+
| role | | role describes the role of the document author. |
160158
| timestamp || Timestamp defines the time at which the document was issued. |
161-
| version | | Version is the document version. It must be incremented when any content within the VEX document changes, including any VEX statements included within the VEX document. |
162-
| tooling | | Tooling expresses how the VEX document and contained VEX statements were generated. It's optional. It may specify tools or automated processes used in the document or statement generation. |
163-
| supplier || An optional field specifying who is providing the VEX document. |
159+
| last_updated | | Date of last modification to the document. |
160+
| version | | Version is the document version. It must be incremented when any content within the VEX document changes, including any VEX statements included within the VEX document. |
161+
| tooling || Tooling expresses how the VEX document and contained VEX statements were generated. It may specify tools or automated processes used in the document or statement generation. |
164162

165163
### Statement
166164

@@ -190,12 +188,16 @@ The following table lists the fields of the OpenVEX statement struct.
190188

191189
| Field | Required | Description |
192190
| --- | --- | --- |
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 URIs or URLs.<br>vulnerability MAY be arbitrary and MAY be created by the VEX statement `author`.
191+
| @id || Optional IRI identifying the statement to make it externally referenceable. |
192+
| 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`. |
194194
| vuln_description || Optional free-form text describing the vulnerability |
195195
| 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+
| last_updated || Timestamp when the statement was last updated. |
196197
| 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). |
197198
| 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. |
198-
| 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. |
199+
| 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+
| supplier || Supplier of the product or subcomponent. |
199201
| status_notes || A statement MAY convey information about how `status` was determined and MAY reference other VEX information. |
200202
| justification | ✓/✕ | For statements conveying a `not_affected` status, a VEX statement MUST include either a status justification or an impact_statement informing why the product is not affected by the vulnerability. Justifications are fixed labels defined by VEX. See [Status Justifications](#Status-Justifications) below for valid values. |
201203
| impact_statement | ✓/✕ | For statements conveying a `not_affected` status, a VEX statement MUST include either a status justification or an impact_statement informing why the product is not affected by the vulnerability. An impact statement is a free form text containing a description of why the vulnerability cannot be exploited. This field is not intended to be machine readable so its use is highly discouraged for automated systems. |
@@ -253,7 +255,7 @@ why the vulnerability is not affected by reading the justification label
253255
associated with the VEX statement. These labels are predefined and machine-readable
254256
to enable automated uses such as deployment policies. The current label catalog
255257
was defined by the VEX Working Group and published in the
256-
[Status Justifications](status-doc) document on July 2022.
258+
[Status Justifications] document on July 2022.
257259

258260

259261
| Label | Description |
@@ -333,7 +335,7 @@ example, the sole statement has its timestamp data derived from the document:
333335
"author": "Wolfi J Inkinson",
334336
"role": "Document Creator",
335337
"timestamp": "2023-01-08T18:02:03-06:00",
336-
"version": "1",
338+
"version": 1,
337339
"statements": [
338340
{
339341
"vulnerability": "CVE-2023-12345",
@@ -358,7 +360,7 @@ to avoid duplication:
358360
"author": "Wolfi J Inkinson",
359361
"role": "Document Creator",
360362
"timestamp": "2023-01-09T09:08:42-06:00",
361-
"version": "1",
363+
"version": 1,
362364
"statements": [
363365
{
364366
"timestamp": "2023-01-08T18:02:03-06:00",
@@ -448,7 +450,7 @@ the project could issue an OpenVEX document as follows:
448450
"author": "Spring Builds <spring-builds@users.noreply.github.com>",
449451
"role": "Project Release Bot",
450452
"timestamp": "2023-01-16T19:07:16.853479631-06:00",
451-
"version": "1",
453+
"version": 1,
452454
"statements": [
453455
{
454456
"vulnerability": "CVE-2021-44228",
@@ -470,12 +472,20 @@ alert and dashboards could present users with the official guidance from the pro
470472

471473
| Date | Revision |
472474
| --- | --- |
473-
| 2023-01-08 | First Draft of the OpenVEX Specification |
474-
| 2023-01-16 | Updated specx draft to reflect initial review |
475-
| 2023-01-16 | Added JSON-LD and namespace section |
476-
| 2023-01-16 | Add example section |
475+
| 2023-07-18 | Bumped version of the spec to v0.0.2 after update to meet the VEX-WG doc. |
476+
| 2023-06-01 | Removed supplier from the document level (following VEX-WG doc). |
477+
| 2023-05-29 | Specification updated to reflect the published [Minimum Requirements for VEX] document. |
478+
| 2023-01-08 | First Draft of the OpenVEX Specification. |
479+
| 2023-01-16 | Updated specx draft to reflect initial review. |
480+
| 2023-01-16 | Added JSON-LD and namespace section. |
481+
| 2023-01-16 | Add example section. |
482+
| 2023-05-29 | Added missing fields to match the VEX-WG's [Minimum Requirements for VEX] document. |
477483

478484

479485
## Sources
480486

481-
status-doc: https://www.cisa.gov/sites/default/files/publications/VEX_Status_Justification_Jun22.pdf
487+
* Vulnerability Exploitability eXchange (VEX) - [Status Justifications]
488+
* [Minimum Requirements for VEX] document, published by CISA.
489+
490+
[Status Justifications]: https://www.cisa.gov/sites/default/files/publications/VEX_Status_Justification_Jun22.pdf
491+
[Minimum Requirements for VEX]: https://www.cisa.gov/sites/default/files/2023-04/minimum-requirements-for-vex-508c.pdf

0 commit comments

Comments
 (0)