Example, fictional, illustrative content.An excerpt of the SBOM for the gateway firmware of the fictional device, in CycloneDX 1.6 JSON, written by hand in the structure a Syft scan of build 2.4.0 produces. A scan assigns its own bom-ref values, here they are set to the SOUP IDs. The vulnerabilities block is not scanner output, an engineer adds it after the reachability check. Four components are shown. The full file lists every component, the operating system and the transitive dependencies. Each bom-ref is the SOUP ID of the component, so the SOUP inventory and the SBOM point to each other. The hashes are the ones the projects publish for their source releases (SHA3-256 of sqlite3.c for SQLite), and the vulnerability ID is a placeholder. In a real SBOM the hashes come from the build and describe the files that ship.
{
"bomFormat": "CycloneDX",
"specVersion": "1.6",
"serialNumber": "urn:uuid:e23dacfd-0f57-4635-9536-2fda9115f806",
"version": 7,
"metadata": {
"timestamp": "2026-09-30T08:00:00Z",
"authors": [{ "name": "Software team, fictional manufacturer" }],
"tools": { "components": [{ "type": "application", "name": "syft", "version": "1.52.0" }] },
"component": { "type": "firmware", "bom-ref": "gateway-fw",
"name": "example-gateway-firmware", "version": "2.4.0" }
},
"components": [
{ "type": "library", "bom-ref": "SOUP-002",
"supplier": { "name": "OpenSSL project", "url": ["https://openssl-library.org"] },
"name": "openssl", "version": "3.5.9",
"purl": "pkg:github/openssl/openssl@openssl-3.5.9",
"licenses": [{ "license": { "id": "Apache-2.0" } }],
"hashes": [{ "alg": "SHA-256", "content": "603f5602e2eef00d77fbd429d34dcd5822bb301757a1bc9cdb24c670f1eb859a" }] },
{ "type": "library", "bom-ref": "SOUP-003",
"supplier": { "name": "SQLite project", "url": ["https://sqlite.org"] },
"name": "sqlite", "version": "3.53.4",
"purl": "pkg:generic/sqlite@3.53.4",
"licenses": [{ "license": { "id": "blessing" } }],
"hashes": [{ "alg": "SHA3-256", "content": "67f423e9ebbbdc473cbc4772c872ee6b89f31fde4ed0279a5c25d5f65c043a16" }] },
{ "type": "library", "bom-ref": "SOUP-004",
"supplier": { "name": "zlib project", "url": ["https://zlib.net"] },
"name": "zlib", "version": "1.3.2",
"purl": "pkg:github/madler/zlib@v1.3.2",
"licenses": [{ "license": { "id": "Zlib" } }],
"hashes": [{ "alg": "SHA-256", "content": "bb329a0a2cd0274d05519d61c667c062e06990d72e125ee2dfa8de64f0119d16" }] },
{ "type": "library", "bom-ref": "SOUP-005",
"supplier": { "name": "Niels Lohmann", "url": ["https://github.com/nlohmann/json"] },
"name": "nlohmann-json", "version": "3.12.0",
"purl": "pkg:github/nlohmann/json@v3.12.0",
"licenses": [{ "license": { "id": "MIT" } }],
"hashes": [{ "alg": "SHA-256", "content": "42f6e95cad6ec532fd372391373363b62a14af6d771056dbfc86160e6dfff7aa" }] }
],
"dependencies": [
{ "ref": "gateway-fw", "dependsOn": [ "SOUP-002", "SOUP-003", "SOUP-004", "SOUP-005" ] }
],
"vulnerabilities": [
{ "id": "CVE-YYYY-NNNNN",
"affects": [{ "ref": "SOUP-002" }],
"analysis": { "state": "not_affected", "justification": "code_not_reachable",
"detail": "The affected function is not called. Reachability checked on the call graph of build 2.4.0, record VA-012, threat THR-03." } }
]
}The vulnerabilities block records the analysis of each known vulnerability against the device. Here the affected function is never called, the reachability check is kept as record VA-012, and the entry points to the threat it belongs to. This is the VEX information a reviewer asks for next to the SBOM.
The SBOM is generated from the build, so it changes with every release. The SOUP inventory above is reviewed by an engineer when a component, its version or its role changes, and at every monthly vulnerability review.