Skip to content

Commit 0e3c410

Browse files
Content updates
1 parent 8c2b519 commit 0e3c410

9 files changed

+155
-80
lines changed

CBOM/en/0x02-Preface.md

+18-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,26 @@
11
# Preface
22

3-
Secure supply chains are the foundational building block of modern cyber security. Without being able to describe a system’s components in a machine-consumable way, organizations and software consumers are in the dark if they are at risk of exploitation of known defects or vulnerabilities.
3+
Welcome to the Authoritative Guide series by the OWASP Foundation and OWASP CycloneDX. In this series, we aim to
4+
provide comprehensive insights and practical guidance, ensuring that security professionals, developers, and
5+
organizations alike have access to the latest best practices and methodologies.
46

5-
Software authors, from hobbyists to software vendors, can quickly adopt CycloneDX in their tooling, producing artifacts that will help consumers understand and manage the risk of the multitude of software that most organizations rely on daily.
7+
At the heart of the OWASP Foundation lies a commitment to inclusivity and openness. We firmly believe that everyone
8+
deserves a seat at the table when it comes to shaping the future of cybersecurity standards. Our collaborative
9+
model fosters an environment where diverse perspectives converge to drive innovation and excellence.
610

7-
A few years ago, I was involved in a project to review 1700 business-critical applications in 90 days for known software vulnerabilities. If the organization had access to CycloneDX SBOMs, this would have been a trivial task, time that could have been more usefully spent on remediation rather than discovery. Sadly, most of the time was spent working out what software had old faulty components rather than addressing the very real risk of known software vulnerabilities. We were plagued with false positives from the tooling we used simply because scanning software without SBOMs is a heuristic-driven discovery process that is inefficient and wastes a great deal of time we didn’t have. SBOMs resolve these issues, reduce costs, and reduce risk to all involved.
11+
In line with this ethos, the OWASP Foundation has partnered with Ecma International to create an inclusive,
12+
community-driven ecosystem for security standards development. This collaboration empowers individuals to contribute
13+
their expertise and insights, ensuring that standards like CycloneDX reflect the collective wisdom of the global
14+
cybersecurity community.
815

9-
I commend the CycloneDX team for a highly polished revision of their standard, one that evolves the state of the art.
16+
One standout example of this model is OWASP CycloneDX, which is on track to becoming an Ecma International
17+
standard through Technical Committee 54 (TC54). By leveraging the strengths of both organizations, CycloneDX is poised
18+
to become a cornerstone of security best practices, providing organizations with a universal standard for software and
19+
system transparency.
20+
21+
As you embark on your journey through this Authoritative Guide, we encourage you to engage actively with the content
22+
and join us in shaping the future of cybersecurity standards. Together, we can build a safer and more resilient digital
23+
world for all.
1024

1125
---
1226

CBOM/en/0x40-Practical-Examples.md

