Skip to content

Commit 22e86ec

Browse files
committed
Extract severity from oval advisories
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 85d58ff commit 22e86ec

3 files changed

Lines changed: 79 additions & 10 deletions

File tree

vulnerabilities/importer.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from univers.version_range import VersionRange
3232
from univers.versions import Version
3333

34+
from vulnerabilities import severity_systems
3435
from vulnerabilities.oval_parser import OvalParser
3536
from vulnerabilities.severity_systems import SCORING_SYSTEMS
3637
from vulnerabilities.severity_systems import ScoringSystem
@@ -425,7 +426,19 @@ def get_data_from_xml_doc(
425426
# connected/linked to an OvalDefinition
426427
vuln_id = definition_data["vuln_id"]
427428
description = definition_data["description"]
428-
references = [Reference(url=url) for url in definition_data["reference_urls"]]
429+
severities = (
430+
[
431+
VulnerabilitySeverity(
432+
system=severity_systems.GENERIC, value=definition_data.get("severity")
433+
)
434+
]
435+
if definition_data.get("severity")
436+
else []
437+
)
438+
references = [
439+
Reference(url=url, severities=severities)
440+
for url in definition_data["reference_urls"]
441+
]
429442
affected_packages = []
430443
for test_data in definition_data["test_data"]:
431444
for package_name in test_data["package_list"]:

vulnerabilities/oval_parser.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ def get_data(self) -> List[Dict]:
4848
definition_data["vuln_id"] = self.get_vuln_id_from_definition(definition)
4949
definition_data["reference_urls"] = self.get_urls_from_definition(definition)
5050

51+
definition_data["severity"] = self.get_severity_from_definition(definition)
52+
5153
for test in matching_tests:
5254
test_obj, test_state = self.get_object_state_of_test(test)
5355
if not test_obj or not test_state:
@@ -165,6 +167,15 @@ def get_urls_from_definition(definition: OvalDefinition) -> Set[str]:
165167

166168
return all_urls
167169

170+
@staticmethod
171+
def get_severity_from_definition(definition: OvalDefinition) -> Set[str]:
172+
definition_metadata = definition.getMetadata().element
173+
for child in definition_metadata:
174+
if child.tag.endswith("advisory"):
175+
for grandchild in child:
176+
if grandchild.tag.endswith("severity"):
177+
return grandchild.text
178+
168179
@staticmethod
169180
def get_vuln_id_from_definition(definition):
170181
# SUSE and Ubuntu OVAL files will get cves via this loop

vulnerabilities/tests/test_data/ubuntu-oval-expected.json

Lines changed: 54 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,32 @@
2222
{
2323
"reference_id": "",
2424
"url": "http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-8703.html",
25-
"severities": []
25+
"severities": [
26+
{
27+
"system": "generic_textual",
28+
"value": "Medium"
29+
}
30+
]
2631
},
2732
{
2833
"reference_id": "",
2934
"url": "https://blogs.gentoo.org/ago/2016/08/08/potrace-multiplesix-heap-based-buffer-overflow-in-bm_readbody_bmp-bitmap_io-c/",
30-
"severities": []
35+
"severities": [
36+
{
37+
"system": "generic_textual",
38+
"value": "Medium"
39+
}
40+
]
3141
},
3242
{
3343
"reference_id": "",
3444
"url": "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8703",
35-
"severities": []
45+
"severities": [
46+
{
47+
"system": "generic_textual",
48+
"value": "Medium"
49+
}
50+
]
3651
}
3752
],
3853
"date_published": "2020-05-11T04:53:34+00:00"
@@ -60,32 +75,62 @@
6075
{
6176
"reference_id": "",
6277
"url": "http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-8860.html",
63-
"severities": []
78+
"severities": [
79+
{
80+
"system": "generic_textual",
81+
"value": "Medium"
82+
}
83+
]
6484
},
6585
{
6686
"reference_id": "",
6787
"url": "http://www.openwall.com/lists/oss-security/2016/10/18/11",
68-
"severities": []
88+
"severities": [
89+
{
90+
"system": "generic_textual",
91+
"value": "Medium"
92+
}
93+
]
6994
},
7095
{
7196
"reference_id": "",
7297
"url": "https://blog.torproject.org/blog/tor-0289-released-important-fixes",
73-
"severities": []
98+
"severities": [
99+
{
100+
"system": "generic_textual",
101+
"value": "Medium"
102+
}
103+
]
74104
},
75105
{
76106
"reference_id": "",
77107
"url": "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8860",
78-
"severities": []
108+
"severities": [
109+
{
110+
"system": "generic_textual",
111+
"value": "Medium"
112+
}
113+
]
79114
},
80115
{
81116
"reference_id": "",
82117
"url": "https://github.com/torproject/tor/commit/3cea86eb2fbb65949673eb4ba8ebb695c87a57ce",
83-
"severities": []
118+
"severities": [
119+
{
120+
"system": "generic_textual",
121+
"value": "Medium"
122+
}
123+
]
84124
},
85125
{
86126
"reference_id": "",
87127
"url": "https://trac.torproject.org/projects/tor/ticket/20384",
88-
"severities": []
128+
"severities": [
129+
{
130+
"system": "generic_textual",
131+
"value": "Medium"
132+
}
133+
]
89134
}
90135
],
91136
"date_published": "2020-05-11T04:53:34+00:00"

0 commit comments

Comments
 (0)