Skip to content

Commit 7ca42c8

Browse files
committed
Use related advisory severity to calculate exploitibility, weighted severity and risk scores
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 928b773 commit 7ca42c8

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

vulnerabilities/pipelines/v2_improvers/compute_package_risk.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
# See https://aboutcode.org for more information about nexB OSS projects.
88
#
99
from aboutcode.pipeline import LoopProgress
10+
from django.db.models import Prefetch
11+
from django.db.models import Q
1012

13+
from vulnerabilities.models import AdvisorySeverity
1114
from vulnerabilities.models import AdvisoryV2
1215
from vulnerabilities.models import PackageV2
1316
from vulnerabilities.pipelines import VulnerableCodePipeline
@@ -35,7 +38,15 @@ def steps(cls):
3538
def compute_and_store_vulnerability_risk_score(self):
3639
affected_advisories = (
3740
AdvisoryV2.objects.filter(impacted_packages__affecting_packages__isnull=False)
38-
.prefetch_related("references", "severities", "exploits")
41+
.prefetch_related(
42+
"references",
43+
"severities",
44+
"exploits",
45+
Prefetch(
46+
"related_advisory_severities",
47+
queryset=AdvisoryV2.objects.prefetch_related("severities"),
48+
),
49+
)
3950
.distinct()
4051
)
4152

@@ -50,10 +61,13 @@ def compute_and_store_vulnerability_risk_score(self):
5061
batch_size = 5000
5162

5263
for advisory in progress.iter(affected_advisories.iterator(chunk_size=batch_size)):
53-
severities = advisory.severities.all()
5464
references = advisory.references.all()
5565
exploits = advisory.exploits.all()
5666

67+
severities = AdvisorySeverity.objects.filter(
68+
Q(advisories=advisory) | Q(advisories__related_to_advisory_severities=advisory)
69+
).distinct()
70+
5771
weighted_severity, exploitability = compute_vulnerability_risk_factors(
5872
references=references,
5973
severities=severities,

vulnerabilities/tests/pipelines/v2_improvers/test_relate_severities.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
#
99

1010
import pytest
11+
from django.db.models import Q
1112

13+
from vulnerabilities.models import AdvisorySeverity
1214
from vulnerabilities.models import AdvisoryV2
1315
from vulnerabilities.pipelines.v2_improvers.relate_severities import RelateSeveritiesPipeline
1416
from vulnerabilities.severity_systems import EPSS
@@ -42,6 +44,10 @@ def test_relate_severities_by_advisory_id():
4244
pipeline.relate_severities()
4345

4446
assert base.related_advisory_severities.filter(id=severity_advisory.id).exists()
47+
severities = AdvisorySeverity.objects.filter(
48+
Q(advisories=base) | Q(advisories__related_to_advisory_severities=base)
49+
).distinct()
50+
assert severities.filter(id=severity_advisory.severities.first().id).exists()
4551

4652

4753
@pytest.mark.django_db

0 commit comments

Comments
 (0)