Skip to content

fix(advisory): per-product component in CDX VEX - #9

Open
MarkAtwood wants to merge 1 commit into
fix/advisory-path-traversalfrom
fix/cdx-vex-per-product
Open

fix(advisory): per-product component in CDX VEX#9
MarkAtwood wants to merge 1 commit into
fix/advisory-path-traversalfrom
fix/cdx-vex-per-product

Conversation

@MarkAtwood

Copy link
Copy Markdown

The CycloneDX VEX collapsed every non-FIPS product onto the hardcoded wolfssl metadata.component, so a wolfSSH/wolfMQTT/wolfTPM CVE was attributed to wolfssl (disagreeing with the CSAF output). Mints a per-product component keyed on cdx_key with its own name/cpe/purl; wolfssl keeps the umbrella component. Adds TestCdxVexNonWolfsslProduct.

⚠️ Stacked on the path-traversal PR (shares the advisory test file). Merge order: #7 → path-traversal → this.

The CycloneDX VEX emitter collapsed every non-FIPS product onto the
hardcoded wolfssl metadata.component, so a wolfSSH (or wolfMQTT, wolfTPM,
...) CVE emitted a VEX whose affects[] pointed at a component named
"wolfssl" -- disagreeing with the CSAF output for the same record and
mis-attributing the vulnerability.

Mint a per-product component keyed on cdx_key (as the FIPS path already
does) with the product's own name/cpe/purl, and reference it in affects[];
wolfssl products still use the umbrella metadata.component. Adds a
regression test class covering a wolfSSH record.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes CycloneDX 1.6 VEX generation so vulnerabilities for non-wolfSSL products (e.g., wolfSSH/wolfMQTT/wolfTPM) are attributed to a per-product component instead of being incorrectly collapsed onto the wolfssl metadata component, aligning product attribution with expected semantics.

Changes:

  • Update generate_cdx_vex() to mint a per-product CycloneDX component (keyed by cdx_key) for any non-FIPS, non-wolfssl product and point vulnerabilities[].affects[] at that component.
  • Preserve metadata.component as the wolfssl umbrella component.
  • Add a regression unit test ensuring non-wolfSSL products get their own component and are referenced from affects.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
central/gen-advisory Emit per-product CycloneDX components for non-wolfssl products and reference them from VEX affects.
central/test_gen_advisory.py Add regression coverage to prevent non-wolfSSL product attribution from collapsing onto metadata.component.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants