Skip to content

Commit 1d4462d

Browse files
committed
wip
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 75f9cbd commit 1d4462d

4 files changed

Lines changed: 34 additions & 93 deletions

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Generated by Django 5.2.11 on 2026-06-26 11:14
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("vulnerabilities", "0133_alter_advisorytodov2_issue_detail"),
10+
]
11+
12+
def update_cvss_scoring_system(apps, schema_editor):
13+
AdvisorySeverity = apps.get_model("vulnerabilities", "AdvisorySeverity")
14+
15+
AdvisorySeverity.objects.filter(
16+
scoring_system="cvssv3.1",
17+
scoring_elements__startswith="CVSS:3.0/",
18+
).update(scoring_system="cvssv3")
19+
20+
operations = [
21+
migrations.RunPython(
22+
update_cvss_scoring_system,
23+
reverse_code=migrations.RunPython.noop,
24+
),
25+
]

vulnerabilities/pipelines/v2_improvers/compute_advisory_todo.py

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

1010

11-
import json
1211
from collections import Counter
1312
from collections import defaultdict
1413
from itertools import chain
@@ -28,8 +27,6 @@
2827
from vulnerabilities.models import ToDoRelatedAdvisoryV2
2928
from vulnerabilities.pipelines import VulnerableCodePipeline
3029
from vulnerabilities.pipes.advisory import advisories_checksum
31-
from vulnerabilities.severity_systems import CVSS4
32-
from vulnerabilities.severity_systems import CVSSV3
3330
from vulnerabilities.severity_systems import SCORING_SYSTEMS
3431
from vulnerabilities.utils import canonical_value
3532
from vulnerabilities.utils import normalize_text
@@ -425,90 +422,6 @@ def detect_conflicting_cvss_scores(self):
425422
total_count_conflicting_advisory += count_conflicting_advisory
426423
total_successfully_compared_advisory_count += initial_advisory_group_size
427424

