Skip to content

Commit 22bf8a8

Browse files
Set unique_id_from_tool from matrix field in Dependency Track parser (#14380)
* Set unique_id_from_tool from matrix field in Dependency Track parser * fix(dependency-track): store matrix as unique_id_from_tool, uuid as vuln_id_from_tool - Initialize unique_id_from_tool from the top-level matrix field (backward compat) - Override with vulnerability.matrix if present (newer DT export formats) - Initialize vuln_id_from_tool to None before conditional assignment - Remove duplicate unique_id_from_tool kwarg that caused a syntax error - Update test assertion to expect the full composite matrix string --------- Co-authored-by: valentijnscholten <valentijnscholten@gmail.com>
1 parent 4fb36fc commit 22bf8a8

2 files changed

Lines changed: 12 additions & 2 deletions

File tree

dojo/tools/dependency_track/parser.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,12 @@ def _convert_dependency_track_finding_to_dojo_finding(self, dependency_track_fin
196196
vulnerability_description += "\nVulnerability Subtitle: {subtitle}".format(subtitle=dependency_track_finding["vulnerability"]["subtitle"])
197197
if "description" in dependency_track_finding["vulnerability"] and dependency_track_finding["vulnerability"]["description"] is not None:
198198
vulnerability_description += "\nVulnerability Description: {description}".format(description=dependency_track_finding["vulnerability"]["description"])
199+
vuln_id_from_tool = None
200+
unique_id_from_tool = dependency_track_finding.get("matrix")
199201
if "uuid" in dependency_track_finding["vulnerability"] and dependency_track_finding["vulnerability"]["uuid"] is not None:
200-
unique_id_from_tool = dependency_track_finding["vulnerability"]["uuid"]
201202
vuln_id_from_tool = dependency_track_finding["vulnerability"]["uuid"]
203+
if "matrix" in dependency_track_finding["vulnerability"] and dependency_track_finding["vulnerability"]["matrix"] is not None:
204+
unique_id_from_tool = dependency_track_finding["vulnerability"]["matrix"]
202205

203206
# Get severity according to Dependency Track and convert it to a severity DefectDojo understands
204207
dependency_track_severity = dependency_track_finding["vulnerability"]["severity"]

unittests/tools/test_dependency_track_parser.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def test_dependency_track_parser_has_many_findings(self):
4141
self.assertIsNone(findings[1].unsaved_vulnerability_ids)
4242
self.assertEqual(1, len(findings[2].unsaved_vulnerability_ids))
4343
self.assertEqual("CVE-2016-2097", findings[2].unsaved_vulnerability_ids[0])
44-
self.assertEqual("900991f6-335a-49cb-9bf6-87b545f960ce", findings[2].unique_id_from_tool)
44+
self.assertEqual("8d7f5fcd-210b-491d-a29e-904c2e01b281:3e52f829-3317-48c3-bde1-342c610bd223:900991f6-335a-49cb-9bf6-87b545f960ce", findings[2].unique_id_from_tool)
4545
self.assertEqual("900991f6-335a-49cb-9bf6-87b545f960ce", findings[2].vuln_id_from_tool)
4646
self.assertTrue(findings[2].false_p)
4747
self.assertTrue(findings[2].is_mitigated)
@@ -56,6 +56,10 @@ def test_dependency_track_parser_has_one_finding(self):
5656
parser = DependencyTrackParser()
5757
findings = parser.get_findings(testfile, Test())
5858
self.assertEqual(1, len(findings))
59+
self.assertEqual(
60+
"ca4f2da9-0fad-4a13-92d7-f627f3168a56:b815b581-fec1-4374-a871-68862a8f8d52:115b80bb-46c4-41d1-9f10-8a175d4abb46",
61+
findings[0].unique_id_from_tool,
62+
)
5963

6064
def test_dependency_track_parser_v3_8_0(self):
6165
with (
@@ -65,6 +69,7 @@ def test_dependency_track_parser_v3_8_0(self):
6569
findings = parser.get_findings(testfile, Test())
6670
self.assertEqual(9, len(findings))
6771
self.assertTrue(all(item.file_path is not None for item in findings))
72+
self.assertTrue(all(item.vuln_id_from_tool is not None for item in findings))
6873
self.assertTrue(all(item.unique_id_from_tool is not None for item in findings))
6974

7075
def test_dependency_track_parser_findings_with_alias(self):
@@ -78,6 +83,7 @@ def test_dependency_track_parser_findings_with_alias(self):
7883
self.assertTrue(all(item.file_path is not None for item in findings))
7984
self.assertTrue(all(item.unique_id_from_tool is not None for item in findings))
8085
self.assertTrue(all(item.vuln_id_from_tool is not None for item in findings))
86+
self.assertTrue(all(item.unique_id_from_tool is not None for item in findings))
8187
self.assertIn("CVE-2022-42004", findings[0].unsaved_vulnerability_ids)
8288
self.assertIn("DSA-5283-1", findings[0].unsaved_vulnerability_ids)
8389
self.assertIn("GHSA-rgv9-q543-rqg4", findings[0].unsaved_vulnerability_ids)
@@ -100,6 +106,7 @@ def test_dependency_track_parser_findings_with_cvssV3_score(self):
100106
self.assertTrue(all(item.file_path is not None for item in findings))
101107
self.assertTrue(all(item.unique_id_from_tool is not None for item in findings))
102108
self.assertTrue(all(item.vuln_id_from_tool is not None for item in findings))
109+
self.assertTrue(all(item.unique_id_from_tool is not None for item in findings))
103110
self.assertIn("CVE-2022-42004", findings[0].unsaved_vulnerability_ids)
104111
self.assertEqual(8.3, findings[0].cvssv3_score)
105112

0 commit comments

Comments
 (0)