Skip to content

Commit f2647aa

Browse files
committed
fix: add validation for cvss severity scores
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 7d977b7 commit f2647aa

2 files changed

Lines changed: 19 additions & 3 deletions

File tree

vulnerabilities/importer.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333

3434
from vulnerabilities import severity_systems
3535
from vulnerabilities.oval_parser import OvalParser
36+
from vulnerabilities.severity_systems import CVSSV3
37+
from vulnerabilities.severity_systems import CVSSV4
38+
from vulnerabilities.severity_systems import CVSSV31
3639
from vulnerabilities.severity_systems import SCORING_SYSTEMS
3740
from vulnerabilities.severity_systems import ScoringSystem
3841
from vulnerabilities.utils import classproperty
@@ -64,8 +67,20 @@ def __post_init__(self):
6467
if not isinstance(self.system, ScoringSystem):
6568
raise TypeError(f"system must be a ScoringSystem, got {type(self.system)!r}")
6669

67-
if not isinstance(self.value, str):
68-
self.value = str(self.value)
70+
if self.value and not isinstance(self.value, str):
71+
try:
72+
self.value = str(float(self.value))
73+
except:
74+
self.value = ""
75+
76+
if self.scoring_elements and self.system in [CVSSV3, CVSSV31, CVSSV4]:
77+
cvss_score = self.system.compute(self.scoring_elements)
78+
if not self.value:
79+
self.value = cvss_score
80+
elif float(cvss_score) != float(self.value):
81+
raise ValueError(
82+
f"CVSS vector and score do not match: {self.scoring_elements} != {self.value}"
83+
)
6984

7085
def to_dict(self):
7186
data = {

vulnerabilities/importers/postgresql.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,9 @@ def to_advisories(data):
113113
severities = []
114114
if "support/security/CVE" in link and vector_link_tag:
115115
parsed_link = urlparse.urlparse(vector_link_tag["href"])
116-
cvss3_vector = urlparse.parse_qs(parsed_link.query)["vector"]
116+
cvss3_vector = urlparse.parse_qs(parsed_link.query).get("vector", [""])[0]
117117
cvss3_base_score = vector_link_tag.text
118+
cvss3_vector = "CVSS:3.0/" + cvss3_vector.removeprefix("CVSS:3.0/")
118119
severity = VulnerabilitySeverity(
119120
system=severity_systems.CVSSV3,
120121
value=cvss3_base_score,

0 commit comments

Comments
 (0)