Skip to content

Commit 6f0cd3d

Browse files
authored
Add CVSS details extraction to AWS Inspector2 parser (#13305)
* Add CVSS details extraction to AWS Inspector2 parser and update tests * Fix ruff * Update dojo/tools/aws_inspector2/parser.py * Correct tests
1 parent 4ac2aeb commit 6f0cd3d

2 files changed

Lines changed: 17 additions & 0 deletions

File tree

dojo/tools/aws_inspector2/parser.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from dateutil import parser as date_parser
55

66
from dojo.models import Endpoint, Finding
7+
from dojo.utils import parse_cvss_data
78

89

910
class AWSInspector2Parser:
@@ -40,6 +41,8 @@ def get_findings(self, file, test):
4041
else:
4142
msg = "Incorrect Inspector2 report format"
4243
raise TypeError(msg)
44+
# Attempt to get CVSS details
45+
finding = self.get_cvss_details(finding, raw_finding)
4346
# process the endpoints
4447
finding = self.process_endpoints(finding, raw_finding)
4548
findings.append(finding)
@@ -97,6 +100,16 @@ def get_base_finding(self, raw_finding: dict) -> Finding:
97100

98101
return finding
99102

103+
def get_cvss_details(self, finding: Finding, raw_finding: dict) -> Finding:
104+
cvss_details = raw_finding.get("inspectorScoreDetails", {}).get("adjustedCvss", {})
105+
if cvss_vector := cvss_details.get("scoringVector"):
106+
if cvss_data := parse_cvss_data(cvss_vector):
107+
finding.cvssv2 = cvss_data.get("cvssv2")
108+
finding.cvssv3 = cvss_data.get("cvssv3")
109+
finding.cvssv4 = cvss_data.get("cvssv4")
110+
111+
return finding
112+
100113
def get_package_vulnerability(self, finding: Finding, raw_finding: dict) -> Finding:
101114
vulnerability_details = raw_finding.get("packageVulnerabilityDetails", {})
102115
vulnerability_packages_descriptions = "\n".join(

unittests/tools/test_aws_inspector2_parser.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ def test_aws_inspector2_parser_with_one_vuln_has_one_findings(self):
2828
self.assertEqual(1, len(findings))
2929
self.assertEqual("CVE-2021-3744 - linux", findings[0].title)
3030
self.assertEqual("Medium", findings[0].severity)
31+
self.assertEqual("CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H", findings[0].cvssv3)
32+
self.assertIsNone(findings[0].cvssv3_score) # The score will be created by the finding save method
3133

3234
def test_aws_inspector2_parser_with_many_vuln_has_many_findings(self):
3335
with (get_unit_tests_scans_path("aws_inspector2") / "aws_inspector2_many_vul.json").open(encoding="utf-8") as testfile:
@@ -41,6 +43,8 @@ def test_aws_inspector2_parser_with_many_vuln_has_many_findings(self):
4143
self.assertEqual(True, findings[0].is_mitigated)
4244
# 2024-06-14T04:03:53.051000+02:00
4345
self.assertEqual(datetime(2024, 6, 14, 4, 3, 53, 51000, tzinfo=tzoffset(None, 7200)), findings[0].mitigated)
46+
self.assertEqual("CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H", findings[0].cvssv3)
47+
self.assertIsNone(findings[0].cvssv3_score) # The score will be created by the finding save method
4448

4549
def test_aws_inspector2_parser_empty_with_error(self):
4650
with self.assertRaises(TypeError) as context, \

0 commit comments

Comments
 (0)