As of January 1, 2020 this library no longer supports Python 2 on the latest released version.
Library versions released prior to that date will continue to be available. For more information please
visit Python 2 support on Google Cloud.
Source code for grafeas.grafeas_v1.types.vex
# -*- coding: utf-8 -*-
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from __future__ import annotations
from typing import MutableMapping, MutableSequence
import proto # type: ignore
from grafeas.grafeas_v1.types import common
__protobuf__ = proto.module(
package="grafeas.v1",
manifest={
"VulnerabilityAssessmentNote",
},
)
[docs]class VulnerabilityAssessmentNote(proto.Message):
r"""A single VulnerabilityAssessmentNote represents
one particular product's vulnerability assessment for one CVE.
Attributes:
title (str):
The title of the note. E.g. ``Vex-Debian-11.4``
short_description (str):
A one sentence description of this Vex.
long_description (str):
A detailed description of this Vex.
language_code (str):
Identifies the language used by this
document, corresponding to IETF BCP 47 / RFC
5646.
publisher (grafeas.grafeas_v1.types.VulnerabilityAssessmentNote.Publisher):
Publisher details of this Note.
product (grafeas.grafeas_v1.types.VulnerabilityAssessmentNote.Product):
The product affected by this vex.
assessment (grafeas.grafeas_v1.types.VulnerabilityAssessmentNote.Assessment):
Represents a vulnerability assessment for the
product.
"""
[docs] class Publisher(proto.Message):
r"""Publisher contains information about the publisher of
this Note.
(-- api-linter: core::0123::resource-annotation=disabled
aip.dev/not-precedent: Publisher is not a separate resource. --)
Attributes:
name (str):
Name of the publisher.
Examples: 'Google', 'Google Cloud Platform'.
issuing_authority (str):
Provides information about the authority of
the issuing party to release the document, in
particular, the party's constituency and
responsibilities or other obligations.
publisher_namespace (str):
The context or namespace.
Contains a URL which is under control of the
issuing party and can be used as a globally
unique identifier for that issuing party.
Example: https://csaf.io
"""
name: str = proto.Field(
proto.STRING,
number=1,
)
issuing_authority: str = proto.Field(
proto.STRING,
number=2,
)
publisher_namespace: str = proto.Field(
proto.STRING,
number=3,
)
[docs] class Product(proto.Message):
r"""Product contains information about a product and how to
uniquely identify it.
(-- api-linter: core::0123::resource-annotation=disabled
aip.dev/not-precedent: Product is not a separate resource. --)
.. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields
Attributes:
name (str):
Name of the product.
id (str):
Token that identifies a product so that it
can be referred to from other parts in the
document. There is no predefined format as long
as it uniquely identifies a group in the context
of the current document.
generic_uri (str):
Contains a URI which is vendor-specific.
Example: The artifact repository URL of an
image.
This field is a member of `oneof`_ ``identifier``.
"""
name: str = proto.Field(
proto.STRING,
number=1,
)
id: str = proto.Field(
proto.STRING,
number=2,
)
generic_uri: str = proto.Field(
proto.STRING,
number=3,
oneof="identifier",
)
[docs] class Assessment(proto.Message):
r"""Assessment provides all information that is related to a
single vulnerability for this product.
Attributes:
cve (str):
Holds the MITRE standard Common Vulnerabilities and
Exposures (CVE) tracking number for the vulnerability.
Deprecated: Use vulnerability_id instead to denote CVEs.
vulnerability_id (str):
The vulnerability identifier for this
Assessment. Will hold one of common identifiers
e.g. CVE, GHSA etc.
short_description (str):
A one sentence description of this Vex.
long_description (str):
A detailed description of this Vex.
related_uris (MutableSequence[grafeas.grafeas_v1.types.RelatedUrl]):
Holds a list of references associated with
this vulnerability item and assessment. These
uris have additional information about the
vulnerability and the assessment itself. E.g.
Link to a document which details how this
assessment concluded the state of this
vulnerability.
state (grafeas.grafeas_v1.types.VulnerabilityAssessmentNote.Assessment.State):
Provides the state of this Vulnerability
assessment.
impacts (MutableSequence[str]):
Contains information about the impact of this
vulnerability, this will change with time.
justification (grafeas.grafeas_v1.types.VulnerabilityAssessmentNote.Assessment.Justification):
Justification provides the justification when the state of
the assessment if NOT_AFFECTED.
remediations (MutableSequence[grafeas.grafeas_v1.types.VulnerabilityAssessmentNote.Assessment.Remediation]):
Specifies details on how to handle (and
presumably, fix) a vulnerability.
"""
[docs] class State(proto.Enum):
r"""Provides the state of this Vulnerability assessment.
Values:
STATE_UNSPECIFIED (0):
No state is specified.
AFFECTED (1):
This product is known to be affected by this
vulnerability.
NOT_AFFECTED (2):
This product is known to be not affected by
this vulnerability.
FIXED (3):
This product contains a fix for this
vulnerability.
UNDER_INVESTIGATION (4):
It is not known yet whether these versions
are or are not affected by the vulnerability.
However, it is still under investigation.
"""
STATE_UNSPECIFIED = 0
AFFECTED = 1
NOT_AFFECTED = 2
FIXED = 3
UNDER_INVESTIGATION = 4
[docs] class Justification(proto.Message):
r"""Justification provides the justification when the state of the
assessment if NOT_AFFECTED.
Attributes:
justification_type (grafeas.grafeas_v1.types.VulnerabilityAssessmentNote.Assessment.Justification.JustificationType):
The justification type for this
vulnerability.
details (str):
Additional details on why this justification
was chosen.
"""
[docs] class JustificationType(proto.Enum):
r"""Provides the type of justification.
Values:
JUSTIFICATION_TYPE_UNSPECIFIED (0):
JUSTIFICATION_TYPE_UNSPECIFIED.
COMPONENT_NOT_PRESENT (1):
The vulnerable component is not present in
the product.
VULNERABLE_CODE_NOT_PRESENT (2):
The vulnerable code is not present. Typically
this case occurs when source code is configured
or built in a way that excludes the vulnerable
code.
VULNERABLE_CODE_NOT_IN_EXECUTE_PATH (3):
The vulnerable code can not be executed.
Typically this case occurs when the product
includes the vulnerable code but does not call
or use the vulnerable code.
VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY (4):
The vulnerable code cannot be controlled by
an attacker to exploit the vulnerability.
INLINE_MITIGATIONS_ALREADY_EXIST (5):
The product includes built-in protections or
features that prevent exploitation of the
vulnerability. These built-in protections cannot
be subverted by the attacker and cannot be
configured or disabled by the user. These
mitigations completely prevent exploitation
based on known attack vectors.
"""
JUSTIFICATION_TYPE_UNSPECIFIED = 0
COMPONENT_NOT_PRESENT = 1
VULNERABLE_CODE_NOT_PRESENT = 2
VULNERABLE_CODE_NOT_IN_EXECUTE_PATH = 3
VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY = 4
INLINE_MITIGATIONS_ALREADY_EXIST = 5
justification_type: "VulnerabilityAssessmentNote.Assessment.Justification.JustificationType" = proto.Field(
proto.ENUM,
number=1,
enum="VulnerabilityAssessmentNote.Assessment.Justification.JustificationType",
)
details: str = proto.Field(
proto.STRING,
number=2,
)
[docs] class Remediation(proto.Message):
r"""Specifies details on how to handle (and presumably, fix) a
vulnerability.
Attributes:
remediation_type (grafeas.grafeas_v1.types.VulnerabilityAssessmentNote.Assessment.Remediation.RemediationType):
The type of remediation that can be applied.
details (str):
Contains a comprehensive human-readable
discussion of the remediation.
remediation_uri (grafeas.grafeas_v1.types.RelatedUrl):
Contains the URL where to obtain the
remediation.
"""
[docs] class RemediationType(proto.Enum):
r"""The type of remediation that can be applied.
Values:
REMEDIATION_TYPE_UNSPECIFIED (0):
No remediation type specified.
MITIGATION (1):
A MITIGATION is available.
NO_FIX_PLANNED (2):
No fix is planned.
NONE_AVAILABLE (3):
Not available.
VENDOR_FIX (4):
A vendor fix is available.
WORKAROUND (5):
A workaround is available.
"""
REMEDIATION_TYPE_UNSPECIFIED = 0
MITIGATION = 1
NO_FIX_PLANNED = 2
NONE_AVAILABLE = 3
VENDOR_FIX = 4
WORKAROUND = 5
remediation_type: "VulnerabilityAssessmentNote.Assessment.Remediation.RemediationType" = proto.Field(
proto.ENUM,
number=1,
enum="VulnerabilityAssessmentNote.Assessment.Remediation.RemediationType",
)
details: str = proto.Field(
proto.STRING,
number=2,
)
remediation_uri: common.RelatedUrl = proto.Field(
proto.MESSAGE,
number=3,
message=common.RelatedUrl,
)
cve: str = proto.Field(
proto.STRING,
number=1,
)
vulnerability_id: str = proto.Field(
proto.STRING,
number=9,
)
short_description: str = proto.Field(
proto.STRING,
number=2,
)
long_description: str = proto.Field(
proto.STRING,
number=3,
)
related_uris: MutableSequence[common.RelatedUrl] = proto.RepeatedField(
proto.MESSAGE,
number=4,
message=common.RelatedUrl,
)
state: "VulnerabilityAssessmentNote.Assessment.State" = proto.Field(
proto.ENUM,
number=5,
enum="VulnerabilityAssessmentNote.Assessment.State",
)
impacts: MutableSequence[str] = proto.RepeatedField(
proto.STRING,
number=6,
)
justification: "VulnerabilityAssessmentNote.Assessment.Justification" = (
proto.Field(
proto.MESSAGE,
number=7,
message="VulnerabilityAssessmentNote.Assessment.Justification",
)
)
remediations: MutableSequence[
"VulnerabilityAssessmentNote.Assessment.Remediation"
] = proto.RepeatedField(
proto.MESSAGE,
number=8,
message="VulnerabilityAssessmentNote.Assessment.Remediation",
)
title: str = proto.Field(
proto.STRING,
number=1,
)
short_description: str = proto.Field(
proto.STRING,
number=2,
)
long_description: str = proto.Field(
proto.STRING,
number=3,
)
language_code: str = proto.Field(
proto.STRING,
number=4,
)
publisher: Publisher = proto.Field(
proto.MESSAGE,
number=5,
message=Publisher,
)
product: Product = proto.Field(
proto.MESSAGE,
number=6,
message=Product,
)
assessment: Assessment = proto.Field(
proto.MESSAGE,
number=7,
message=Assessment,
)
__all__ = tuple(sorted(__protobuf__.manifest))