Skip to content

Commit c7d6a31

Browse files
committed
Compute package risk from impacts
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 9f4d4d0 commit c7d6a31

File tree

4 files changed

+10
-22
lines changed

4 files changed

+10
-22
lines changed

vulnerabilities/api_v2.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,7 +1172,6 @@ def bulk_search(self, request):
11721172
),
11731173
)
11741174
.with_is_vulnerable()
1175-
.order_by("package_url")
11761175
)
11771176

11781177
packages = query
@@ -1206,7 +1205,8 @@ def bulk_search(self, request):
12061205

12071206
query = (
12081207
PackageV2.objects.filter(package_url__in=purls)
1209-
.distinct()
1208+
.order_by("plain_package_url")
1209+
.distinct("plain_package_url")
12101210
.prefetch_related(
12111211
Prefetch(
12121212
"affected_in_impacts",

vulnerabilities/pipelines/v2_improvers/collect_commits.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,6 @@ def collect_and_store_fix_commits(self):
6161

6262
# Skip if already processed
6363
if is_vcs_url_already_processed(commit_id=vcs_url):
64-
self.log(
65-
f"Skipping already processed reference: {reference.url} with VCS URL {vcs_url}"
66-
)
6764
continue
6865
# check if vcs_url has commit
6966
for impact in adv.impacted_packages.all():

vulnerabilities/pipelines/v2_improvers/compute_package_risk.py

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,13 @@ def steps(cls):
3434

3535
def compute_and_store_vulnerability_risk_score(self):
3636
affected_advisories = (
37-
AdvisoryV2.objects.filter(affecting_packages__isnull=False)
38-
.prefetch_related(
39-
"references",
40-
"severities",
41-
"exploits",
42-
)
37+
AdvisoryV2.objects.filter(impacted_packages__affecting_packages__isnull=False)
38+
.prefetch_related("references", "severities", "exploits")
4339
.distinct()
4440
)
4541

4642
self.log(
47-
f"Calculating risk for {affected_advisories.count():,d} vulnerability with a affected packages records"
43+
f"Calculating risk for {affected_advisories.count():,d} advisory with a affected packages records"
4844
)
4945

5046
progress = LoopProgress(total_iterations=affected_advisories.count(), logger=self.log)
@@ -53,7 +49,7 @@ def compute_and_store_vulnerability_risk_score(self):
5349
updated_vulnerability_count = 0
5450
batch_size = 5000
5551

56-
for advisory in progress.iter(affected_advisories.paginated(per_page=batch_size)):
52+
for advisory in progress.iter(affected_advisories.iterator(chunk_size=batch_size)):
5753
severities = advisory.severities.all()
5854
references = advisory.references.all()
5955
exploits = advisory.exploits.all()
@@ -65,9 +61,6 @@ def compute_and_store_vulnerability_risk_score(self):
6561
)
6662
advisory.weighted_severity = weighted_severity
6763
advisory.exploitability = exploitability
68-
print(
69-
f"Computed risk for {advisory.advisory_id} with weighted_severity={weighted_severity} and exploitability={exploitability}"
70-
)
7164
updatables.append(advisory)
7265

7366
if len(updatables) >= batch_size:
@@ -90,9 +83,7 @@ def compute_and_store_vulnerability_risk_score(self):
9083
)
9184

9285
def compute_and_store_package_risk_score(self):
93-
affected_packages = (
94-
PackageV2.objects.filter(affected_by_advisories__isnull=False)
95-
).distinct()
86+
affected_packages = (PackageV2.objects.filter(affected_in_impacts__isnull=False)).distinct()
9687

9788
self.log(f"Calculating risk for {affected_packages.count():,d} affected package records")
9889

@@ -106,7 +97,7 @@ def compute_and_store_package_risk_score(self):
10697
updated_package_count = 0
10798
batch_size = 10000
10899

109-
for package in progress.iter(affected_packages.paginated(per_page=batch_size)):
100+
for package in progress.iter(affected_packages.iterator(chunk_size=batch_size)):
110101
risk_score = compute_package_risk_v2(package)
111102

112103
if not risk_score:

vulnerabilities/risk.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ def compute_package_risk_v2(package):
122122
and determining the associated risk.
123123
"""
124124
result = []
125-
for advisory in package.affected_by_advisories.all():
126-
if risk := advisory.risk_score:
125+
for impact in package.affected_in_impacts.all():
126+
if risk := impact.advisory.risk_score:
127127
result.append(float(risk))
128128

129129
if not result:

0 commit comments

Comments
 (0)