Skip to content

Commit 2cb0e29

Browse files
authored
Merge pull request #1277 from TG1999/add_importer_specific_improver
Add importer specific improver
2 parents 0d9c9b5 + 577b2b9 commit 2cb0e29

File tree

8 files changed

+231
-7
lines changed

8 files changed

+231
-7
lines changed

CHANGELOG.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@ Release notes
22
=============
33

44

5+
Version v33.4.0
6+
----------------
7+
8+
- We added importer specific improvers and removed default improver
9+
additionally improve recent advisories first.
10+
11+
512
Version v33.3.0
613
----------------
714

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = vulnerablecode
3-
version = 33.3.0
3+
version = 33.4.0
44
license = Apache-2.0 AND CC-BY-SA-4.0
55

66
# description must be on ONE line https://github.com/pypa/setuptools/issues/1390

vulnerabilities/importers/apache_tomcat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ def fetch_advisory_links(self, url):
138138
for tag in soup.find_all("a"):
139139
link = tag.get("href")
140140

141-
if "security-" in link and any(char.isdigit() for char in link):
141+
if link and "security-" in link and any(char.isdigit() for char in link):
142142
yield urllib.parse.urljoin(url, link)
143143

144144
def advisory_data(self):

vulnerabilities/improvers/__init__.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,38 @@
77
# See https://aboutcode.org for more information about nexB OSS projects.
88
#
99

10-
from vulnerabilities.improvers import default
10+
from vulnerabilities.improvers import importer_specific_improver
1111
from vulnerabilities.improvers import valid_versions
1212

