Skip to content

Commit 550788f

Browse files
committed
Fix migration conflict
Add Weakness model Fix requirements.txt , Fix migration conflict Add cwe name instead of Hyperlinks Add nexB/cwe package Fix test , remove empty lines Add CWE in the new UI Signed-off-by: ziadhany <ziadhany2016@gmail.com>
1 parent ef4fe40 commit 550788f

6 files changed

Lines changed: 77 additions & 4 deletions

File tree

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,4 +120,5 @@ drf-spectacular-sidecar==2022.10.1
120120
drf-spectacular==0.24.2
121121
coreapi==2.3.3
122122
coreschema==0.0.4
123-
itypes==1.2.0
123+
itypes==1.2.0
124+
cwe2==2.0.0

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ install_requires =
8484
Markdown>=3.3.0
8585
dateparser>=1.1.1
8686
cvss>=2.4
87+
cwe2>=2.0.0
8788

8889
# networking
8990
GitPython>=3.1.17
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Generated by Django 4.0.7 on 2022-12-01 16:50
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('vulnerabilities', '0036_alter_package_package_url_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.CreateModel(
14+
name='Weakness',
15+
fields=[
16+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
17+
('cwe_id', models.IntegerField()),
18+
('vulnerabilities', models.ManyToManyField(related_name='weaknesses', to='vulnerabilities.vulnerability')),
19+
],
20+
),
21+
]

vulnerabilities/models.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import logging
1313
from contextlib import suppress
1414

15+
from cwe2.database import Database
1516
from django.contrib.auth import get_user_model
1617
from django.contrib.auth.models import UserManager
1718
from django.core import exceptions
@@ -249,6 +250,25 @@ def get_related_purls(self):
249250
return [p.package_url for p in self.packages.distinct().all()]
250251

251252

253+
class Weakness(models.Model):
254+
cwe_id = models.IntegerField()
255+
vulnerabilities = models.ManyToManyField(Vulnerability, related_name="weaknesses")
256+
257+
@property
258+
def name(self):
259+
"""Return the weakness's name."""
260+
db = Database()
261+
weakness = db.get(self.cwe_id)
262+
return weakness.name
263+
264+
@property
265+
def description(self):
266+
"""Return the weakness's description."""
267+
db = Database()
268+
weakness = db.get(self.cwe_id)
269+
return weakness.description
270+
271+
252272
class VulnerabilityReferenceQuerySet(BaseQuerySet):
253273
def for_cpe(self):
254274
"""
@@ -700,7 +720,6 @@ def update_or_create(self):
700720

701721

702722
class VulnerabilitySeverity(models.Model):
703-
704723
reference = models.ForeignKey(VulnerabilityReference, on_delete=models.CASCADE)
705724

706725
scoring_system_choices = tuple(

vulnerabilities/templates/vulnerability_details.html

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@
116116
</table>
117117
</div>
118118

119-
120119
<div class="has-text-weight-bold tab-nested-div ml-1 mb-1 mt-6">
121120
Fixed by packages ({{ fixed_by_packages|length }})
122121
</div>
@@ -174,6 +173,36 @@
174173
{% endif %}
175174
</table>
176175
</div>
176+
177+
<div class="has-text-weight-bold tab-nested-div ml-1 mb-1 mt-6">
178+
Weaknesses ({{ weaknesses|length }})
179+
</div>
180+
<div class="tab-nested-div">
181+
<table class="table is-bordered is-striped is-narrow is-hoverable is-fullwidth gray-header-border">
182+
<tr>
183+
<th> CWE id </th>
184+
<th> Name </th>
185+
</tr>
186+
{% for weakness in weaknesses %}
187+
<tr>
188+
<td class="wrap-strings">CWE-{{ weakness.cwe_id }}</td>
189+
<td class="wrap-strings">
190+
<a href="https://cwe.mitre.org/data/definitions/{{ weakness.cwe_id }}.html" target="_blank"
191+
title="CWE-{{ weakness.cwe_id }} : description: {{weakness.description}}">
192+
{{ weakness.name }} <i class="fa fa-external-link fa_link_custom"></i>
193+
</a>
194+
</td>
195+
196+
</tr>
197+
{% empty %}
198+
<tr>
199+
<td colspan="3">
200+
There are no known CWE.
201+
</td>
202+
</tr>
203+
{% endfor %}
204+
</table>
205+
</div>
177206
</div>
178207

179208
<div class="tab-div content" data-content="references">

vulnerabilities/views.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from vulnerabilities.forms import ApiUserCreationForm
2424
from vulnerabilities.forms import PackageSearchForm
2525
from vulnerabilities.forms import VulnerabilitySearchForm
26+
from vulnerabilities.models import Weakness
2627
from vulnerablecode.settings import env
2728

2829
PAGE_SIZE = 20
@@ -111,7 +112,7 @@ class VulnerabilityDetails(DetailView):
111112
slug_field = "vulnerability_id"
112113

113114
def get_queryset(self):
114-
return super().get_queryset().prefetch_related("references", "aliases")
115+
return super().get_queryset().prefetch_related("references", "aliases", "weaknesses")
115116

116117
def get_context_data(self, **kwargs):
117118
context = super().get_context_data(**kwargs)
@@ -124,6 +125,7 @@ def get_context_data(self, **kwargs):
124125
"aliases": self.object.aliases.all(),
125126
"affected_packages": self.object.affected_packages.all(),
126127
"fixed_by_packages": self.object.fixed_by_packages.all(),
128+
"weaknesses": self.object.weaknesses.all(),
127129
}
128130
)
129131
return context

0 commit comments

Comments
 (0)