1// Copyright 2023 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.cloud.securitycenter.v1; 18 19import "google/protobuf/timestamp.proto"; 20 21option csharp_namespace = "Google.Cloud.SecurityCenter.V1"; 22option go_package = "cloud.google.com/go/securitycenter/apiv1/securitycenterpb;securitycenterpb"; 23option java_multiple_files = true; 24option java_outer_classname = "VulnerabilityProto"; 25option java_package = "com.google.cloud.securitycenter.v1"; 26option php_namespace = "Google\\Cloud\\SecurityCenter\\V1"; 27option ruby_package = "Google::Cloud::SecurityCenter::V1"; 28 29// Refers to common vulnerability fields e.g. cve, cvss, cwe etc. 30message Vulnerability { 31 // CVE stands for Common Vulnerabilities and Exposures 32 // (https://cve.mitre.org/about/) 33 Cve cve = 1; 34 35 // The offending package is relevant to the finding. 36 Package offending_package = 2; 37 38 // The fixed package is relevant to the finding. 39 Package fixed_package = 3; 40 41 // The security bulletin is relevant to this finding. 42 SecurityBulletin security_bulletin = 4; 43} 44 45// CVE stands for Common Vulnerabilities and Exposures. 46// Information from the [CVE 47// record](https://www.cve.org/ResourcesSupport/Glossary) that describes this 48// vulnerability. 49message Cve { 50 // The possible values of impact of the vulnerability if it was to be 51 // exploited. 52 enum RiskRating { 53 // Invalid or empty value. 54 RISK_RATING_UNSPECIFIED = 0; 55 56 // Exploitation would have little to no security impact. 57 LOW = 1; 58 59 // Exploitation would enable attackers to perform activities, or could allow 60 // attackers to have a direct impact, but would require additional steps. 61 MEDIUM = 2; 62 63 // Exploitation would enable attackers to have a notable direct impact 64 // without needing to overcome any major mitigating factors. 65 HIGH = 3; 66 67 // Exploitation would fundamentally undermine the security of affected 68 // systems, enable actors to perform significant attacks with minimal 69 // effort, with little to no mitigating factors to overcome. 70 CRITICAL = 4; 71 } 72 73 // The possible values of exploitation activity of the vulnerability in the 74 // wild. 75 enum ExploitationActivity { 76 // Invalid or empty value. 77 EXPLOITATION_ACTIVITY_UNSPECIFIED = 0; 78 79 // Exploitation has been reported or confirmed to widely occur. 80 WIDE = 1; 81 82 // Limited reported or confirmed exploitation activities. 83 CONFIRMED = 2; 84 85 // Exploit is publicly available. 86 AVAILABLE = 3; 87 88 // No known exploitation activity, but has a high potential for 89 // exploitation. 90 ANTICIPATED = 4; 91 92 // No known exploitation activity. 93 NO_KNOWN = 5; 94 } 95 96 // The unique identifier for the vulnerability. e.g. CVE-2021-34527 97 string id = 1; 98 99 // Additional information about the CVE. 100 // e.g. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34527 101 repeated Reference references = 2; 102 103 // Describe Common Vulnerability Scoring System specified at 104 // https://www.first.org/cvss/v3.1/specification-document 105 Cvssv3 cvssv3 = 3; 106 107 // Whether upstream fix is available for the CVE. 108 bool upstream_fix_available = 4; 109 110 // The potential impact of the vulnerability if it was to be exploited. 111 RiskRating impact = 5; 112 113 // The exploitation activity of the vulnerability in the wild. 114 ExploitationActivity exploitation_activity = 6; 115 116 // Whether or not the vulnerability has been observed in the wild. 117 bool observed_in_the_wild = 7; 118 119 // Whether or not the vulnerability was zero day when the finding was 120 // published. 121 bool zero_day = 8; 122} 123 124// Additional Links 125message Reference { 126 // Source of the reference e.g. NVD 127 string source = 1; 128 129 // Uri for the mentioned source e.g. 130 // https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34527. 131 string uri = 2; 132} 133 134// Common Vulnerability Scoring System version 3. 135message Cvssv3 { 136 // This metric reflects the context by which vulnerability exploitation is 137 // possible. 138 enum AttackVector { 139 // Invalid value. 140 ATTACK_VECTOR_UNSPECIFIED = 0; 141 142 // The vulnerable component is bound to the network stack and the set of 143 // possible attackers extends beyond the other options listed below, up to 144 // and including the entire Internet. 145 ATTACK_VECTOR_NETWORK = 1; 146 147 // The vulnerable component is bound to the network stack, but the attack is 148 // limited at the protocol level to a logically adjacent topology. 149 ATTACK_VECTOR_ADJACENT = 2; 150 151 // The vulnerable component is not bound to the network stack and the 152 // attacker's path is via read/write/execute capabilities. 153 ATTACK_VECTOR_LOCAL = 3; 154 155 // The attack requires the attacker to physically touch or manipulate the 156 // vulnerable component. 157 ATTACK_VECTOR_PHYSICAL = 4; 158 } 159 160 // This metric describes the conditions beyond the attacker's control that 161 // must exist in order to exploit the vulnerability. 162 enum AttackComplexity { 163 // Invalid value. 164 ATTACK_COMPLEXITY_UNSPECIFIED = 0; 165 166 // Specialized access conditions or extenuating circumstances do not exist. 167 // An attacker can expect repeatable success when attacking the vulnerable 168 // component. 169 ATTACK_COMPLEXITY_LOW = 1; 170 171 // A successful attack depends on conditions beyond the attacker's control. 172 // That is, a successful attack cannot be accomplished at will, but requires 173 // the attacker to invest in some measurable amount of effort in preparation 174 // or execution against the vulnerable component before a successful attack 175 // can be expected. 176 ATTACK_COMPLEXITY_HIGH = 2; 177 } 178 179 // This metric describes the level of privileges an attacker must possess 180 // before successfully exploiting the vulnerability. 181 enum PrivilegesRequired { 182 // Invalid value. 183 PRIVILEGES_REQUIRED_UNSPECIFIED = 0; 184 185 // The attacker is unauthorized prior to attack, and therefore does not 186 // require any access to settings or files of the vulnerable system to 187 // carry out an attack. 188 PRIVILEGES_REQUIRED_NONE = 1; 189 190 // The attacker requires privileges that provide basic user capabilities 191 // that could normally affect only settings and files owned by a user. 192 // Alternatively, an attacker with Low privileges has the ability to access 193 // only non-sensitive resources. 194 PRIVILEGES_REQUIRED_LOW = 2; 195 196 // The attacker requires privileges that provide significant (e.g., 197 // administrative) control over the vulnerable component allowing access to 198 // component-wide settings and files. 199 PRIVILEGES_REQUIRED_HIGH = 3; 200 } 201 202 // This metric captures the requirement for a human user, other than the 203 // attacker, to participate in the successful compromise of the vulnerable 204 // component. 205 enum UserInteraction { 206 // Invalid value. 207 USER_INTERACTION_UNSPECIFIED = 0; 208 209 // The vulnerable system can be exploited without interaction from any user. 210 USER_INTERACTION_NONE = 1; 211 212 // Successful exploitation of this vulnerability requires a user to take 213 // some action before the vulnerability can be exploited. 214 USER_INTERACTION_REQUIRED = 2; 215 } 216 217 // The Scope metric captures whether a vulnerability in one vulnerable 218 // component impacts resources in components beyond its security scope. 219 enum Scope { 220 // Invalid value. 221 SCOPE_UNSPECIFIED = 0; 222 223 // An exploited vulnerability can only affect resources managed by the same 224 // security authority. 225 SCOPE_UNCHANGED = 1; 226 227 // An exploited vulnerability can affect resources beyond the security scope 228 // managed by the security authority of the vulnerable component. 229 SCOPE_CHANGED = 2; 230 } 231 232 // The Impact metrics capture the effects of a successfully exploited 233 // vulnerability on the component that suffers the worst outcome that is most 234 // directly and predictably associated with the attack. 235 enum Impact { 236 // Invalid value. 237 IMPACT_UNSPECIFIED = 0; 238 239 // High impact. 240 IMPACT_HIGH = 1; 241 242 // Low impact. 243 IMPACT_LOW = 2; 244 245 // No impact. 246 IMPACT_NONE = 3; 247 } 248 249 // The base score is a function of the base metric scores. 250 double base_score = 1; 251 252 // Base Metrics 253 // Represents the intrinsic characteristics of a vulnerability that are 254 // constant over time and across user environments. 255 // This metric reflects the context by which vulnerability exploitation is 256 // possible. 257 AttackVector attack_vector = 5; 258 259 // This metric describes the conditions beyond the attacker's control that 260 // must exist in order to exploit the vulnerability. 261 AttackComplexity attack_complexity = 6; 262 263 // This metric describes the level of privileges an attacker must possess 264 // before successfully exploiting the vulnerability. 265 PrivilegesRequired privileges_required = 7; 266 267 // This metric captures the requirement for a human user, other than the 268 // attacker, to participate in the successful compromise of the vulnerable 269 // component. 270 UserInteraction user_interaction = 8; 271 272 // The Scope metric captures whether a vulnerability in one vulnerable 273 // component impacts resources in components beyond its security scope. 274 Scope scope = 9; 275 276 // This metric measures the impact to the confidentiality of the information 277 // resources managed by a software component due to a successfully exploited 278 // vulnerability. 279 Impact confidentiality_impact = 10; 280 281 // This metric measures the impact to integrity of a successfully exploited 282 // vulnerability. 283 Impact integrity_impact = 11; 284 285 // This metric measures the impact to the availability of the impacted 286 // component resulting from a successfully exploited vulnerability. 287 Impact availability_impact = 12; 288} 289 290// Package is a generic definition of a package. 291message Package { 292 // The name of the package where the vulnerability was detected. 293 string package_name = 1; 294 295 // The CPE URI where the vulnerability was detected. 296 string cpe_uri = 2; 297 298 // Type of package, for example, os, maven, or go. 299 string package_type = 3; 300 301 // The version of the package. 302 string package_version = 4; 303} 304 305// SecurityBulletin are notifications of vulnerabilities of Google products. 306message SecurityBulletin { 307 // ID of the bulletin corresponding to the vulnerability. 308 string bulletin_id = 1; 309 310 // Submission time of this Security Bulletin. 311 google.protobuf.Timestamp submission_time = 2; 312 313 // This represents a version that the cluster receiving this notification 314 // should be upgraded to, based on its current version. For example, 1.15.0 315 string suggested_upgrade_version = 3; 316} 317