From 94ae33f4e0246b1ed82ddeb50df26b3ec79653cc Mon Sep 17 00:00:00 2001 From: Shrish0098 Date: Mon, 17 Mar 2025 18:15:10 +0530 Subject: [PATCH] Chenged the Severity table Signed-off-by: Shrish0098 --- .../templates/vulnerability_details.html | 155 +++++++++++------- vulnerabilities/views.py | 43 +++++ 2 files changed, 140 insertions(+), 58 deletions(-) diff --git a/vulnerabilities/templates/vulnerability_details.html b/vulnerabilities/templates/vulnerability_details.html index 7001c8f3b..65c8a4e99 100644 --- a/vulnerabilities/templates/vulnerability_details.html +++ b/vulnerabilities/templates/vulnerability_details.html @@ -197,64 +197,103 @@
- - - - - - - {% for severity in severities %} - - - - - - {% empty %} - - - - {% endfor %} -
System Score Found at
{{ severity.scoring_system }}{{ severity.value }} - {{ severity.url }} -
- There are no known severity scores. -
-
- -
- - - - - - - - - {% for ref in references %} - - {% if ref.reference_id %} - - {% else %} - - {% endif %} - - {% if ref.reference_type %} - - {% else %} - - {% endif %} - - - - {% empty %} - - - - {% endfor %} -
Reference id Reference type URL
{{ ref.reference_id }}{{ ref.get_reference_type_display }}{{ ref.url }}
- There are no known references. -
+

Severity Scores by Source

+ + {% regroup severities|dictsort:"url" by url as severities_by_url %} + + {% for url_group in severities_by_url %} +
+
+ + {{ url_group.grouper|default:"Unknown Source" }} + + +
+ + +
+
CVSS Scores
+ + + + + + + + + + + {% for entry in cvss_entries %} + + + + + + + {% endfor %} + +
SourceCVSS VersionScoreTextual Severity
+ + {{ entry.reference|truncatechars:40 }} + + {{ entry.version }}{{ entry.score|default:"-" }}{{ entry.text|default:"-" }}
+
+ + + {% if epss_entries %} +
+
EPSS Scores
+ + + + + + + + + {% for entry in epss_entries %} + + + + + {% endfor %} + +
SourceScore
+ + {{ entry.reference|truncatechars:40 }} + + {{ entry.score }}
+
+ {% endif %} + + +
+
Other Scores
+ + + + + + + + + {% for severity in url_group.list %} + {% if "cvss" not in severity.scoring_system and severity.scoring_system != "epss" %} + + + + + {% endif %} + {% endfor %} + +
Scoring SystemScore
{{ severity.scoring_system }}{{ severity.value }}
+
+
+ {% empty %} +
+ There are no known severity scores. +
+ {% endfor %}
diff --git a/vulnerabilities/views.py b/vulnerabilities/views.py index a2df48634..506f7cef8 100644 --- a/vulnerabilities/views.py +++ b/vulnerabilities/views.py @@ -38,6 +38,49 @@ PAGE_SIZE = 20 +def vulnerability_details(request, vulnerability_id): + vulnerability = get_object_or_404(Vulnerability, pk=vulnerability_id) + severities = vulnerability.severities.all() + + # Process CVSS entries + cvss_entries = {} + for sev in severities: + system_lower = sev.system.lower() + if system_lower.startswith("cvss"): + version = system_lower.replace("cvssv", "").upper() + key = (sev.reference, version) + if key not in cvss_entries: + cvss_entries[key] = {"score": None, "text": None} + # Check if value is numerical or textual + try: + float(sev.value) + cvss_entries[key]["score"] = sev.value + except ValueError: + cvss_entries[key]["text"] = sev.value + + cvss_list = [ + {"reference": key[0], "version": key[1], "score": entry["score"], "text": entry["text"]} + for key, entry in cvss_entries.items() + ] + + # Process EPSS entries, deduplicate + epss_entries = {} + for sev in severities: + if sev.system.lower() == "epss": + key = (sev.reference, sev.value) + if key not in epss_entries: + epss_entries[key] = sev.value + + epss_list = [{"reference": key[0], "score": key[1]} for key in epss_entries] + + context = { + "vulnerability": vulnerability, + "cvss_entries": cvss_list, + "epss_entries": epss_list, + } + return render(request, "vulnerability_details.html", context) + + class PackageSearch(ListView): model = models.Package template_name = "packages.html"