Skip to content

Commit fe18022

Browse files
committed
Avoid collecting 'binaries' of OVAL files and add tests for UbuntuDataSource(yet to be implemented)
Signed-off-by: Shivam Sandbhor <shivam.sandbhor@gmail.com>
1 parent 9a34355 commit fe18022

2 files changed

Lines changed: 143 additions & 12 deletions

File tree

vulnerabilities/importers/oval_parser.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,26 @@
1+
# Copyright (c) 2017 nexB Inc. and others. All rights reserved.
2+
# http://nexb.com and https://github.com/nexB/vulnerablecode/
3+
# The VulnerableCode software is licensed under the Apache License version 2.0.
4+
# Data generated with VulnerableCode require an acknowledgment.
5+
#
6+
# You may not use this software except in compliance with the License.
7+
# You may obtain a copy of the License at: http://apache.org/licenses/LICENSE-2.0
8+
# Unless required by applicable law or agreed to in writing, software distributed
9+
# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
10+
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
11+
# specific language governing permissions and limitations under the License.
12+
#
13+
# When you publish or redistribute any data created with VulnerableCode or any VulnerableCode
14+
# derivative work, you must accompany this data with the following acknowledgment:
15+
#
16+
# Generated with VulnerableCode and provided on an "AS IS" BASIS, WITHOUT WARRANTIES
17+
# OR CONDITIONS OF ANY KIND, either express or implied. No content created from
18+
# VulnerableCode should be considered or used as legal advice. Consult an Attorney
19+
# for any legal advice.
20+
# VulnerableCode is a free software code scanning tool from nexB Inc. and others.
21+
# Visit https://github.com/nexB/vulnerablecode/ for support and download.
22+
23+
import re
124
from typing import Optional
225
from typing import List
326
from typing import Dict
@@ -103,8 +126,9 @@ def get_pkgs_from_obj(self, obj: OvalObject) -> List[str]:
103126
if var.get('var_ref'):
104127
var_elem = self.oval_document.getElementByID(
105128
var.get('var_ref'))
106-
for vals in var_elem.element:
107-
pkg_list.append(vals.text)
129+
comment = var_elem.element.get('comment')
130+
pkg_name = re.match("'.+'", comment).group().replace("'","")
131+
pkg_list.append(pkg_name)
108132
else:
109133
pkg_list.append(var.text)
110134

vulnerabilities/tests/test_ubuntu.py

Lines changed: 117 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import os
22
import unittest
3+
from unittest.mock import patch
34
import xml.etree.ElementTree as ET
5+
from collections import OrderedDict
6+
import asyncio
47

58
from dephell_specifier import RangeSpecifier
6-
9+
from packageurl import PackageURL
710

811
from vulnerabilities.importers.oval_parser import OvalParser
9-
12+
from vulnerabilities.importers.ubuntu import UbuntuDataSource
13+
from vulnerabilities.data_source import Advisory
1014

1115
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
1216
TEST_DATA = os.path.join(BASE_DIR, "test_data/")
@@ -84,8 +88,8 @@ def test_get_pkgs_from_obj(self):
8488
pkg_set1 = set(self.parsed_oval.get_pkgs_from_obj(obj_t2))
8589
pkg_set2 = set(self.parsed_oval.get_pkgs_from_obj(obj_t1))
8690

87-
assert pkg_set1 == {"potrace", "libpotrace0"}
88-
assert pkg_set2 == {"tor", "tor-geoipdb"}
91+
assert pkg_set1 == {"potrace"}
92+
assert pkg_set2 == {"tor"}
8993

9094
def test_get_versionsrngs_from_state(self):
9195

@@ -99,15 +103,15 @@ def test_get_versionsrngs_from_state(self):
99103

100104
assert self.parsed_oval.get_versionsrngs_from_state(state_1) == exp_range_1
101105
assert self.parsed_oval.get_versionsrngs_from_state(state_2) == exp_range_2
102-
106+
103107
def test_get_urls_from_definition(self):
104108

105109
def1_urls = {'http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-8703.html',
106110
'https://blogs.gentoo.org/ago/2016/08/08/potrace-multiplesix-heap-based-buffer-overflow-in-bm_readbody_bmp-bitmap_io-c/',
107111
'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8703'
108112
}
109113

110-
assert def1_urls == self.parsed_oval.get_urls_from_definition(self.definition_1)
114+
assert def1_urls == self.parsed_oval.get_urls_from_definition(self.definition_1)
111115

112116
def2_urls = {'http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-8860.html',
113117
'https://trac.torproject.org/projects/tor/ticket/20384',
@@ -117,15 +121,15 @@ def test_get_urls_from_definition(self):
117121
'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8860',
118122
}
119123

120-
assert def2_urls == self.parsed_oval.get_urls_from_definition(self.definition_2)
124+
assert def2_urls == self.parsed_oval.get_urls_from_definition(self.definition_2)
121125

122126
def test_get_data(self):
123127

