Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions security/migrations/0007_remove_cve_title.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Generated by Django 4.2.20 on 2025-04-20 20:15

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('security', '0006_alter_cve_options_alter_cvss_unique_together'),
]

operations = [
migrations.RemoveField(
model_name='cve',
name='title',
),
]
28 changes: 9 additions & 19 deletions security/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ def __str__(self):
class CVE(models.Model):

cve_id = models.CharField(max_length=255, unique=True)
title = models.CharField(max_length=255, blank=True, null=True)
description = models.TextField(blank=True, default='')
reserved_date = models.DateTimeField(blank=True, null=True)
published_date = models.DateTimeField(blank=True, null=True)
Expand Down Expand Up @@ -233,32 +232,23 @@ def parse_mitre_cve_data(self, cve_json):
if updated_date:
self.updated_date = tz_aware_datetime(cve_metadata.get('dateUpdated'))
cna_container = cve_json.get('containers').get('cna')
title = cna_container.get('title')
if not title:
product = cna_container.get('product')
descriptions = cna_container.get('descriptions')
if descriptions:
self.description = descriptions[0].get('value')
problem_types = cna_container.get('problemTypes', [])
for problem_type in problem_types:
descriptions = problem_type.get('descriptions')
if descriptions:
for description in descriptions:
cwe_description = description.get('description')
if description.get('type') == 'CWE':
cwe_id = description.get('cweId')
if cwe_id:
cwe, created = CWE.objects.get_or_create(cwe_id=cwe_id)
self.cwes.add(cwe)
cwe_ids = re.findall(r'CWE-\d+', cwe_description)
for cwe_id in cwe_ids:
for description in descriptions:
if description.get('type') == 'CWE':
cwe_id = description.get('cweId')
if cwe_id:
cwe, created = CWE.objects.get_or_create(cwe_id=cwe_id)
self.cwes.add(cwe)
if not title:
if product and cwe_description:
self.title = f'{product} - {cwe_description}'
else:
self.title = ''
cwe_description = description.get('description')
cwe_ids = re.findall(r'CWE-\d+', cwe_description)
for cwe_id in cwe_ids:
cwe, created = CWE.objects.get_or_create(cwe_id=cwe_id)
self.cwes.add(cwe)
metrics = cna_container.get('metrics')
if metrics:
for metric in metrics:
Expand Down
2 changes: 1 addition & 1 deletion security/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class Meta:
class CVESerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = CVE
fields = ('cve_id', 'title', 'description', 'cvss_score', 'cwe',
fields = ('cve_id', 'description', 'cvss_score', 'cwe',
'registered_date', 'published_date', 'updated_date')


Expand Down
1 change: 0 additions & 1 deletion security/templates/security/cve_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
<div class="well well-sm">
<table class="table table-striped table-bordered table-hover table-condensed table-responsive">
<tr><th class="col-sm-1">CVE ID</th><td>{{ cve.cve_id }}</td></tr>
<tr><th class="col-sm-1">Title</th><td>{{ cve.title }}</td></tr>
<tr><th class="col-sm-1">Description</th><td>{{ cve.description }}</td></tr>
<tr><th class="col-sm-1">Reserved</th><td>{{ cve.reserved_date|date|default_if_none:'' }}</td></tr>
<tr><th class="col-sm-1">Rejected</th><td>{{ cve.rejected_date|date|default_if_none:'' }}</td></tr>
Expand Down