1313
IMPROVERS_REGISTRY = [
14-
default.DefaultImprover,
14+
importer_specific_improver.NVDImprover,
15+
importer_specific_improver.DebianImprover,
16+
importer_specific_improver.DebianOvalImprover,
17+
importer_specific_improver.AlpineLinuxImprover,
18+
importer_specific_improver.ApacheHTTPDImprover,
19+
importer_specific_improver.ApacheKafkaImprover,
20+
importer_specific_improver.ApacheTomcatImprover,
21+
importer_specific_improver.ArchLinuxImprover,
22+
importer_specific_improver.ElixirSecurityImprover,
23+
importer_specific_improver.FireEyeImprover,
24+
importer_specific_improver.GentooImprover,
25+
importer_specific_improver.GitHubAPIImprover,
26+
importer_specific_improver.GitLabAPIImprover,
27+
importer_specific_improver.IstioImprover,
28+
importer_specific_improver.MozillaImprover,
29+
importer_specific_improver.NginxImprover,
30+
importer_specific_improver.NpmImprover,
31+
importer_specific_improver.OpensslImprover,
32+
importer_specific_improver.PostgreSQLImprover,
33+
importer_specific_improver.ProjectKBMSRImprover,
34+
importer_specific_improver.PyPaImprover,
35+
importer_specific_improver.PyPIImprover,
36+
importer_specific_improver.RedhatImprover,
37+
importer_specific_improver.RetireDotnetImprover,
38+
importer_specific_improver.SUSESeverityScoreImprover,
39+
importer_specific_improver.UbuntuImprover,
40+
importer_specific_improver.UbuntuUSNImprover,
41+
importer_specific_improver.XenImprover,
1542
valid_versions.NginxBasicImprover,
1643
valid_versions.ApacheHTTPDImprover,
1744
valid_versions.DebianBasicImprover,

vulnerabilities/improvers/default.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@
1212
from typing import List
1313
from typing import Tuple
1414

15+
from django.db.models import Q
1516
from django.db.models.query import QuerySet
1617
from packageurl import PackageURL
1718

1819
from vulnerabilities.importer import AdvisoryData
1920
from vulnerabilities.importer import AffectedPackage
21+
from vulnerabilities.importer import Importer
2022
from vulnerabilities.improver import MAX_CONFIDENCE
2123
from vulnerabilities.improver import Improver
2224
from vulnerabilities.improver import Inference
@@ -34,10 +36,17 @@ class DefaultImprover(Improver):
3436
information source.
3537
"""
3638

39+
importer: Importer
40+
3741
@property
3842
def interesting_advisories(self) -> QuerySet:
39-
for advisory in Advisory.objects.all().paginated():
40-
yield advisory
43+
if hasattr(self, "importer"):
44+
return (
45+
Advisory.objects.filter(Q(created_by=self.importer.qualified_name))
46+
.order_by("-date_collected")
47+
.paginated()
48+
)
49+
return Advisory.objects.all().order_by("-date_collected").paginated()
4150

4251
def get_inferences(self, advisory_data: AdvisoryData) -> Iterable[Inference]:
4352
if not advisory_data:
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
#
2+
# Copyright (c) nexB Inc. and others. All rights reserved.
3+
# VulnerableCode is a trademark of nexB Inc.
4+
# SPDX-License-Identifier: Apache-2.0
5+
# See http://www.apache.org/licenses/LICENSE-2.0 for the license text.
6+
# See https://github.com/nexB/vulnerablecode for support or download.
7+
# See https://aboutcode.org for more information about nexB OSS projects.
8+
#
9+
10+
from vulnerabilities.importers.alpine_linux import AlpineImporter
11+
from vulnerabilities.importers.apache_httpd import ApacheHTTPDImporter
12+
from vulnerabilities.importers.apache_kafka import ApacheKafkaImporter
13+
from vulnerabilities.importers.apache_tomcat import ApacheTomcatImporter
14+
from vulnerabilities.importers.archlinux import ArchlinuxImporter
15+
from vulnerabilities.importers.debian import DebianImporter
16+
from vulnerabilities.importers.debian_oval import DebianOvalImporter
17+
from vulnerabilities.importers.elixir_security import ElixirSecurityImporter
18+
from vulnerabilities.importers.fireeye import FireyeImporter
19+
from vulnerabilities.importers.gentoo import GentooImporter
20+
from vulnerabilities.importers.github import GitHubAPIImporter
21+
from vulnerabilities.importers.gitlab import GitLabAPIImporter
22+
from vulnerabilities.importers.istio import IstioImporter
23+
from vulnerabilities.importers.mozilla import MozillaImporter
24+
from vulnerabilities.importers.nginx import NginxImporter
25+
from vulnerabilities.importers.npm import NpmImporter
26+
from vulnerabilities.importers.nvd import NVDImporter
27+
from vulnerabilities.importers.openssl import OpensslImporter
28+
from vulnerabilities.importers.postgresql import PostgreSQLImporter
29+
from vulnerabilities.importers.project_kb_msr2019 import ProjectKBMSRImporter
30+
from vulnerabilities.importers.pypa import PyPaImporter
31+
from vulnerabilities.importers.pysec import PyPIImporter
32+
from vulnerabilities.importers.redhat import RedhatImporter
33+
from vulnerabilities.importers.retiredotnet import RetireDotnetImporter
34+
from vulnerabilities.importers.suse_scores import SUSESeverityScoreImporter
35+
from vulnerabilities.importers.ubuntu import UbuntuImporter
36+
from vulnerabilities.importers.ubuntu_usn import UbuntuUSNImporter
37+
from vulnerabilities.importers.xen import XenImporter
38+
from vulnerabilities.improvers.default import DefaultImprover
39+
40+
41+
class NVDImprover(DefaultImprover):
42+
importer = NVDImporter
43+
44+
45+
class AlpineLinuxImprover(DefaultImprover):
46+
importer = AlpineImporter
47+
48+
49+
class ApacheHTTPDImprover(DefaultImprover):
50+
importer = ApacheHTTPDImporter
51+
52+
53+
class ApacheKafkaImprover(DefaultImprover):
54+
importer = ApacheKafkaImporter
55+
56+
57+
class ApacheTomcatImprover(DefaultImprover):
58+
importer = ApacheTomcatImporter
59+
60+
61+
class ArchLinuxImprover(DefaultImprover):
62+
importer = ArchlinuxImporter
63+
64+
65+
class DebianImprover(DefaultImprover):
66+
importer = DebianImporter
67+
68+
69+
class DebianOvalImprover(DefaultImprover):
70+
importer = DebianOvalImporter
71+
72+
73+
class ElixirSecurityImprover(DefaultImprover):
74+
importer = ElixirSecurityImporter
75+
76+
77+
class FireEyeImprover(DefaultImprover):
78+
importer = FireyeImporter
79+
80+
81+
class GentooImprover(DefaultImprover):
82+
importer = GentooImporter
83+
84+
85+
class GitHubAPIImprover(DefaultImprover):
86+
importer = GitHubAPIImporter
87+
88+
89+
class GitLabAPIImprover(DefaultImprover):
90+
importer = GitLabAPIImporter
91+
92+
93+
class IstioImprover(DefaultImprover):
94+
importer = IstioImporter
95+
96+
97+
class MozillaImprover(DefaultImprover):
98+
importer = MozillaImporter
99+
100+
101+
class NginxImprover(DefaultImprover):
102+
importer = NginxImporter
103+
104+
105+
class NpmImprover(DefaultImprover):
106+
importer = NpmImporter
107+
108+
109+
class OpensslImprover(DefaultImprover):
110+
importer = OpensslImporter
111+
112+
113+
class PostgreSQLImprover(DefaultImprover):
114+
importer = PostgreSQLImporter
115+
116+
117+
class ProjectKBMSRImprover(DefaultImprover):
118+
importer = ProjectKBMSRImporter
119+
120+
121+
class PyPaImprover(DefaultImprover):
122+
importer = PyPaImporter
123+
124+
125+
class PyPIImprover(DefaultImprover):
126+
importer = PyPIImporter
127+
128+
129+
class RedhatImprover(DefaultImprover):
130+
importer = RedhatImporter
131+
132+
133+
class RetireDotnetImprover(DefaultImprover):
134+
importer = RetireDotnetImporter
135+
136+
137+
class SUSESeverityScoreImprover(DefaultImprover):
138+
importer = SUSESeverityScoreImporter
139+
140+
141+
class UbuntuImprover(DefaultImprover):
142+
importer = UbuntuImporter
143+
144+
145+
class UbuntuUSNImprover(DefaultImprover):
146+
importer = UbuntuUSNImporter
147+
148+
149+
class XenImprover(DefaultImprover):
150+
importer = XenImporter
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#
2+
# Copyright (c) nexB Inc. and others. All rights reserved.
3+
# VulnerableCode is a trademark of nexB Inc.
4+
# SPDX-License-Identifier: Apache-2.0
5+
# See http://www.apache.org/licenses/LICENSE-2.0 for the license text.
6+
# See https://github.com/nexB/vulnerablecode for support or download.
7+
# See https://aboutcode.org for more information about nexB OSS projects.
8+
#
9+
10+
import datetime
11+
12+
import pytest
13+
14+
from vulnerabilities.importers.nvd import NVDImporter
15+
from vulnerabilities.improve_runner import ImproveRunner
16+
from vulnerabilities.improvers.importer_specific_improver import NVDImprover
17+
from vulnerabilities.models import Advisory
18+
from vulnerabilities.models import Alias
19+
20+
21+
@pytest.mark.django_db
22+
def test_improvement_of_importer_specific_advisories():
23+
Advisory.objects.create(
24+
aliases=["CVE-2021-22"],
25+
summary="TEST",
26+
created_by=NVDImporter.qualified_name,
27+
date_collected=datetime.datetime.now(tz=datetime.timezone.utc),
28+
)
29+
ImproveRunner(NVDImprover).run()
30+
alias = Alias.objects.filter(alias="CVE-2021-22").first()
31+
assert alias is not None

vulnerablecode/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import warnings
1313
from pathlib import Path
1414

15-
__version__ = "33.3.0"
15+
__version__ = "33.4.0"
1616

1717

1818
def command_line():

0 commit comments

Comments
 (0)