Skip to content

Commit 4149075

Browse files
dejanbhelio-frota
authored andcommitted
fix: properly filter cvss scores for the advisory
Currently the logic incorrectly filters CVSS scores based on the vulnerability ID instead of the advisory ID. This change ensures that only CVSS scores related to the specific advisory are included in the advisory summary.
1 parent c2fccb9 commit 4149075

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

modules/fundamental/src/vulnerability/model/details/vulnerability_advisory.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ impl VulnerabilityAdvisoryHead {
8585
}
8686
}
8787
pub async fn from_entities<C: ConnectionTrait>(
88-
vulnerability: &vulnerability::Model,
8988
vuln_advisories: &[advisory::Model],
9089
vuln_cvss3s: &[cvss3::Model],
9190
tx: &C,
@@ -98,7 +97,7 @@ impl VulnerabilityAdvisoryHead {
9897
// filter all vulnerability cvss3 to those that pertain to only this advisory.
9998
let cvss3 = vuln_cvss3s
10099
.iter()
101-
.filter(|e| e.vulnerability_id == vulnerability.id)
100+
.filter(|e| e.advisory_id == advisory.id)
102101
.collect::<Vec<_>>();
103102

104103
let score = if cvss3.is_empty() {

modules/fundamental/src/vulnerability/model/summary.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,8 @@ impl VulnerabilitySummary {
7070
.await?,
7171
average_severity: vuln.base_severity.map(|s| s.into()),
7272
average_score: vuln.base_score,
73-
advisories: VulnerabilityAdvisoryHead::from_entities(
74-
vuln,
75-
advisories,
76-
vuln_cvss3s,
77-
tx,
78-
)
79-
.await?,
73+
advisories: VulnerabilityAdvisoryHead::from_entities(advisories, vuln_cvss3s, tx)
74+
.await?,
8075
});
8176
}
8277

modules/fundamental/src/vulnerability/service/test.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,21 @@ async fn vulnerability_queries(ctx: &TrustifyContext) -> Result<(), anyhow::Erro
457457
assert_eq!(vulns.items[0].average_score, Some(6.9));
458458
assert_eq!(vulns.items[0].average_severity, Some(Severity::Medium));
459459

460+
let vulns = service
461+
.fetch_vulnerabilities(
462+
q("CVE-2023-39325"),
463+
Paginated::default(),
464+
Default::default(),
465+
&ctx.db,
466+
)
467+
.await?;
468+
assert_eq!(1, vulns.items.len());
469+
assert_eq!(2, vulns.items[0].advisories.len());
470+
assert_eq!(vulns.items[0].advisories[0].score, Some(7.5));
471+
assert_eq!(vulns.items[0].advisories[0].severity, Some(Severity::High));
472+
assert_eq!(vulns.items[0].advisories[1].score, None);
473+
assert_eq!(vulns.items[0].advisories[1].severity, None);
474+
460475
Ok(())
461476
}
462477

0 commit comments

Comments
 (0)