Skip to content

Commit 8e78581

Browse files
authored
Dependency Track parser: Store DT uuid into unique_id_from_tool instead of vuln_id_from_tool (#14346)
* Store DT uuid into unique_id_from_tool instead of vuln_id_from_tool change default deduplication algorithm to DEDUPE_ALGO_UNIQUE_ID_FROM_TOOL_OR_HASH_CODE * Keep the DT uuid in `vuln_id_from_tool` for backward compatibility
1 parent d1f3358 commit 8e78581

3 files changed

Lines changed: 10 additions & 2 deletions

File tree

dojo/settings/settings.dist.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1634,7 +1634,7 @@ def saml2_attrib_map_format(din):
16341634
"Coverity Scan JSON Report": DEDUPE_ALGO_HASH_CODE,
16351635
"Cobalt.io API": DEDUPE_ALGO_UNIQUE_ID_FROM_TOOL,
16361636
"Crunch42 Scan": DEDUPE_ALGO_UNIQUE_ID_FROM_TOOL,
1637-
"Dependency Track Finding Packaging Format (FPF) Export": DEDUPE_ALGO_HASH_CODE,
1637+
"Dependency Track Finding Packaging Format (FPF) Export": DEDUPE_ALGO_UNIQUE_ID_FROM_TOOL_OR_HASH_CODE,
16381638
"Horusec Scan": DEDUPE_ALGO_HASH_CODE,
16391639
"Mobsfscan Scan": DEDUPE_ALGO_HASH_CODE,
16401640
"SonarQube Scan detailed": DEDUPE_ALGO_UNIQUE_ID_FROM_TOOL,

dojo/tools/dependency_track/parser.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ def _convert_dependency_track_finding_to_dojo_finding(self, dependency_track_fin
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"])
199199
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"]
200201
vuln_id_from_tool = dependency_track_finding["vulnerability"]["uuid"]
201202

202203
# Get severity according to Dependency Track and convert it to a severity DefectDojo understands
@@ -229,6 +230,7 @@ def _convert_dependency_track_finding_to_dojo_finding(self, dependency_track_fin
229230
component_name=component_name,
230231
component_version=component_version,
231232
file_path=file_path,
233+
unique_id_from_tool=unique_id_from_tool,
232234
vuln_id_from_tool=vuln_id_from_tool,
233235
static_finding=True,
234236
dynamic_finding=False)

unittests/tools/test_dependency_track_parser.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ 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)
45+
self.assertEqual("900991f6-335a-49cb-9bf6-87b545f960ce", findings[2].vuln_id_from_tool)
4446
self.assertTrue(findings[2].false_p)
4547
self.assertTrue(findings[2].is_mitigated)
4648
self.assertFalse(findings[2].active)
@@ -63,7 +65,7 @@ def test_dependency_track_parser_v3_8_0(self):
6365
findings = parser.get_findings(testfile, Test())
6466
self.assertEqual(9, len(findings))
6567
self.assertTrue(all(item.file_path is not None for item in findings))
66-
self.assertTrue(all(item.vuln_id_from_tool is not None for item in findings))
68+
self.assertTrue(all(item.unique_id_from_tool is not None for item in findings))
6769

6870
def test_dependency_track_parser_findings_with_alias(self):
6971
with (
@@ -74,8 +76,11 @@ def test_dependency_track_parser_findings_with_alias(self):
7476

7577
self.assertEqual(12, len(findings))
7678
self.assertTrue(all(item.file_path is not None for item in findings))
79+
self.assertTrue(all(item.unique_id_from_tool is not None for item in findings))
7780
self.assertTrue(all(item.vuln_id_from_tool is not None for item in findings))
7881
self.assertIn("CVE-2022-42004", findings[0].unsaved_vulnerability_ids)
82+
self.assertIn("DSA-5283-1", findings[0].unsaved_vulnerability_ids)
83+
self.assertIn("GHSA-rgv9-q543-rqg4", findings[0].unsaved_vulnerability_ids)
7984

8085
def test_dependency_track_parser_findings_with_empty_alias(self):
8186
with (
@@ -93,6 +98,7 @@ def test_dependency_track_parser_findings_with_cvssV3_score(self):
9398
findings = parser.get_findings(testfile, Test())
9499
self.assertEqual(12, len(findings))
95100
self.assertTrue(all(item.file_path is not None for item in findings))
101+
self.assertTrue(all(item.unique_id_from_tool is not None for item in findings))
96102
self.assertTrue(all(item.vuln_id_from_tool is not None for item in findings))
97103
self.assertIn("CVE-2022-42004", findings[0].unsaved_vulnerability_ids)
98104
self.assertEqual(8.3, findings[0].cvssv3_score)

0 commit comments

Comments
 (0)