cve_policy_filter: Upstream vulsscan json data format changed
Since vulsscan upstream commit [https://github.com/future-architect/ vuls/commit/96c3592db1c4b3d658e8e8169fdc17c670e48379] had been merged, So the list type for nvd and jvn items was added in vulsscan data result. For example the part of json result changed from "scannedCves": { "CVE-2015-8035": { "cveContents": { "nvd": { "type": "nvd", "cveID": "CVE-2015-8035", "title": "", "summary": "The xz_decomp function in xzlib.c in libxml2 \ 2.9.1 does not properly detect compression errors, which \ allows context-dependent attackers to cause a denial of \ service (process hang) via crafted XML data.", "cvss2Score": 2.6, "cvss2Vector": "AV:N/AC:H/Au:N/C:N/I:N/A:P", "cvss2Severity": "LOW", "cvss3Score": 0, "cvss3Vector": "", ... }, }, }, } to "scannedCves": { "CVE-2015-8035": { "cveContents": { "nvd": [ { "type": "nvd", "cveID": "CVE-2015-8035", "title": "", "summary": "The xz_decomp function in xzlib.c in libxml2 \ 2.9.1 does not properly detect compression errors, which \ allows context-dependent attackers to cause a denial of \ service (process hang) via crafted XML data.", "cvss2Score": 2.6, "cvss2Vector": "AV:N/AC:H/Au:N/C:N/I:N/A:P", "cvss2Severity": "LOW", "cvss3Score": 0, "cvss3Vector": "", ... }, ], }, }, } There is only one item within NVD area according to the latest vulsscan result data set. Meanwhile we can only see two items within JVN area for the CVE-2018-5407 as follows: "cveContents": { "jvn": [ { "type": "jvn", "cveID": "CVE-2018-5407", "cvss2Score": 1.9, "title": "HPE Integrated Lights-Out 5、HPE Integrated Lights-Out 4 "cvss2Vector": "AV:L/AC:M/Au:N/C:P/I:N/A:N", }, { "type": "jvn", "cveID": "CVE-2018-5407", "title": "Simultaneous Multi-threading における情報漏えいに関する脆弱性", "cvss2Score": 9, "cvss2Vector": "AV:N/AC:L/Au:S/C:C/I:C/A:C", } ], As Michel and Mark suggested, we don't see anything obvious in the log and descriptions in way of plans to indicate if we should expect more than one item in NVD arean. Now we update it in cve_policy_filter.py parser for NVD, and add exeception raised in case it ever happens will allow us to react to the occurrence when the NVD length is more than 1. Therefore when getting the cve report we can avoid the following error: Traceback (most recent call last): File "cve_support/cve_policy_filter.py", line 345, in <module> main() File "cve_support/cve_policy_filter.py", line 338, in main cvssv2_parse_n_report(cves,title,data) File "cve_support/cve_policy_filter.py", line 269, in cvssv2_parse_n_report nvd2_score = data["scannedCves"][cve_id]["cveContents"]["nvd"]["cvss2Score"] TypeError: list indices must be integers or slices, not str Change-Id: I847938fde14d6240637537e964578758289b56f5 Signed-off-by: Zhixiong Chi <zhixiong.chi@windriver.com>
This commit is contained in:
parent
caf686d9e2
commit
87b94e70d0
|
@ -24,6 +24,18 @@ cves_to_omit = []
|
|||
cves_report = {}
|
||||
|
||||
|
||||
class NVDLengthException(Exception):
|
||||
"""
|
||||
Throw the exception when the length of NVD list != 1
|
||||
"""
|
||||
def __init__(self, length):
|
||||
self.length = length
|
||||
|
||||
def __str__(self):
|
||||
print("Warning: NVD length: %d, not 1, Please check again!" \
|
||||
% self.length)
|
||||
|
||||
|
||||
def print_html_report(cves_report, title):
|
||||
"""
|
||||
Print the html report
|
||||
|
@ -123,7 +135,7 @@ def get_summary(data, cve_id):
|
|||
return: nvd summary
|
||||
"""
|
||||
try:
|
||||
summary = data["scannedCves"][cve_id]["cveContents"]["nvd"]["summary"]
|
||||
summary = data["scannedCves"][cve_id]["cveContents"]["nvd"][0]["summary"]
|
||||
except KeyError:
|
||||
summary = None
|
||||
return summary
|
||||
|
@ -133,7 +145,7 @@ def get_source_link(data, cve_id):
|
|||
return: web link to the nvd report
|
||||
"""
|
||||
try:
|
||||
source_link = data["scannedCves"][cve_id]["cveContents"]["nvd"]["sourceLink"]
|
||||
source_link = data["scannedCves"][cve_id]["cveContents"]["nvd"][0]["sourceLink"]
|
||||
except KeyError:
|
||||
source_link = None
|
||||
return source_link
|
||||
|
@ -227,12 +239,16 @@ def cvssv3_parse_n_report(cves,title,data):
|
|||
affectedpackages_list = []
|
||||
allfixed = "fixed"
|
||||
try:
|
||||
nvd2_score = data["scannedCves"][cve_id]["cveContents"]["nvd"]["cvss3Score"]
|
||||
cvss3vector = data["scannedCves"][cve_id]["cveContents"]["nvd"]["cvss3Vector"]
|
||||
nvdlength = len(data["scannedCves"][cve_id]["cveContents"]["nvd"])
|
||||
if nvdlength != 1:
|
||||
raise NVDLengthException(nvdlength)
|
||||
|
||||
nvd3_score = data["scannedCves"][cve_id]["cveContents"]["nvd"][0]["cvss3Score"]
|
||||
cvss3vector = data["scannedCves"][cve_id]["cveContents"]["nvd"][0]["cvss3Vector"]
|
||||
except KeyError:
|
||||
cves_w_errors.append(cve)
|
||||
else:
|
||||
cve["cvss3Score"] = nvd2_score
|
||||
cve["cvss3Score"] = nvd3_score
|
||||
for element in cvss3vector.split("/"):
|
||||
if "AV:" in element:
|
||||
_av = element.split(":")[1]
|
||||
|
@ -266,8 +282,12 @@ def cvssv2_parse_n_report(cves,title,data):
|
|||
affectedpackages_list = []
|
||||
allfixed = "fixed"
|
||||
try:
|
||||
nvd2_score = data["scannedCves"][cve_id]["cveContents"]["nvd"]["cvss2Score"]
|
||||
cvss2vector = data["scannedCves"][cve_id]["cveContents"]["nvd"]["cvss2Vector"]
|
||||
nvdlength = len(data["scannedCves"][cve_id]["cveContents"]["nvd"])
|
||||
if nvdlength != 1:
|
||||
raise NVDLengthException(nvdlength)
|
||||
|
||||
nvd2_score = data["scannedCves"][cve_id]["cveContents"]["nvd"][0]["cvss2Score"]
|
||||
cvss2vector = data["scannedCves"][cve_id]["cveContents"]["nvd"][0]["cvss2Vector"]
|
||||
except KeyError:
|
||||
cves_w_errors.append(cve)
|
||||
else:
|
||||
|
|
Loading…
Reference in New Issue