+1-5
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,7 @@ AES-128-GCM and SHA512withRSA.
5151
}
5252
]
5353
```
54-
A complete example can be found at [https://cyclonedx.org/shortcut/example/algorithm](https://cyclonedx.org/shortcut/example/algorithm)
55-
56-
<div style="page-break-after: always; visibility: hidden">
57-
\newpage
58-
</div>
54+
A complete example can be found at [https://cyclonedx.org/shortcut/example/algorithm](https://cyclonedx.org/shortcut/example/algorithm)
5955

6056
An example with the QSC Signature algorithm Dilithium5 is listed below.
6157

CBOM/en/0x41-Dependencies.md

-44
This file was deleted.

CBOM/en/0x50-Dependencies.md

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# Dependencies
2+
3+
CycloneDX provides the ability to describe components and their dependency on other components. This relies on a
4+
component's `bom-ref` to associate the component with the dependency element in the graph. The only requirement for `bom-ref`
5+
is that it is unique within the BOM. Package URL (PURL) is an ideal choice for `bom-ref` as it will be both unique and
6+
readable. If PURL is not an option or not all components represented in the BOM contain a PURL, then UUID is recommended.
7+
A dependency graph is capable of representing both direct and transitive relationships. In CycloneDX representation
8+
`dependencies`, a dependency graph SHOULD be codified to be one node deep, meaning no nested child graphs. All
9+
relations are on the same level.
10+
11+
Refer to the [CycloneDX Authoritative Guide to SBOM](https://cyclonedx.org/guides/) for additional details.
12+
13+
In the context of cryptographic dependencies, CycloneDX provides some additional capabilities. As of CycloneDX v1.6,
14+
there are two types of dependencies: `dependsOn` and `provides`.
15+
16+
| Dependency Type | Description |
17+
| --------------- | ------------|
18+
| `dependsOn` | The `bom-ref` identifiers of the components or services that are dependencies of this dependency object. |
19+
| `provides` | The `bom-ref` identifiers of the components or services that define a given specification or standard, which are provided or implemented by this dependency object. For example, a cryptographic library that implements a cryptographic algorithm. A component that implements another component does not imply that the implementation is in use. |
20+
21+
22+
The dependency type, dependsOn, is leveraged by classic SBOMs to define a complete graph of direct and transitive
23+
dependencies. However, for cryptographic and similar assets, "provides" allows for many additional use cases.
24+
25+
![Dependencies](./images/dependencies.svg)
26+
27+
The example shows an application (nginx) that uses the libssl cryptographic library. This library implements the TLSv1.2
28+
protocol. The relationship between the application, the library and the protocol can be expressed by using the
29+
dependencies properties of the SBOM standard.
30+
31+
Since a TLS protocol supports different cipher suites that include multiple algorithms, there should be a way to
32+
represent these relationships as part of the CBOM. Compared to adding the algorithms as "classic" dependencies to the
33+
protocol, we defined special property fields that allow referencing the deployment with additional meaning.
34+
The protocolProperties allows adding an array of algorithms to a cipher suite as part of the cipher suite array.
35+
By modeling and then referencing these algorithms, we can still have only one classical component at the SBOM level but
36+
a subtree of crypto dependencies within the crypto asset components.
37+
38+
The following example illustrates a simple application with a dependency on a cryptographic library, which, in turn,
39+
implements AES-128-GCM. The cryptographic library also depends on another library.
40+
41+
```json
42+
"dependencies": [
43+
{
44+
"ref": "acme-application",
45+
"dependsOn": ["crypto-library"]
46+
},
47+
{
48+
"ref": "crypto-library",
49+
"provides": ["aes128gcm"],
50+
"dependsOn": ["some-library"]
51+
}
52+
]
53+
```
54+
55+
<div style="page-break-after: always; visibility: hidden">
56+
\newpage
57+
</div>

CBOM/en/0x50-Linking.md

-6
This file was deleted.

CBOM/en/0x60-Attestations.md

-17
This file was deleted.

CBOM/en/0x60-Linking.md

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Decoupling CBOM From SBOM With BOM-Link
2+
With CycloneDX, it is possible to reference a BOM, or a component, service, or vulnerability inside a BOM from other
3+
systems or other BOMs. This deep-linking capability is referred to as BOM-Link and is a
4+
[formally registered URN](https://www.iana.org/assignments/urn-formal/cdx), governed by [IANA](https://www.iana.org),
5+
and compliant with [RFC-8141](https://www.rfc-editor.org/rfc/rfc8141.html).
6+
7+
**Syntax**:
8+
```ini
9+
urn:cdx:serialNumber/version#bom-ref
10+
```
11+
12+
**Examples**:
13+
```ini
14+
urn:cdx:f08a6ccd-4dce-4759-bd84-c626675d60a7/1
15+
urn:cdx:f08a6ccd-4dce-4759-bd84-c626675d60a7/1#componentA
16+
```
17+
18+
| Field | Description |
19+
| ------------ | --------------------------------------------------------------------------------- |
20+
| serialNumber | The unique serial number of the BOM. The serial number MUST conform to RFC-4122. |
21+
| version | The version of the BOM. The default version is `1`. |
22+
| bom-ref | The unique identifier of the component, service, or vulnerability within the BOM. |
23+
24+
There are many use cases that BOM-Link supports. Two common scenarios are:
25+
* Reference one BOM from another BOM
26+
* Reference a specific component or service in one BOM from another BOM
27+
28+
### Linking an SBOM to a CBOM
29+
In CycloneDX, external references point to resources outside the object they're associated with and may be
30+
external to the BOM, or may refer to resources within the BOM. External references can be applied to individual
31+
components, services, or to the BOM itself.
32+
33+
The following example illustrates how an application in an SBOM can reference an external CBOM:
34+
35+
```json
36+
"components": [
37+
{
38+
"type": "application",
39+
"name": "Acme Application",
40+
"version": "1.0.0",
41+
"externalReferences": [
42+
{
43+
"type": "bom",
44+
"url": "https://example.com/bom/acme-application-1.0.0-cbom.cdx.json",
45+
"hashes": [ {
46+
"alg": "SHA-256",
47+
"content": "708f1f53b41f11f02d12a11b1a38d2905d47b099afc71a0f1124ef8582ec7313"
48+
} ]
49+
}
50+
]
51+
}
52+
]
53+
```

CBOM/en/0x70-Attestations.md

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Attestations
2+
CycloneDX Attestations is a modern standard for security compliance. CycloneDX Attestations enable organizations with a
3+
machine-readable format for communication about security standards, claims and evidence about security requirements, and
4+
attestations to the veracity and completeness of those claims. You can think of Attestations as a way to manage
5+
"compliance as code."
6+
7+
## Cryptography Standards
8+
Organizations can declare the cryptography standards they follow, such as NIST or FIPS, in a CycloneDX Attestation.
9+
This helps ensure that all parties involved in the software development and deployment process are aware of the required
10+
cryptography standards.
11+
12+
By providing evidence such as test results, code reviews or other documents that prove that their software meets the
13+
cryptography requirements, they enable automatic verification of compliance with the requirements. For example, it can be
14+
verified that only approved cryptography algorithms are used and implemented correctly.
15+
16+
CycloneDX Attestations can also be used to manage compliance with cryptography requirements over time. As new
17+
weaknesses are discovered or standards change, organizations can update their applications, and therefore their
18+
attestations, to reflect the changes and ensure ongoing compliance.
19+
20+
Refer to the [CycloneDX Authoritative Guide to Attestations](https://cyclonedx.org/guides/) for additional details.

SBOM/en/0x50-Relationships.md

+6-4
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,13 @@ themselves may not be directly accessible; rather, they are accessed exclusively
6363
scenario, the API gateway service may contain an assembly of microservices behind it.
6464

6565
## Dependencies
66-
CycloneDX provides the ability to describe components and their dependency on other components. This relies on a
67-
component's `bom-ref` to associate the component with the dependency element in the graph. The only requirement for `bom-ref`
68-
is that it is unique within the BOM. Package URL (PURL) is an ideal choice for `bom-ref` as it will be both unique and
66+
CycloneDX provides the ability to describe components and their dependency on other components. This relies on a
67+
component's `bom-ref` to associate the component with the dependency element in the graph. The only requirement for `bom-ref`
68+
is that it is unique within the BOM. Package URL (PURL) is an ideal choice for `bom-ref` as it will be both unique and
6969
readable. If PURL is not an option or not all components represented in the BOM contain a PURL, then UUID is recommended.
70-
A general dependency graph is unspecified deep and capable of representing both direct and transitive relationships. In CycloneDX representation `dependencies`, a dependency graph SHOULD be codified to be one node deep, meaning no nested child-graphs but all relations on the same level.
70+
A dependency graph is capable of representing both direct and transitive relationships. In CycloneDX representation
71+
`dependencies`, a dependency graph SHOULD be codified to be one node deep, meaning no nested child graphs. All
72+
relations are on the same level.
7173

7274
![Sample Dependency Graph](images/dependency-graph.svg)
7375

0 commit comments

Comments
 (0)