Skip to content

Commit 50ff81c

Browse files
committed
Fix severity and exploit calculation
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent d2b7e82 commit 50ff81c

File tree

2 files changed

+78
-18
lines changed

2 files changed

+78
-18
lines changed

vulnerabilities/api_v3.py

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
from vulnerabilities.models import AdvisoryReference
2323
from vulnerabilities.models import AdvisorySet
24+
from vulnerabilities.models import AdvisorySetMember
2425
from vulnerabilities.models import AdvisorySeverity
2526
from vulnerabilities.models import AdvisoryV2
2627
from vulnerabilities.models import AdvisoryWeakness
@@ -257,12 +258,26 @@ def get_affected_by_vulnerabilities(self, package):
257258
is_grouped = AdvisorySet.objects.filter(package=package, relation_type="affecting").exists()
258259

259260
if is_grouped:
260-
affected_by_advisories_qs = AdvisorySet.objects.filter(
261-
package=package, relation_type="affecting"
262-
).select_related("primary_advisory")
261+
affected_by_advisories_qs = (
262+
AdvisorySet.objects.filter(package=package, relation_type="affecting")
263+
.select_related("primary_advisory")
264+
.prefetch_related(
265+
Prefetch(
266+
"members",
267+
queryset=AdvisorySetMember.objects.filter(is_primary=False).select_related(
268+
"advisory"
269+
),
270+
to_attr="secondary_members",
271+
)
272+
)
273+
)
263274

264275
affected_groups = [
265-
(list(adv.aliases.all()), adv.primary_advisory, "")
276+
(
277+
list(adv.aliases.all()),
278+
adv.primary_advisory,
279+
[member.advisory for member in adv.secondary_members],
280+
)
266281
for adv in affected_by_advisories_qs
267282
]
268283

@@ -303,12 +318,27 @@ def get_fixing_vulnerabilities(self, package):
303318
is_grouped = AdvisorySet.objects.filter(package=package, relation_type="fixing").exists()
304319

305320
if is_grouped:
306-
fixing_advisories_qs = AdvisorySet.objects.filter(
307-
package=package, relation_type="fixing"
308-
).select_related("primary_advisory")
321+
fixing_advisories_qs = (
322+
AdvisorySet.objects.filter(package=package, relation_type="fixing")
323+
.select_related("primary_advisory")
324+
.prefetch_related(
325+
Prefetch(
326+
"members",
327+
queryset=AdvisorySetMember.objects.filter(is_primary=False).select_related(
328+
"advisory"
329+
),
330+
to_attr="secondary_members",
331+
)
332+
)
333+
)
309334

310335
fixing_groups = [
311-
(list(adv.aliases.all()), adv.primary_advisory, "") for adv in fixing_advisories_qs
336+
(
337+
list(adv.aliases.all()),
338+
adv.primary_advisory,
339+
[member.advisory for member in adv.secondary_members],
340+
)
341+
for adv in fixing_advisories_qs
312342
]
313343

314344
advisories = get_advisories_from_groups(fixing_groups)
@@ -360,7 +390,9 @@ def return_advisories_data(self, package, advisories_qs, advisories):
360390
"exploitability": advisory["exploitability"],
361391
"risk_score": advisory["risk_score"],
362392
"summary": advisory["advisory"].summary,
363-
"fixed_by_packages": list(set([pkg.purl for pkg in impact.fixed_by_packages.all()])),
393+
"fixed_by_packages": list(
394+
set([pkg.purl for pkg in impact.fixed_by_packages.all()])
395+
),
364396
}
365397
)
366398

vulnerabilities/views.py

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
from vulnerabilities.models import PipelineRun
4343
from vulnerabilities.models import PipelineSchedule
4444
from vulnerabilities.pipelines.v2_importers.epss_importer_v2 import EPSSImporterPipeline
45-
from vulnerabilities.pipes.group_advisories import delete_and_save_advisory_set
4645
from vulnerabilities.severity_systems import EPSS
4746
from vulnerabilities.severity_systems import SCORING_SYSTEMS
4847
from vulnerabilities.utils import TYPES_WITH_MULTIPLE_IMPORTERS
@@ -266,20 +265,49 @@ def get_context_data(self, **kwargs):
266265
fixed_pkg_details = get_fixed_package_details(package)
267266
context["fixed_package_details"] = fixed_pkg_details
268267

269-
affected_by_advisories_qs = models.AdvisorySet.objects.filter(
270-
package=package, relation_type="affecting"
271-
).select_related("primary_advisory")
268+
affected_by_advisories_qs = (
269+
models.AdvisorySet.objects.filter(package=package, relation_type="affecting")
270+
.select_related("primary_advisory")
271+
.prefetch_related(
272+
Prefetch(
273+
"members",
274+
queryset=AdvisorySetMember.objects.filter(is_primary=False).select_related(
275+
"advisory"
276+
),
277+
to_attr="secondary_members",
278+
)
279+
)
280+
)
272281

273-
fixing_advisories_qs = models.AdvisorySet.objects.filter(
274-
package=package, relation_type="fixing"
275-
).select_related("primary_advisory")
282+
fixing_advisories_qs = (
283+
models.AdvisorySet.objects.filter(package=package, relation_type="fixing")
284+
.select_related("primary_advisory")
285+
.prefetch_related(
286+
Prefetch(
287+
"members",
288+
queryset=AdvisorySetMember.objects.filter(is_primary=False).select_related(
289+
"advisory"
290+
),
291+
to_attr="secondary_members",
292+
)
293+
)
294+
)
276295

277296
affected_groups = [
278-
(list(adv.aliases.all()), adv.primary_advisory, "")
297+
(
298+
list(adv.aliases.all()),
299+
adv.primary_advisory,
300+
[a.advisory for a in adv.secondary_members],
301+
)
279302
for adv in affected_by_advisories_qs
280303
]
281304
fixing_groups = [
282-
(list(adv.aliases.all()), adv.primary_advisory, "") for adv in fixing_advisories_qs
305+
(
306+
list(adv.aliases.all()),
307+
adv.primary_advisory,
308+
[a.advisory for a in adv.secondary_members],
309+
)
310+
for adv in fixing_advisories_qs
283311
]
284312

285313
affected_advisories = get_advisories_from_groups(affected_groups)

0 commit comments

Comments
 (0)