Skip to content

[2.0] Threatmodeling and Blueprints - #678

Open
stevespringett wants to merge 55 commits into
2.0-devfrom
2.0-dev-threatmodeling
Open

[2.0] Threatmodeling and Blueprints#678
stevespringett wants to merge 55 commits into
2.0-devfrom
2.0-dev-threatmodeling

Conversation

@stevespringett

@stevespringett stevespringett commented Sep 3, 2025

Copy link
Copy Markdown
Member

Initial blueprint and threat modeling support for CycloneDX v2.0.

Signed-off-by: Steve Springett <steve@springett.us>
Signed-off-by: Steve Springett <steve@springett.us>
Signed-off-by: Steve Springett <steve@springett.us>
steve.springett and others added 24 commits October 29, 2025 09:54
Signed-off-by: steve.springett <steve.springett@servicenow.com>
Signed-off-by: Steve Springett <steve@springett.us>
…ling

Signed-off-by: Steve Springett <steve@springett.us>

# Conflicts:
#	schema/2.0/model/cyclonedx-common-2.0.schema.json
Signed-off-by: Steve Springett <steve@springett.us>
…tras-suggestions

Signed-off-by: Steve Springett <steve@springett.us>
Issue: 
As discussed in ticket #731 , this PR is a review of the schema

Model schema reviewed to ensure no data loss
Risk schema changes done based on risk and compliance tooling taxonomies
to ensure compatibility (including data classification etc)

This PR is to use for discussion on the TM-BOM discussion 0 not for
merging yet
Signed-off-by: Steve Springett <steve@springett.us>
. Blueprints working group will continue to iterate and validate.

Signed-off-by: Steve Springett <steve@springett.us>
Signed-off-by: Basil Hess <bhe@zurich.ibm.com>
Signed-off-by: Basil Hess <bhe@zurich.ibm.com>
… Orders new entries alphabetically in the enum

Signed-off-by: Basil Hess <bhe@zurich.ibm.com>
This PR extends the list of cryptography-related behaviors, as discussed
in today's Cryptography WG meeting.

The google sheet is synced with those entries.
…This currently compiles.

Signed-off-by: Steve Springett <steve@springett.us>
Signed-off-by: Steve Springett <steve@springett.us>
Signed-off-by: Steve Springett <steve@springett.us>
Signed-off-by: Steve Springett <steve@springett.us>
Signed-off-by: Steve Springett <steve@springett.us>
A series of enhancements, corrections, and minor refactors of some of
the schemas supporting threat modeling.
…related areas in the spec.

Signed-off-by: Steve Springett <steve@springett.us>
…ehavior schema.

Signed-off-by: Steve Springett <steve@springett.us>
… - and updated it to be an array. Added cadence (previously was risk assessment type) to be a noun representing temporal data. Updated test case.

Signed-off-by: Steve Springett <steve@springett.us>
…ves, kill chains, and attack paths for lateral movement.

Signed-off-by: Steve Springett <steve@springett.us>
Signed-off-by: Steve Springett <steve@springett.us>
@stevespringett
stevespringett marked this pull request as ready for review June 28, 2026 23:26
@stevespringett
stevespringett requested a review from a team as a code owner June 28, 2026 23:26
stevespringett and others added 2 commits June 28, 2026 18:37
…ling

Signed-off-by: Steve Springett <steve@springett.us>

# Conflicts:
#	schema/2.0/cyclonedx-2.0-bundled.min.schema.json
#	schema/2.0/model/cyclonedx-component-2.0.schema.json
@stevespringett stevespringett added RFC notice sent A public RFC notice was distributed to the CycloneDX mailing list for consideration request for comment labels Jul 8, 2026
@jkowalleck

Copy link
Copy Markdown
Member

RFC notice sent on July 09, 2026

Public RFC period ends August 03, 2026

@jkowalleck jkowalleck changed the title 2.0 dev threatmodeling [2.0] Threatmodeling and Blueprints Jul 10, 2026
@jkowalleck jkowalleck added the CDX 2.0 related to release v2.0 label Jul 10, 2026
stevespringett and others added 2 commits July 12, 2026 14:55

@jkowalleck jkowalleck left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

started the review, have some remarks and comments, no blockers so far.

will continue review tomorrow

@jkowalleck jkowalleck Jul 29, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