124128
expected_data = [
125129
{
126130
"test_data": [
127131
{
128-
"package_list": ["libpotrace0", "potrace"],
132+
"package_list": ["potrace"],
129133
"version_ranges": RangeSpecifier("<1.14-2"),
130134
}
131135
],
@@ -141,7 +145,7 @@ def test_get_data(self):
141145
{
142146
"test_data": [
143147
{
144-
"package_list": ["tor", "tor-geoipdb"],
148+
"package_list": ["tor"],
145149
"version_ranges": RangeSpecifier("<0.2.8.9-1ubuntu1"),
146150
}
147151
],
@@ -160,4 +164,107 @@ def test_get_data(self):
160164
]
161165

162166
assert expected_data == self.parsed_oval.get_data()
163-
167+
168+
#This is horrible, there must be a better way
169+
async def mock(a,b):
170+
pass
171+
172+
class TestUbuntuDataSource(unittest.TestCase):
173+
174+
@classmethod
175+
def setUpClass(cls):
176+
pass
177+
178+
@patch(
179+
'vulnerabilities.importers.ubuntu.VersionAPI.get',
180+
return_value={
181+
'0.3.0',
182+
'0.2.0',
183+
'2.14-2'})
184+
@patch('vulnerabilities.importers.ubuntu.VersionAPI.load_api',new=mock)
185+
def test_get_data_from_xml_doc(self, mock_write):
186+
187+
data_source_cfg = {
188+
'releases': 'eg-ubuntu'}
189+
ubuntu_data_src = UbuntuDataSource(
190+
batch_size=1, config=data_source_cfg)
191+
expected_data = {
192+
Advisory(
193+
summary=('Tor before 0.2.8.9 and 0.2.9.x before 0.2.9.4-alpha had '
194+
'internal functions that were entitled to expect that buf_t data had '
195+
'NUL termination, but the implementation of or/buffers.c did not '
196+
'ensure that NUL termination was present, which allows remote '
197+
'attackers to cause a denial of service (client, hidden '
198+
'service, relay, or authority crash) via crafted data.'),
199+
impacted_package_urls={
200+
PackageURL(
201+
type='deb',
202+
namespace=None,
203+
name='tor',
204+
version='0.2.0',
205+
qualifiers=OrderedDict(),
206+
subpath=None)},
207+
resolved_package_urls={
208+
PackageURL(
209+
type='deb',
210+
namespace=None,
211+
name='tor',
212+
version='0.3.0',
213+
qualifiers=OrderedDict(),
214+
subpath=None),
215+
PackageURL(
216+
type='deb',
217+
namespace=None,
218+
name='tor',
219+
version='2.14-2',
220+
qualifiers=OrderedDict(),
221+
subpath=None)},
222+
reference_urls={
223+
'http://www.openwall.com/lists/oss-security/2016/10/18/11',
224+
'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8860',
225+
'http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-8860.html',
226+
'https://github.com/torproject/tor/commit/3cea86eb2fbb65949673eb4ba8ebb695c87a57ce',
227+
'https://blog.torproject.org/blog/tor-0289-released-important-fixes',
228+
'https://trac.torproject.org/projects/tor/ticket/20384'},
229+
reference_ids=[],
230+
cve_id='CVE-2016-8860'),
231+
Advisory(
232+
summary=('Heap-based buffer overflow in the bm_readbody_bmp function'
233+
' in bitmap_io.c in potrace before 1.13 allows remote attackers to '
234+
'have unspecified impact via a crafted BMP image, a different '
235+
'vulnerability than CVE-2016-8698, CVE-2016-8699, '
236+
'CVE-2016-8700, CVE-2016-8701, and CVE-2016-8702.'),
237+
impacted_package_urls={
238+
PackageURL(
239+
type='deb',
240+
namespace=None,
241+
name='potrace',
242+
version='0.3.0',
243+
qualifiers=OrderedDict(),
244+
subpath=None),
245+
PackageURL(
246+
type='deb',
247+
namespace=None,
248+
name='potrace',
249+
version='0.2.0',
250+
qualifiers=OrderedDict(),
251+
subpath=None)},
252+
resolved_package_urls={
253+
PackageURL(
254+
type='deb',
255+
namespace=None,
256+
name='potrace',
257+
version='2.14-2',
258+
qualifiers=OrderedDict(),
259+
subpath=None)},
260+
reference_urls={
261+
'http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-8703.html',
262+
'https://blogs.gentoo.org/ago/2016/08/08/potrace-multiplesix-heap-based-buffer-overflow-in-bm_readbody_bmp-bitmap_io-c/',
263+
'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8703'},
264+
reference_ids=[],
265+
cve_id='CVE-2016-8703')}
266+
267+
xml_doc = ET.parse(os.path.join(TEST_DATA, "ubuntu_oval_data.xml"))
268+
data = set(ubuntu_data_src.get_data_from_xml_doc(xml_doc))
269+
270+
assert expected_data == data

0 commit comments

Comments
 (0)