428-
# adv_by_cvss = {
429-
# "cvssv4": {},
430-
# "cvssv3": {},
431-
# "cvssv3.1": {},
432-
# }
433-
# cvss_version = {
434-
# "cvssv4": "4.0",
435-
# "cvssv3": "3.0",
436-
# "cvssv3.1": "3.1",
437-
# }
438-
# for v_type in ["cvssv4"]:
439-
# for avid, value in comparable_adv_map.items():
440-
# if value[v_type]:
441-
# adv_by_cvss[v_type][avid] = value
442-
443-
# all_conflict_items = []
444-
# conflicting_advisories = []
445-
# for v_type, item in adv_by_cvss.items():
446-
# if len(item) < 2:
447-
# continue
448-
# result = compute_cvss_disagreement(item, v_type)
449-
# if not result or result["purl_disagreement"]:
450-
# continue
451-
452-
# if not result["cvssv_disagreement"]:
453-
# continue
454-
455-
# consensus_metrics = {}
456-
# vectors = [
457-
# adv_by_cvss_value[f"{v_type}_vector"] for adv_by_cvss_value in item.values()
458-
# ]
459-
# if len(vectors) == len(item):
460-
# if v_type == "cvssv4":
461-
# consensus_metrics = consensus_cvss3_metric(vectors)
462-
# else:
463-
# consensus_metrics = consensus_cvss4_metric(vector)
464-
465-
# conflicting_advisories.extend([advisory_avid_map[avid] for avid in item])
466-
# conflict_item = {
467-
# # fix me
468-
# "cvss": cvss_version[v_type],
469-
# "partial_cvss_curation": consensus_metrics,
470-
# "advisories": [advisory_curation_item_map[avid][v_type] for avid in item],
471-
# }
472-
# all_conflict_items.append(conflict_item)
473-
474-
# if not all_conflict_items:
475-
# continue
476-
477-
# issue_detail = {
478-
# "alias": alias.alias,
479-
# # "conflict_checksum": conflict_checksum,
480-
# # "conflict_details": conflicting_package_details,
481-
# # "partial_curation_advisory": partial_merged_advisory,
482-
# "curation_items": all_conflict_items,
483-
# }
484-
485-
# todo_id = advisories_checksum(conflicting_advisories)
486-
487-
# if todo_id in existing_todo_ids:
488-
# continue
489-
490-
# existing_todo_ids.add(todo_id)
491-
# conflicting_advisories_count = len(conflicting_advisories)
492-
493-
# date_published = min(
494-
# (a.date_published for a in conflicting_advisories if a.date_published),
495-
# default=None,
496-
# )
497-
# date_collected = min(
498-
# (a.date_collected for a in conflicting_advisories if a.date_collected),
499-
# default=None,
500-
# )
501-
# todo = AdvisoryToDoV2(
502-
# related_advisories_id=todo_id,
503-
# issue_type="CONFLICTING_SEVERITY_SCORES",
504-
# issue_detail=issue_detail,
505-
# alias=alias,
506-
# advisories_count=conflicting_advisories_count,
507-
# oldest_advisory_date=date_published or date_collected,
508-
# )
509-
# todo_to_create.append(todo)
510-
# advisory_relation_to_create[todo_id] = conflicting_advisories
511-
512425
if len(todo_to_create) > batch_size:
513426
new_todos_count += bulk_create_with_m2m(
514427
todos=todo_to_create,
@@ -643,13 +556,13 @@ def get_grouped_advisory_curation(advisory_curation_item_map, cvss_type, advisor
643556
vector = advisory_curation_item_map[avid][cvss_type]["vector_string"] or str(count)
644557
vector_group[vector].append((avid, advisories[avid].precedence))
645558

646-
for avids in vector_group.values():
647-
sorted_avids = [x[0] for x in sorted(avids, key=lambda x: x[1], reverse=True)]
559+
for avid_precedence in vector_group.values():
560+
sorted_avids = [x[0] for x in sorted(avid_precedence, key=lambda x: x[1], reverse=True)]
648561
primary_avid = sorted_avids[0]
649562
curation_items.append(
650563
{
651564
"primary": advisory_curation_item_map[primary_avid][cvss_type],
652-
"secondaries": [advisory_curation_item_map[a][cvss_type] for a in avids[1:]],
565+
"secondaries": [advisory_curation_item_map[a][cvss_type] for a in sorted_avids[1:]],
653566
}
654567
)
655568

vulnerabilities/pipes/osv_v2.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,9 +269,12 @@ def get_severities(raw_data, url) -> Iterable[VulnerabilitySeverity]:
269269
continue
270270

271271
severity_type = OSV_TO_VCIO_SEVERITY_MAP.get(severity_type, severity_type)
272-
system = SCORING_SYSTEMS[severity_type]
273272

274-
if severity_type in ["cvssv3.1", "cvssv4"]:
273+
if value.lower().startswith("cvss:3.0/"):
274+
severity_type = "cvssv3"
275+
276+
system = SCORING_SYSTEMS[severity_type]
277+
if severity_type in ["cvssv3", "cvssv3.1", "cvssv4"]:
275278
scoring_element = value
276279
valid_vector = value[:-1] if value and value.endswith("/") else value
277280
value = system.compute(valid_vector)

vulnerabilities/templates/cvss_curation.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ <h4 class="title is-4 mb-1" id="current-cvss"></h4>
352352
const header = document.getElementById('table-header');
353353

354354
header.innerHTML = `
355-
<th class="has-text-weight-bold has-text-centered pt-4 is-size-6">CVSS ${item.cvss} Metric</th>
355+
<th class="has-text-weight-bold has-text-centered pt-4 is-size-6">CVSS ${item.cvss} Metrics</th>
356356
<th style="width: 140px;" class="has-text-centered">
357357
<div>
358358
<div>

0 commit comments

Comments
 (0)