Skip to content

Commit ffeddce

Browse files
Include analysis.detail from Dependency Track FPF in finding description (#14931)
* Include analysis.detail from Dependency Track FPF in finding description When Dependency Track sends findings via the Finding Packaging Format, the analysis.detail field is now forwarded alongside analysis.state. This appends the audit detail text to the finding description under an "Audit Detail:" label, making analyst notes visible without switching back to Dependency Track. * Move audit detail to top of finding description * Revert "Move audit detail to top of finding description" This reverts commit c3494e1. --------- Co-authored-by: valentijnscholten <valentijnscholten@gmail.com>
1 parent 7c7be81 commit ffeddce

3 files changed

Lines changed: 52 additions & 0 deletions

File tree

dojo/tools/dependency_track/parser.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ def _convert_dependency_track_finding_to_dojo_finding(self, dependency_track_fin
154154
analysis = dependency_track_finding.get("analysis")
155155
is_false_positive = bool(analysis is not None and analysis.get("state") == "FALSE_POSITIVE")
156156

157+
if analysis is not None and analysis.get("detail"):
158+
vulnerability_description += f"\nAudit Detail: {analysis['detail']}"
159+
157160
# Get the EPSS details
158161
epss_percentile = dependency_track_finding["vulnerability"].get("epssPercentile", None)
159162

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{
2+
"meta": {
3+
"application": "Dependency-Track",
4+
"version": "4.14.0",
5+
"timestamp": "2026-01-01T00:00:00Z"
6+
},
7+
"findings": [
8+
{
9+
"component": {
10+
"name": "log4j-core",
11+
"project": "d38ebf15-96cd-4a01-9bca-7b49b5b0e7c4",
12+
"purl": "pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1",
13+
"uuid": "c8a65fcd-dbf4-41eb-b1ec-55e67c91b22b",
14+
"version": "2.14.1"
15+
},
16+
"attribution": {
17+
"analyzerIdentity": "INTERNAL_ANALYZER",
18+
"attributedOn": "2026-01-01 00:00:00.000"
19+
},
20+
"vulnerability": {
21+
"uuid": "f8469ce4-019a-4482-8510-624dcf65f005",
22+
"source": "NVD",
23+
"vulnId": "CVE-2021-44228",
24+
"severity": "CRITICAL",
25+
"description": "Apache Log4j2 JNDI features do not protect against attacker-controlled LDAP.",
26+
"aliases": []
27+
},
28+
"analysis": {
29+
"state": "IN_TRIAGE",
30+
"isSuppressed": false,
31+
"detail": "Reviewed and confirmed vulnerable. Upgrade scheduled for next sprint."
32+
},
33+
"matrix": "d38ebf15-96cd-4a01-9bca-7b49b5b0e7c4:c8a65fcd-dbf4-41eb-b1ec-55e67c91b22b:f8469ce4-019a-4482-8510-624dcf65f005"
34+
}
35+
],
36+
"project": {
37+
"name": "test-app",
38+
"uuid": "d38ebf15-96cd-4a01-9bca-7b49b5b0e7c4",
39+
"version": "1.0.0"
40+
},
41+
"version": "1.3"
42+
}

unittests/tools/test_dependency_track_parser.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,3 +168,10 @@ def test_dependency_track_parser_findings_with_epss_score(self):
168168
self.assertEqual(0.07756, findings[0].epss_percentile)
169169
self.assertEqual(4.2, findings[0].cvssv3_score)
170170
self.assertIn("CVE-2023-45803", findings[0].unsaved_vulnerability_ids)
171+
172+
def test_dependency_track_parser_finding_with_analysis_detail(self):
173+
with (get_unit_tests_scans_path("dependency_track") / "one_finding_with_analysis_detail.json").open(encoding="utf-8") as testfile:
174+
parser = DependencyTrackParser()
175+
findings = parser.get_findings(testfile, Test())
176+
self.assertEqual(1, len(findings))
177+
self.assertIn("Audit Detail: Reviewed and confirmed vulnerable. Upgrade scheduled for next sprint.", findings[0].description)

0 commit comments

Comments
 (0)