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
This commit adds two annexes to the 3.0 spec:
1) How to include security information using SPDX-3.0
2) How to comply with various requirements (i.e. NTIA minimums) using
SPDX-3.0
Signed-off-by: Rose Judge <[email protected]>
Signed-off-by: Karsten Klein <[email protected]>
Copy file name to clipboardexpand all lines: docs/annexes/including-security-information-in-SPDX.md
+100-40
Original file line number
Diff line number
Diff line change
@@ -1,41 +1,46 @@
1
-
# 1. Including security information in a SPDX document
1
+
# Annex G: Including Security Information in a SPDX document
2
2
3
-
SPDX 3.0 has the concept of an [__External Reference__](https://github.com/spdx/spdx-3-model/blob/main/model/Core/Classes/ExternalRef.md) for an Element which points to "a resource outside the scope of the SPDX-3.0 content that provides additional characteristics of an Element."
3
+
The flexibility of SPDX 3.0 allows users to either link SBOMs to external security vulnerability data or to embed security vulnerability information in the SPDX 3.0 data format. For more details about the differences, read ["Capturing Software Vulnerability Data in SPDX 3.0"](https://spdx.dev/capturing-software-vulnerability-data-in-spdx-3-0/).
4
+
5
+
## G.1 External References and External Identifiers
6
+
SPDX 3.0 has the concept of an [__External Reference__](https://github.com/spdx/spdx-3-model/blob/main/model/Core/Classes/ExternalRef.md) for an Element which points to a general resource outside the scope of the SPDX-3.0 content that provides additional context or information about an Element.
4
7
5
8
The specification for External Reference types has many [type options](https://github.com/spdx/spdx-3-model/blob/main/model/Core/Vocabularies/ExternalRefType.md), a large handful of which pertain specifically to security use cases:
6
9
7
-
* secureSoftwareAttestation: A reference to information assuring that the software is developed using security practices as defined by [NIST SP 800-218 Secure Software Development Framework (SSDF)](https://csrc.nist.gov/publications/detail/sp/800-218/final) or [CISA Secure Software Development Attestation Form](https://www.cisa.gov/sites/default/files/2023-04/secure-software-self-attestation_common-form_508.pdf).
8
-
* securityAdvisory: A reference to a published security advisory (where advisory as defined per ISO 29147:2018) that may affect one or more elements, e.g., vendor advisories or specific NVD entries.
9
-
* securityAdversaryModel: A reference to the security adversary model for a package.
10
-
* securityFix: A reference to the patch or source code that fixes a vulnerability.
11
-
* securityOther: A reference to related security information of unspecified type.
12
-
* securityPenTestReport: A reference to a [penetration test](https://en.wikipedia.org/wiki/Penetration_test) report for a package.
13
-
* securityPolicy: A reference to instructions for reporting newly discovered security vulnerabilities for a package.
14
-
* securityThreatModel: A reference the [security threat model](https://en.wikipedia.org/wiki/Threat_model) for a package.
15
-
* vulnerabilityDisclosureReport: A reference to a Vulnerability Disclosure Report (VDR) which provides the software supplier's analysis and findings describing the impact (or lack of impact) that reported vulnerabilities have on packages or products in the supplier's SBOM as defined in [NIST SP 800-161](https://csrc.nist.gov/publications/detail/sp/800-161/rev-1/final).
16
-
* vulnerabilityExploitabilityAssessment: A reference to a Vulnerability Exploitability eXchange (VEX) statement which provides information on whether a product is impacted by a specific vulnerability in an included package and, if affected, whether there are actions recommended to remediate.
10
+
* cwe
11
+
* secureSoftwareAttestation
12
+
* securityAdvisory
13
+
* securityAdversaryModel
14
+
* securityFix
15
+
* securityOther
16
+
* securityPenTestReport
17
+
* securityPolicy
18
+
* securityThreatModel
19
+
* vulnerabilityDisclosureReport
20
+
* vulnerabilityExploitabilityAssessment
17
21
18
22
19
-
SPDX 3.0 also has the concept of [__External Identifier__](https://github.com/spdx/spdx-3-model/blob/main/model/Core/Classes/ExternalIdentifier.md) which should be used to "...".
23
+
SPDX 3.0 also has the concept of [__External Identifier__](https://github.com/spdx/spdx-3-model/blob/main/model/Core/Classes/ExternalIdentifier.md) which should be used in cases where an identifier scheme exists and is already defined for an Element outside of SPDX-3.0.
20
24
21
25
There are several External Identifier [types](https://github.com/spdx/spdx-3-model/blob/main/model/Core/Vocabularies/ExternalIdentifierType.md) that may be used in a security context:
* cve: An identifier for a specific software flaw defined within the official CVE Dictionary and that conforms to the CVE specification as defined by https://csrc.nist.gov/glossary/term/cve_id.
26
-
* securityOther: Used when there is a security related identifier of unspecified type.
27
+
* cpe22
28
+
* cpe23
29
+
* cve
30
+
* packageUrl
31
+
* securityOther
27
32
28
33
29
34
This section provides usage scenarios of how to leverage the Security External References and External Identifiers specified above to refer to external security information. Examples of how to use each category can be found in the [Security/Classes](https://github.com/spdx/spdx-3-model/tree/main/model/Security/Classes) pages. Multiple instances and types of external security information may be included within a SPDX document.
30
35
31
-
## 1.1 Linking to an advisory
36
+
## G.1.1 Linking to an Advisory
32
37
33
38
To reference a Common Vulnerabilities and Exposures (CVE) advisory applicable to a package, you must first create a [Vulnerability Element](https://github.com/spdx/spdx-3-model/blob/main/model/Security/Classes/Vulnerability.md). You can then use ExternalIdentifiers or ExternalRefs to supplement the CVE with associated external metadata.
34
39
35
40
```json
36
41
{
37
42
"@type": "Vulnerability",
38
-
"@id": "urn:spdx.dev:vuln-1",
43
+
"@id": "urn:spdx.dev:cve-2020-2849",
39
44
"summary": "Use of a Broken or Risky Cryptographic Algorithm",
40
45
"description": "The npm package `elliptic` before version 6.5.4 are vulnerable to Cryptographic Issues via the secp256k1 implementation in elliptic/ec/key.js. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.",
41
46
"modified": "2021-03-08T16:06:43Z",
@@ -53,7 +58,7 @@ To reference a Common Vulnerabilities and Exposures (CVE) advisory applicable to
@@ -78,15 +83,69 @@ To reference a Common Vulnerabilities and Exposures (CVE) advisory applicable to
78
83
}
79
84
```
80
85
81
-
## 1.2 Linking to a CSAF
86
+
## G.1.2 Linking to a CSAF Document
87
+
88
+
To reference [CSAF](https://docs.oasis-open.org/csaf/csaf/v2.0/cs01/csaf-v2.0-cs01.html) formatted security information see below for examples.
89
+
90
+
### G.1.2.1 Linking to a CSAF VEX
91
+
To reference a CSAF VEX document, include an external reference of type `vulnerabilityExploitabilityAssessment` on the Vulnerability Element that encapsulates the CVE described in the CSAF VEX document.
92
+
93
+
94
+
```json
95
+
{
96
+
"@type": "Vulnerability",
97
+
"@id": "urn:spdx.dev:vuln-2",
98
+
"name": "cve-2021-44228",
99
+
"description": "Apache Log4j2 2.0-beta9 through 2.15.0 (excluding security releases 2.12.2, 2.12.3, and 2.3.1) JNDI features used in configuration, log messages, and parameters do not protect against attacker controlled LDAP and other JNDI related endpoints. An attacker who can control log messages or log message parameters can execute arbitrary code loaded from LDAP servers when message lookup substitution is enabled.",
To reference [CSAF](https://docs.oasis-open.org/csaf/csaf/v2.0/cs01/csaf-v2.0-cs01.html) formatted security information, you would
84
-
applicable to a package see the example below.
85
143
144
+
## G.1.3 Linking to CycloneDX Security Data
86
145
87
-
## 1.3 Linking to a CycloneDX
146
+
To reference to [CycloneDX](https://cyclonedx.org) formatted security information applicable to a package you need to first create a Package Element.
88
147
89
-
To reference to [CycloneDX](https://cyclonedx.org) formatted security information applicable to a package you need to first create a Package Element. Then use an External Reference to link to the CycloneDX document which contains information about the package.
148
+
Using an External Reference, link the package to the matching component in the CycloneDX BOM. Link to it using its [BOM link](https://cyclonedx.org/capabilities/bomlink/), a URN formed by combining the CycloneDX serial number, version and bom-ref which contains the security information about the package.
90
149
91
150
```json
92
151
{
@@ -98,14 +157,13 @@ To reference to [CycloneDX](https://cyclonedx.org) formatted security informatio
**TODO: Do we create a vulnerability element from the OSV then use ExternalRef on the vulnerability or do we create a package and reference the OSV from there?**
166
+
## G.1.4 Linking to an OSV
109
167
110
168
To include a reference to [Open Source Vulnerability](https://github.com/google/osv) (OSV) formatted security information applicable to a package you need to first create a Package Element. Then use an External Reference to link to the OSV advisory.
111
169
@@ -126,10 +184,10 @@ To include a reference to [Open Source Vulnerability](https://github.com/google/
126
184
```
127
185
128
186
129
-
## 1.5 Linking to an OmniBOR (formerly known as GitBOM)
187
+
## G.1.5 Linking to an OmniBOR (formerly known as GitBOM)
188
+
189
+
To identify a Package with an [OmniBOR](https://omnibor.io/) (Universal Bill Of Receipts, formerly known as GitBOM) gitoid, use an External Identifier to add gitoid to the package.
130
190
131
-
To reference an [OmniBOR](https://omnibor.io/) (Universal Bill Of Receipts) formatted security information applicable to a package you must first create a Package Element. Then use an External Identifier to link to the OmniBOR document.
132
-
**TODO: Why do we use External Identifier vs Ref here? and what's the identifier locator? do we want a different example here?**
133
191
134
192
```json
135
193
{
@@ -147,14 +205,14 @@ To reference an [OmniBOR](https://omnibor.io/) (Universal Bill Of Receipts) form
147
205
}
148
206
```
149
207
150
-
## 1.6 Linking to a vulnerability disclosure document
208
+
## G.1.6 Linking to a vulnerability disclosure document
151
209
152
-
To express a reference to a vulnerability disclosure document for a package such Cisco’s response to Apache log4j vulnerability. First create a package element, then use an External Reference to refer to the vulnerability disclosure document.
210
+
To express a reference to a vulnerability disclosure document for a package, use an External Reference for a Package Element. The example below shows Cisco’s response to Apache log4j vulnerability.
153
211
154
212
```json
155
213
{
156
214
"@type": "Package",
157
-
"@id": "urn:spdx.dev:apache-log4j",
215
+
"@id": "urn:spdx.dev:pkg-apache-log4j",
158
216
"name": "log4j",
159
217
"packageVersion": "2.14.0",
160
218
"externalRefs": [
@@ -187,7 +245,6 @@ To communicate that a package is not vulnerable to a specific vulnerability it i
187
245
188
246
To refer to a security disclosure feed, such as the security bulletins from [CERT-EU](https://cert.europa.eu), include an External Reference in the package Element.
189
247
190
-
**TODO: is this on the package element? We also need a new link as current one is invalid**
191
248
192
249
```json
193
250
{
@@ -205,7 +262,7 @@ To refer to a security disclosure feed, such as the security bulletins from [CER
205
262
}
206
263
```
207
264
208
-
## 1.7 Linking to a code fix for a security issue
265
+
## G.1.7 Linking to a Code Fix for a Security Issue
209
266
210
267
You can include a reference to a code fix for a security issue applicable to a Package or Vulnerability Element.
211
268
@@ -247,7 +304,7 @@ Alternatively, it may also link to a landing page with patches for a variety of
247
304
```
248
305
249
306
250
-
## 1.8 Linking to any security related document
307
+
## G.1.8 Linking to any Security Related Document
251
308
252
309
If you want to reference any security information related to a package but cannot or do not wish to specify its kind, use the `securityOther` externalRefType.
253
310
@@ -269,10 +326,13 @@ If you want to reference any security information related to a package but canno
269
326
```
270
327
271
328
One can also use it to refer to guidance related to a vulnerability such as CISA guidance for Apache Log4j.
272
-
**TODO: Is this still for the pakage element?**
273
329
274
330
```json
275
-
"externalRefs": [
331
+
"@type": "Package",
332
+
"@id": "urn:spdx.dev:pkg-apache-log4j",
333
+
"name": "log4j",
334
+
"packageVersion": "2.14.0",
335
+
"externalRefs": [
276
336
{
277
337
"@type": "ExternalRef",
278
338
"externalRefType": "securityOther",
@@ -281,7 +341,7 @@ One can also use it to refer to guidance related to a vulnerability such as CISA
281
341
]
282
342
```
283
343
284
-
## 1.9 Linking to an SBOM vulnerability report for a Software Product (per NIST Executive Order 14028)
344
+
## G.1.9 Linking to a Vulnerability Disclosure Report (VDR)
285
345
286
346
The National Institute of Standards and Technology (NIST) describes the concept of correlating vulnerability and SBOM information for a software product at the component level in “[Software Security in Supply Chains: Software Bill of Materials (SBOM)](https://www.nist.gov/itl/executive-order-14028-improving-nations-cybersecurity/software-security-supply-chains-software-1)”. Use the External Reference `vulnerabilityDisclosureReport` type to report on vulnerabilities related to the components contained in a software product’s SBOM.
Copy file name to clipboardexpand all lines: docs/annexes/using-SPDX-to-comply-with-industry-guidance.md
+6-6
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
-
# Annex F Using SPDX to comply with Norms, Standards and Regulation (Informative)
1
+
# Annex F: Using SPDX to comply with Norms, Standards and Regulation (Informative)
2
2
3
-
# F.1 Satisfying NTIA Minimum Elements for an SBOM using SPDX / US Executive Order 14028 <aname="F.1"></a>
3
+
##F.1 Satisfying NTIA Minimum Elements for an SBOM using SPDX / US Executive Order 14028 <aname="F.1"></a>
4
4
5
5
US Executive Order 14028 in conjunction with the National Telecommunications and Information Administration (NTIA) outlined minimum elements for an SBOM. The minimum elements are detailed in [NTIA's Framing Software Component Transparency: Establishing a Common Software Bill of Maternials](https://www.ntia.gov/files/ntia/publications/framingsbom_20191112.pdf) and [The Minimum Elements for a SBOM](https://www.ntia.doc.gov/files/ntia/publications/sbom_minimum_elements_report.pdf) documents and summarized below:
6
6
@@ -22,14 +22,14 @@ The SPDX Specification contains fields able to address each of the NTIA minimum
22
22
| ----------- | :----------- |
23
23
| Author Name |[Core/Classes/CreationInfo.createdBy](https://spdx.github.io/spdx-spec/v3.0/model/Core/Classes/CreationInfo/)|
24
24
| Supplier Name |[Core/Classes/Artifact.suppliedBy ](https://spdx.github.io/spdx-spec/v3.0/model/Core/Classes/Artifact/)|
25
-
| Component Name |[Software/Classes/Package.name](https://spdx.github.io/spdx-spec/v3.0/model/Software/Classes/Package/)|
25
+
| Component Name |[Software/Classes/Package.name](https://spdx.github.io/spdx-spec/v3.0/model/Software/Classes/Package/)inherited from [Core/Classes/Element.name](https://spdx.github.io/spdx-spec/v3.0/model/Core/Classes/Element/)|
26
26
| Version String |[Software/Classes/Package.packageVersion](https://spdx.github.io/spdx-spec/v3.0/model/Software/Classes/Package/)|
| Unique Identifier |[Core/Properties/spdxId](https://spdx.github.io/spdx-spec/v3.0/model/Core/Properties/spdxId/) for SPDX Elements <br>or [Core/Classes/ExternalIdentifier](https://spdx.github.io/spdx-spec/v3.0/model/Core/Classes/ExternalIdentifier/) for resources outside the scope of SPDX-3.0 content </br> |
| Unique Identifier |[Software/Classes/SoftwareArtifact.contentIdentifier](https://spdx.github.io/spdx-spec/v3.0/model/Software/Classes/SoftwareArtifact/) for SPDX Software Artifacts or [Software/Classes/Package.packageUrl](https://spdx.github.io/spdx-spec/v3.0/model/Software/Classes/Package/) if the packageUrl is considered to be unique,<br>or [Core/Classes/Element.externalIdentifier](https://spdx.github.io/spdx-spec/v3.0/model/Core/Classes/Element/) for resources outside the scope of SPDX-3.0 content </br> |
0 commit comments