TraceGuardDocs

Identifying components

What to fill in for each part so scans find its advisories, how deep an HBOM should go, and how to read "no findings".

TraceGuard can only report advisories for a part it can identify. This guide says which fields do the identifying, how to write them for software, operating systems, chips and firmware, how deep to go, and what to do when a part shows no findings.

Which fields identify a part

Fields are tried in this order. The first one that works decides the match.

FieldWhat it unlocksExample
Package URL (purl)The package databases (OSV, GitHub, distro feeds). The strongest identifier for software from a package manager.pkg:npm/lodash@4.17.20, pkg:pypi/django@5.0, pkg:nuget/Newtonsoft.Json@13.0.1
CPEThe NVD product catalogue. The identifier for operating systems, firmware, devices and anything without a package manager.cpe:2.3:o:apple:ipados:15.8:*:*:*:*:*:*:*
Name + versionOnly through an applicability rule that maps the name to a CPE or package URL.iPadOS 15.8 with a rule for ipados

A CPE you write in the BOM is kept as yours: TraceGuard adds CPEs from rules only to parts that have none. A rule's version range judges a part whose CPE came from the BOM only when the rule says so (Also apply to parts whose CPE comes from the BOM, see version ranges).

Versions

  • Put the version in the part's version field. A part without a version but with a versioned CPE takes the version from the CPE: cpe:2.3:o:apple:ipados:15.8:… gives 15.8. Listing the same part several times, once per CPE version, keeps several parts.
  • Write versions as numbers separated by dots: 15.8, 2.16.5, 10.0.2. A build suffix is fine (17.5.1 (21F90) reads as 17.5.1); v3.0, rev B or latest cannot be compared, so a version range does not apply to them and the part keeps all its advisories.
  • A part with no version at all matches advisories for every version of the product. That is the safe default for hardware; for software, add the version.

How deep an HBOM should go

List the parts that run code or carry firmware, at the level advisories are filed:

LevelList it?Why
The device (PRIMUS-02)Yes, as the rootGives the BOM its subject and version.
Boards and modules (a Bluetooth module, a cellular modem)YesAdvisories are filed against the module's firmware or SDK.
SoCs and MCUs (STM32L431, nRF52840, Apple M3)Yes, with the firmware or SDK version if you know itNVD files most device advisories as firmware (nordicsemi:nrf52840_firmware), not as bare silicon. A bare chip without a firmware version matches advisories for every version.
Operating systems (iPadOS 15.8)Yes, with the versionThe most advisory-rich parts; give each deployed version.
Passive parts (resistors, connectors, enclosures)NoNo advisories exist; they only add noise.

Keep each part's type honest (device, firmware, hardware, operating-system, library): rules match on it, and two parts that share a name are told apart by their bom-ref and supplier, so give every part a unique bom-ref and the supplier when you know it.

What TraceGuard ignores

  • CycloneDX scope (required, optional, excluded): every listed part is scanned.
  • Free-text fields (description, notes) and external references: they are kept, not matched.
  • Hash values: useful provenance, not identification.

"No findings": is there really nothing?

The BOM header says how many parts could be checked: No known vulnerabilities in A of M parts, and the Components tab gives every part a verdict in its Vulns column: Checked, none known, n hidden, Not identified or Identifier unknown to NVD, with the reason on hover (an assistant gets the same through the MCP tool explain_coverage). A part that could not be checked is not safe, it is unidentified. Work through the list:

  1. Does the part have a purl or a CPE? If not, add one, or write an applicability rule that maps its name.
  2. Is the CPE one NVD uses? apple:ipad_os matches nothing, apple:ipados does. Look the product up in the NVD CPE dictionary and copy vendor and product exactly. A rule that places a CPE no advisory uses shows Matches no advisories on the rules page.
  3. Is the version readable? See Versions. Rules show Unreadable version: n when they could not read a part's version.
  4. Did a rule or a decision hide it? The Findings page filter Applicability shows what rules set out of scope; Triage shows VEX decisions and exclusions. The rules page shows Range not applied: n for parts whose CPE came from the BOM.
  5. Was the BOM scanned after the last change? Rules apply at the next scan; TraceGuard queues one when a rule is approved or changed, and shows Rescan pending until it finishes.

If all five hold and a part still shows nothing, no advisory names that product at that version in the sources TraceGuard reads (OSV, GitHub, NVD and the KEV and EPSS feeds). That is a real answer, and the BOM header counts it as checked.