[2.0] Threatmodeling and Blueprints - #678
Conversation
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@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>
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>
…-dev-threatmodeling
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>
…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
|
RFC notice sent on July 09, 2026
Public RFC period ends August 03, 2026 |
Signed-off-by: Steve Springett <steve@springett.us>
jkowalleck
left a comment
There was a problem hiding this comment.
started the review, have some remarks and comments, no blockers so far.
will continue review tomorrow
There was a problem hiding this comment.
❓ 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?)
There was a problem hiding this comment.
this docuemtn is linked in other documents in this very PR.
having these links fixed caused caused #992
| "$schema": { | ||
| "type": "string" | ||
| }, | ||
| "$comment": { |
There was a problem hiding this comment.
👍 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.", |
There was a problem hiding this comment.
add some line breaks for readability.
| "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." |
There was a problem hiding this comment.
add line break for readability
| "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.", |
There was a problem hiding this comment.
add line-breaks for readability
| "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": [ |
There was a problem hiding this comment.
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")
| "examples": [ | |
| "examples": [ | |
| "0.8.15", |
There was a problem hiding this comment.
✔️ 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.", |
There was a problem hiding this comment.
add line breaks for readability
| "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.", |
There was a problem hiding this comment.
add line-breaks for readability
| "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.", |
There was a problem hiding this comment.
add line-breaks for readability
| "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+)*$", |
There was a problem hiding this comment.
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 :
| "pattern": "^\\d+(\\.\\d+)*$", | |
| "pattern": "^[0-9]+(\\.[0-9]+)*$", |
jkowalleck
left a comment
There was a problem hiding this comment.
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": { |
There was a problem hiding this comment.
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" |
There was a problem hiding this comment.
| "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", |
There was a problem hiding this comment.
❌ this path does not exist.
see https://github.com/CycloneDX/specification/pull/678/changes#r3676902519
| "$ref": "cyclonedx-common-2.0.schema.json#/$defs/refType" | ||
| }, | ||
| "behavior": { | ||
| "$ref": "../behavior-taxonomy.schema.json", |
There was a problem hiding this comment.
❌ this path does not exist.
see https://github.com/CycloneDX/specification/pull/678/changes#r3676902519
There was a problem hiding this comment.
this docuemtn is linked in other documents in this very PR.
having these links fixed caused caused #992
Initial blueprint and threat modeling support for CycloneDX v2.0.