|
| 1 | +{ |
| 2 | + "$schema": "https://json-schema.org/draft/2020-12/schema", |
| 3 | + "$id": "https://cyclonedx.org/schema/2.0/model/cyclonedx-control-2.0.schema.json", |
| 4 | + "type": "null", |
| 5 | + "title": "CycloneDX Control Model", |
| 6 | + "$comment": "OWASP CycloneDX is an Ecma International standard (ECMA-424) developed in collaboration between the OWASP Foundation and Ecma Technical Committee 54 (TC54). The standard is published under a royalty-free patent policy. This JSON schema is the reference implementation and is licensed under the Apache License 2.0.", |
| 7 | + "$defs": { |
| 8 | + "controls": { |
| 9 | + "type": "array", |
| 10 | + "title": "Controls", |
| 11 | + "uniqueItems": true, |
| 12 | + "items": { |
| 13 | + "$ref": "#/$defs/control" |
| 14 | + }, |
| 15 | + "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." |
| 16 | + }, |
| 17 | + "control": { |
| 18 | + "type": "object", |
| 19 | + "title": "Control", |
| 20 | + "description": "A safeguard or countermeasure that protects systems, data, or operations. A control binds the elements that implement it to the requirements it satisfies, and records its implementation status and assessed effectiveness.", |
| 21 | + "required": [ |
| 22 | + "bom-ref", |
| 23 | + "name" |
| 24 | + ], |
| 25 | + "additionalProperties": false, |
| 26 | + "properties": { |
| 27 | + "bom-ref": { |
| 28 | + "$ref": "cyclonedx-common-2.0.schema.json#/$defs/refType", |
| 29 | + "description": "An identifier which can be used to reference the control elsewhere using a bom-ref or bom-link." |
| 30 | + }, |
| 31 | + "name": { |
| 32 | + "type": "string", |
| 33 | + "minLength": 1, |
| 34 | + "title": "Name", |
| 35 | + "description": "The name of the control." |
| 36 | + }, |
| 37 | + "description": { |
| 38 | + "type": "string", |
| 39 | + "title": "Description", |
| 40 | + "description": "A description of the control." |
| 41 | + }, |
| 42 | + "category": { |
| 43 | + "title": "Category", |
| 44 | + "description": "The category of the control. Use the custom option for a category specific to an organization's taxonomy.", |
| 45 | + "oneOf": [ |
| 46 | + { |
| 47 | + "title": "Predefined Control Category", |
| 48 | + "type": "string", |
| 49 | + "enum": [ |
| 50 | + "preventive", |
| 51 | + "detective", |
| 52 | + "corrective", |
| 53 | + "compensating", |
| 54 | + "deterrent", |
| 55 | + "recovery" |
| 56 | + ], |
| 57 | + "meta:enum": { |
| 58 | + "preventive": "Prevents an unwanted event from occurring.", |
| 59 | + "detective": "Identifies and records that an unwanted event has occurred or is occurring.", |
| 60 | + "corrective": "Remedies the condition that allowed an unwanted event.", |
| 61 | + "compensating": "Provides an alternative safeguard where a primary control is not feasible.", |
| 62 | + "deterrent": "Discourages an actor from attempting an unwanted action.", |
| 63 | + "recovery": "Restores operations after an unwanted event." |
| 64 | + } |
| 65 | + }, |
| 66 | + { |
| 67 | + "title": "Custom Control Category", |
| 68 | + "type": "object", |
| 69 | + "required": [ |
| 70 | + "name" |
| 71 | + ], |
| 72 | + "additionalProperties": false, |
| 73 | + "properties": { |
| 74 | + "name": { |
| 75 | + "type": "string", |
| 76 | + "minLength": 1, |
| 77 | + "title": "Name", |
| 78 | + "description": "The name of the custom category." |
| 79 | + }, |
| 80 | + "description": { |
| 81 | + "type": "string", |
| 82 | + "title": "Description", |
| 83 | + "description": "A description of the custom category." |
| 84 | + } |
| 85 | + } |
| 86 | + } |
| 87 | + ] |
| 88 | + }, |
| 89 | + "status": { |
| 90 | + "title": "Status", |
| 91 | + "description": "The implementation status of the control.", |
| 92 | + "$ref": "#/$defs/implementationStatus" |
| 93 | + }, |
| 94 | + "appliesTo": { |
| 95 | + "type": "array", |
| 96 | + "title": "Applies To", |
| 97 | + "uniqueItems": true, |
| 98 | + "minItems": 1, |
| 99 | + "items": { |
| 100 | + "$ref": "cyclonedx-common-2.0.schema.json#/$defs/refLinkType" |
| 101 | + }, |
| 102 | + "description": "References using bom-link or bom-ref to the elements the control protects, such as components, services, zones, or boundaries. A control without this property applies to the organization or system as a whole." |
| 103 | + }, |
| 104 | + "implementedBy": { |
| 105 | + "type": "array", |
| 106 | + "title": "Implemented By", |
| 107 | + "uniqueItems": true, |
| 108 | + "minItems": 1, |
| 109 | + "items": { |
| 110 | + "$ref": "cyclonedx-common-2.0.schema.json#/$defs/refLinkType" |
| 111 | + }, |
| 112 | + "description": "References using bom-link or bom-ref to the components, services, formulation workflows, or parties that implement the control." |
| 113 | + }, |
| 114 | + "satisfies": { |
| 115 | + "type": "array", |
| 116 | + "title": "Satisfies", |
| 117 | + "uniqueItems": true, |
| 118 | + "minItems": 1, |
| 119 | + "items": { |
| 120 | + "$ref": "cyclonedx-common-2.0.schema.json#/$defs/refLinkType" |
| 121 | + }, |
| 122 | + "description": "References using bom-link or bom-ref to the requirements the control satisfies, including requirements defined within standards." |
| 123 | + }, |
| 124 | + "effectiveness": { |
| 125 | + "title": "Effectiveness", |
| 126 | + "description": "The assessed effectiveness of the control.", |
| 127 | + "$ref": "#/$defs/effectiveness" |
| 128 | + }, |
| 129 | + "owner": { |
| 130 | + "$ref": "cyclonedx-party-2.0.schema.json#/$defs/partyChoice", |
| 131 | + "description": "The party accountable for the control. May be an inline party object or a reference to a previously declared party." |
| 132 | + }, |
| 133 | + "externalReferences": { |
| 134 | + "$ref": "cyclonedx-common-2.0.schema.json#/$defs/externalReferences" |
| 135 | + }, |
| 136 | + "properties": { |
| 137 | + "$ref": "cyclonedx-common-2.0.schema.json#/$defs/properties" |
| 138 | + } |
| 139 | + } |
| 140 | + }, |
| 141 | + "implementationStatus": { |
| 142 | + "title": "Implementation Status", |
| 143 | + "description": "The implementation status of a control or response. Use the custom option for a status specific to an organization's process.", |
| 144 | + "oneOf": [ |
| 145 | + { |
| 146 | + "title": "Predefined Implementation Status", |
| 147 | + "type": "string", |
| 148 | + "enum": [ |
| 149 | + "recommended", |
| 150 | + "proposed", |
| 151 | + "approved", |
| 152 | + "rejected", |
| 153 | + "planned", |
| 154 | + "in-progress", |
| 155 | + "implemented", |
| 156 | + "verified", |
| 157 | + "decommissioned" |
| 158 | + ], |
| 159 | + "meta:enum": { |
| 160 | + "recommended": "Suggested by a producer, standard, or assessor. Not yet entered into the adopting organization's decision process.", |
| 161 | + "proposed": "Entered into the adopting organization's decision process but not yet approved.", |
| 162 | + "approved": "Approved for implementation.", |
| 163 | + "rejected": "Considered and declined, with no intent to implement.", |
| 164 | + "planned": "Implementation is planned.", |
| 165 | + "in-progress": "Implementation is in progress.", |
| 166 | + "implemented": "Implemented and in effect.", |
| 167 | + "verified": "Implemented and verified as effective.", |
| 168 | + "decommissioned": "Removed from service." |
| 169 | + } |
| 170 | + }, |
| 171 | + { |
| 172 | + "title": "Custom Implementation Status", |
| 173 | + "type": "object", |
| 174 | + "required": [ |
| 175 | + "name" |
| 176 | + ], |
| 177 | + "additionalProperties": false, |
| 178 | + "properties": { |
| 179 | + "name": { |
| 180 | + "type": "string", |
| 181 | + "minLength": 1, |
| 182 | + "title": "Name", |
| 183 | + "description": "The name of the custom status." |
| 184 | + }, |
| 185 | + "description": { |
| 186 | + "type": "string", |
| 187 | + "title": "Description", |
| 188 | + "description": "A description of the custom status." |
| 189 | + } |
| 190 | + } |
| 191 | + } |
| 192 | + ] |
| 193 | + }, |
| 194 | + "effectiveness": { |
| 195 | + "type": "object", |
| 196 | + "title": "Effectiveness", |
| 197 | + "description": "The measured or assessed effectiveness of a control or response.", |
| 198 | + "additionalProperties": false, |
| 199 | + "properties": { |
| 200 | + "percentage": { |
| 201 | + "type": "number", |
| 202 | + "minimum": 0, |
| 203 | + "maximum": 1, |
| 204 | + "title": "Percentage", |
| 205 | + "description": "Effectiveness as a decimal from 0 to 1." |
| 206 | + }, |
| 207 | + "rating": { |
| 208 | + "type": "string", |
| 209 | + "title": "Rating", |
| 210 | + "enum": [ |
| 211 | + "ineffective", |
| 212 | + "marginal", |
| 213 | + "adequate", |
| 214 | + "good", |
| 215 | + "excellent" |
| 216 | + ], |
| 217 | + "meta:enum": { |
| 218 | + "ineffective": "Does not meaningfully reduce risk.", |
| 219 | + "marginal": "Slightly reduces risk.", |
| 220 | + "adequate": "Adequately reduces risk.", |
| 221 | + "good": "Significantly reduces risk.", |
| 222 | + "excellent": "Nearly eliminates risk." |
| 223 | + }, |
| 224 | + "description": "Effectiveness as a qualitative rating." |
| 225 | + } |
| 226 | + } |
| 227 | + } |
| 228 | + } |
| 229 | +} |
0 commit comments