Skip to content

Commit 7ead715

Browse files
committed
Add risk, severity and exploits
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent e61f7d9 commit 7ead715

File tree

4 files changed

+45
-6
lines changed

4 files changed

+45
-6
lines changed

vulnerabilities/api_v3.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,9 @@ def return_advisories_data(self, package, advisories_qs, advisories):
356356
{
357357
"advisory_id": advisory["identifier"],
358358
"aliases": [alias.alias for alias in advisory["aliases"]],
359+
"weighted_severity": advisory["weighted_severity"],
360+
"exploitability": advisory["exploitability"],
361+
"risk_score": advisory["risk_score"],
359362
"summary": advisory["advisory"].summary,
360363
"fixed_by_packages": [pkg.purl for pkg in impact.fixed_by_packages.all()],
361364
}

vulnerabilities/templates/package_details_v2.html

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@
142142
<th style="width: 200px;">Advisory</th>
143143
<th>Summary</th>
144144
<th style="width: 310px;">Fixed in package version</th>
145+
<th>Risk score</th>
145146
</tr>
146147
</thead>
147148

@@ -197,6 +198,13 @@
197198
{% endif %}
198199
{% endwith %}
199200
</td>
201+
<td>
202+
{% if advisory.risk_score is not None %}
203+
{{ advisory.risk_score }}
204+
{% else %}
205+
{{ "" }}
206+
{% endif %}
207+
</td>
200208
</tr>
201209
{% empty %}
202210
<tr>
@@ -258,6 +266,13 @@
258266
{% endif %}
259267
{% endwith %}
260268
</td>
269+
<td>
270+
{% if advisory.risk_score is not None %}
271+
{{ advisory.risk_score }}
272+
{% else %}
273+
{{ "" }}
274+
{% endif %}
275+
</td>
261276
</tr>
262277
{% empty %}
263278
<tr>

vulnerabilities/utils.py

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -960,13 +960,34 @@ def get_advisories_from_groups(groups):
960960
Return a list of advisories from the merged groups of advisories.
961961
"""
962962
advisories = []
963-
for aliases, primary, _ in groups:
963+
weighted_severity = None
964+
exploitability = None
965+
risk_score = None
966+
for aliases, primary, secondaries in groups:
967+
severity_scores = []
968+
exploitability_scores = []
964969
identifier = primary.advisory_id.split("/")[-1]
965-
966970
filtered_aliases = [alias for alias in aliases if alias.alias != identifier]
967-
971+
severity_scores.extend([adv.weighted_severity for adv in secondaries])
972+
exploitability_scores.extend([adv.exploitability for adv in secondaries])
973+
severity_scores.append(primary.weighted_severity)
974+
exploitability_scores.append(primary.exploitability)
975+
if severity_scores:
976+
weighted_severity = round(max(severity_scores), 1)
977+
if exploitability_scores:
978+
exploitability = max(exploitability_scores)
979+
if exploitability and weighted_severity:
980+
risk_score = min(float(exploitability * weighted_severity), 10.0)
981+
risk_score = round(risk_score, 1)
968982
advisories.append(
969-
{"aliases": filtered_aliases, "advisory": primary, "identifier": identifier}
983+
{
984+
"aliases": filtered_aliases,
985+
"advisory": primary,
986+
"identifier": identifier,
987+
"weighted_severity": weighted_severity,
988+
"exploitability": exploitability,
989+
"risk_score": risk_score,
990+
}
970991
)
971992

972993
return advisories

vulnerabilities/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ def get_context_data(self, **kwargs):
218218

219219
if not package.type in TYPES_WITH_MULTIPLE_IMPORTERS:
220220
affecting_advisories = AdvisoryV2.objects.latest_affecting_advisories_for_purl(
221-
purl=package.purl
221+
purl=package.purl
222222
)
223223

224224
fixed_by_advisories = AdvisoryV2.objects.latest_fixed_by_advisories_for_purl(
@@ -292,7 +292,7 @@ def get_context_data(self, **kwargs):
292292

293293
if package.type in TYPES_WITH_MULTIPLE_IMPORTERS:
294294
affecting_advisories = AdvisoryV2.objects.latest_affecting_advisories_for_purl(
295-
purl=package.purl
295+
purl=package.purl
296296
)
297297

298298
fixed_by_advisories = AdvisoryV2.objects.latest_fixed_by_advisories_for_purl(

0 commit comments

Comments
 (0)