❓ is this file path correct?
shall this not go into schema/2.0/behavior-taxonomy.schema.json?
(or even schema/2.0/taxonomies/behavior.schema.json?)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this docuemtn is linked in other documents in this very PR.
having these links fixed caused caused #992

"$schema": {
"type": "string"
},
"$comment": {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

👍 out of scope, but a good addition.

"risks": {
"type": "object",
"title": "Risks",
"description": "A collection of risks identified through risk analysis, together with the assessments that evaluate them. The model is framework-neutral and can document risk regardless of the risk management framework in use, including [ISO 31000](https://www.iso.org/iso-31000-risk-management.html), [NIST SP 800-30](https://csrc.nist.gov/pubs/sp/800/30/r1/final), the [NIST AI Risk Management Framework](https://www.nist.gov/itl/ai-risk-management-framework), [COSO ERM](https://www.coso.org/), [ISO/IEC 27005](https://www.iso.org/standard/80585.html), and OCTAVE. It accommodates qualitative, semi-quantitative, and quantitative assessment, and each rating records the scoring methodology used, such as [FAIR](https://www.fairinstitute.org/), [OWASP Risk Rating](https://owasp.org/www-community/OWASP_Risk_Rating_Methodology), DREAD, [FMEA](https://asq.org/quality-resources/fmea), NIST SP 800-30, or OCTAVE Allegro. Each risk separates inherent, residual, and target ratings so risk reduction is explicit.",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

add some line breaks for readability.

Suggested change
"description": "A collection of risks identified through risk analysis, together with the assessments that evaluate them. The model is framework-neutral and can document risk regardless of the risk management framework in use, including [ISO 31000](https://www.iso.org/iso-31000-risk-management.html), [NIST SP 800-30](https://csrc.nist.gov/pubs/sp/800/30/r1/final), the [NIST AI Risk Management Framework](https://www.nist.gov/itl/ai-risk-management-framework), [COSO ERM](https://www.coso.org/), [ISO/IEC 27005](https://www.iso.org/standard/80585.html), and OCTAVE. It accommodates qualitative, semi-quantitative, and quantitative assessment, and each rating records the scoring methodology used, such as [FAIR](https://www.fairinstitute.org/), [OWASP Risk Rating](https://owasp.org/www-community/OWASP_Risk_Rating_Methodology), DREAD, [FMEA](https://asq.org/quality-resources/fmea), NIST SP 800-30, or OCTAVE Allegro. Each risk separates inherent, residual, and target ratings so risk reduction is explicit.",
"description": "A collection of risks identified through risk analysis, together with the assessments that evaluate them.\n The model is framework-neutral and can document risk regardless of the risk management framework in use, including [ISO 31000](https://www.iso.org/iso-31000-risk-management.html), [NIST SP 800-30](https://csrc.nist.gov/pubs/sp/800/30/r1/final), the [NIST AI Risk Management Framework](https://www.nist.gov/itl/ai-risk-management-framework), [COSO ERM](https://www.coso.org/), [ISO/IEC 27005](https://www.iso.org/standard/80585.html), and OCTAVE. It accommodates qualitative, semi-quantitative, and quantitative assessment, and each rating records the scoring methodology used, such as [FAIR](https://www.fairinstitute.org/), [OWASP Risk Rating](https://owasp.org/www-community/OWASP_Risk_Rating_Methodology), DREAD, [FMEA](https://asq.org/quality-resources/fmea), NIST SP 800-30, or OCTAVE Allegro.\n Each risk separates inherent, residual, and target ratings so risk reduction is explicit.",

"items": {
"$ref": "#/$defs/control"
},
"description": "The safeguards and countermeasures that are recommended or in place. Controls may be declared on their own for governance, risk, and compliance use cases, or referenced from threats, trust boundaries, and risk responses."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

add line break for readability

Suggested change
"description": "The safeguards and countermeasures that are recommended or in place. Controls may be declared on their own for governance, risk, and compliance use cases, or referenced from threats, trust boundaries, and risk responses."
"description": "The safeguards and countermeasures that are recommended or in place.\n Controls may be declared on their own for governance, risk, and compliance use cases, or referenced from threats, trust boundaries, and risk responses."

"$id": "https://cyclonedx.org/schema/behavior-taxonomy.schema.json",
"type": "string",
"title": "CycloneDX Behavior Taxonomy",
"description": "An independent taxonomy of behaviours that describe actions performed by entities with security, privacy, safety, or operational implications. This taxonomy is maintained separately from the CycloneDX specification and may evolve at a different rate. The taxonomy uses a hierarchical colon-delimited naming convention with three levels: domain (e.g. security), category (e.g. security:authentication), and specific behaviour (e.g. security:authentication:authenticatesUser). Values at any level of the hierarchy are valid.",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

add line-breaks for readability

Suggested change
"description": "An independent taxonomy of behaviours that describe actions performed by entities with security, privacy, safety, or operational implications. This taxonomy is maintained separately from the CycloneDX specification and may evolve at a different rate. The taxonomy uses a hierarchical colon-delimited naming convention with three levels: domain (e.g. security), category (e.g. security:authentication), and specific behaviour (e.g. security:authentication:authenticatesUser). Values at any level of the hierarchy are valid.",
"description": "An independent taxonomy of behaviours that describe actions performed by entities with security, privacy, safety, or operational implications. This taxonomy is maintained separately from the CycloneDX specification and may evolve at a different rate.\n The taxonomy uses a hierarchical colon-delimited naming convention with three levels: domain (e.g. security), category (e.g. security:authentication), and specific behaviour (e.g. security:authentication:authenticatesUser).\n Values at any level of the hierarchy are valid.",

"description": "An ordinal version is a dot-delimited, purely numeric identifier where each segment represents an ordered level in the hierarchy. The segments have no prescribed meaning beyond numeric ordering, allowing straightforward comparison and sorting.",
"type": "string",
"pattern": "^\\d+(\\.\\d+)*$",
"examples": [

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

add a 0 example, telling people that is valid and to be expected (just as these leading zeroes in the existing example "2025.09.02")

Suggested change
"examples": [
"examples": [
"0.8.15",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

✔️ changes are out of scope, but welcome

"profiles": {
"type": "object",
"title": "Profiles",
"description": "A registry of reusable, named characterizations of how a subject behaves or is governed within a domain. Profiles separate characterization from identity: identity describes who or what the subject is; the profile describes the durable attributes that characterize it. A profile is referenced by its bom-ref from the elements it characterizes, so a single profile can be reused by many subjects.",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

add line breaks for readability

Suggested change
"description": "A registry of reusable, named characterizations of how a subject behaves or is governed within a domain. Profiles separate characterization from identity: identity describes who or what the subject is; the profile describes the durable attributes that characterize it. A profile is referenced by its bom-ref from the elements it characterizes, so a single profile can be reused by many subjects.",
"description": "A registry of reusable, named characterizations of how a subject behaves or is governed within a domain.\n Profiles separate characterization from identity: identity describes who or what the subject is; the profile describes the durable attributes that characterize it.\n A profile is referenced by its bom-ref from the elements it characterizes, so a single profile can be reused by many subjects.",

"risks": {
"type": "object",
"title": "Risks",
"description": "A collection of risks identified through risk analysis, together with the assessments that evaluate them. The model is framework-neutral and can document risk regardless of the risk management framework in use, including [ISO 31000](https://www.iso.org/iso-31000-risk-management.html), [NIST SP 800-30](https://csrc.nist.gov/pubs/sp/800/30/r1/final), the [NIST AI Risk Management Framework](https://www.nist.gov/itl/ai-risk-management-framework), [COSO ERM](https://www.coso.org/), [ISO/IEC 27005](https://www.iso.org/standard/80585.html), and OCTAVE. It accommodates qualitative, semi-quantitative, and quantitative assessment, and each rating records the scoring methodology used, such as [FAIR](https://www.fairinstitute.org/), [OWASP Risk Rating](https://owasp.org/www-community/OWASP_Risk_Rating_Methodology), DREAD, [FMEA](https://asq.org/quality-resources/fmea), NIST SP 800-30, or OCTAVE Allegro. Each risk separates inherent, residual, and target ratings so risk reduction is explicit.",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

add line-breaks for readability

Suggested change
"description": "A collection of risks identified through risk analysis, together with the assessments that evaluate them. The model is framework-neutral and can document risk regardless of the risk management framework in use, including [ISO 31000](https://www.iso.org/iso-31000-risk-management.html), [NIST SP 800-30](https://csrc.nist.gov/pubs/sp/800/30/r1/final), the [NIST AI Risk Management Framework](https://www.nist.gov/itl/ai-risk-management-framework), [COSO ERM](https://www.coso.org/), [ISO/IEC 27005](https://www.iso.org/standard/80585.html), and OCTAVE. It accommodates qualitative, semi-quantitative, and quantitative assessment, and each rating records the scoring methodology used, such as [FAIR](https://www.fairinstitute.org/), [OWASP Risk Rating](https://owasp.org/www-community/OWASP_Risk_Rating_Methodology), DREAD, [FMEA](https://asq.org/quality-resources/fmea), NIST SP 800-30, or OCTAVE Allegro. Each risk separates inherent, residual, and target ratings so risk reduction is explicit.",
"description": "A collection of risks identified through risk analysis, together with the assessments that evaluate them.\n The model is framework-neutral and can document risk regardless of the risk management framework in use, including [ISO 31000](https://www.iso.org/iso-31000-risk-management.html), [NIST SP 800-30](https://csrc.nist.gov/pubs/sp/800/30/r1/final), the [NIST AI Risk Management Framework](https://www.nist.gov/itl/ai-risk-management-framework), [COSO ERM](https://www.coso.org/), [ISO/IEC 27005](https://www.iso.org/standard/80585.html), and OCTAVE.\n It accommodates qualitative, semi-quantitative, and quantitative assessment, and each rating records the scoring methodology used, such as [FAIR](https://www.fairinstitute.org/), [OWASP Risk Rating](https://owasp.org/www-community/OWASP_Risk_Rating_Methodology), DREAD, [FMEA](https://asq.org/quality-resources/fmea), NIST SP 800-30, or OCTAVE Allegro. Each risk separates inherent, residual, and target ratings so risk reduction is explicit.",

},
"weakness": {
"title": "Weakness",
"description": "A classification of an underlying weakness, given either by a Common Weakness Enumeration (CWE) identifier or by a free-text name with an optional description. The exploitability and the affected scope are expressed by the vulnerability or threat that references the weakness, not on the weakness itself.",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

add line-breaks for readability

Suggested change
"description": "A classification of an underlying weakness, given either by a Common Weakness Enumeration (CWE) identifier or by a free-text name with an optional description. The exploitability and the affected scope are expressed by the vulnerability or threat that references the weakness, not on the weakness itself.",
"description": "A classification of an underlying weakness, given either by a Common Weakness Enumeration (CWE) identifier or by a free-text name with an optional description.\n The exploitability and the affected scope are expressed by the vulnerability or threat that references the weakness, not on the weakness itself.",

"title": "Ordinal Version",
"description": "An ordinal version is a dot-delimited, purely numeric identifier where each segment represents an ordered level in the hierarchy. The segments have no prescribed meaning beyond numeric ordering, allowing straightforward comparison and sorting.",
"type": "string",
"pattern": "^\\d+(\\.\\d+)*$",

@jkowalleck jkowalleck Jul 29, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

per https://json-schema.org/understanding-json-schema/reference/regular_expressions
we should use only standard escapes.

the character class \d is no such thing
lets change it to :

Suggested change
"pattern": "^\\d+(\\.\\d+)*$",
"pattern": "^[0-9]+(\\.[0-9]+)*$",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

shall be fixed in #988 (comment)

@jkowalleck jkowalleck left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

did another round of review.
found critical bugs - marked with ❌ .

will continue review tomorrow.

"description": "Threat-modelling content, including the documented threats, the scenarios that realize them, the attack patterns and attack trees that describe how they are carried out, and the trust boundaries they cross.",
"additionalProperties": false,
"properties": {
"threats": {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this looks a bit odd...
the structure would be like $.threats.threats - a duplication in words.

"$ref": "model/cyclonedx-vulnerability-2.0.schema.json#/$defs/vulnerabilities"
},
"threats": {
"$ref": "model/cyclonedx-threat-2.0.schema.json#/$defs/threats"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

"description": "Position within a sequential graph. Required when the graph ordering is 'sequential'. Ignored when transitions define the order."
},
"behavior": {
"$ref": "../behavior-taxonomy.schema.json",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

caused #992

"$ref": "cyclonedx-common-2.0.schema.json#/$defs/refType"
},
"behavior": {
"$ref": "../behavior-taxonomy.schema.json",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this docuemtn is linked in other documents in this very PR.
having these links fixed caused caused #992

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

Labels

breaking-changes CDX 2.0 related to release v2.0 proposed core enhancement prototype request for comment RFC notice sent A public RFC notice was distributed to the CycloneDX mailing list for consideration

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add support for Blueprints Add threat model capabilities to CycloneDX / TM-BOM

4 participants