summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorPeter Marko <peter.marko@siemens.com>2024-10-25 22:17:42 +0200
committerSteve Sakoman <steve@sakoman.com>2024-11-09 05:53:57 -0800
commit74d6b31f9f47e4f03f956357b3f9bf5dee09052a (patch)
tree92d1c8fd00434c4fc016a6bed3f2d1e813d79c65 /meta
parent3198afac8770abf3f9c4582aecb6bac2ab291718 (diff)
downloadpoky-74d6b31f9f47e4f03f956357b3f9bf5dee09052a.tar.gz
cve-check: add support for cvss v4.0
https://nvd.nist.gov/general/news/cvss-v4-0-official-support CVSS v4.0 was released in November 2023 NVD announced support for it in June 2024 Current stats are: * cvss v4 provided, but also v3, so cve-check showed a value sqlite> select count(*) from nvd where scorev4 != 0.0 and scorev3 != 0.0; 2069 * only cvss v4 provided, so cve-check did not show any sqlite> select count(*) from nvd where scorev4 != 0.0 and scorev3 = 0.0; 260 (From OE-Core rev: 358dbfcd80ae1fa414d294c865dd293670c287f0) (From OE-Core rev: 290407b3785bce2d22212a7ab9d3a349c8935cc0) Signed-off-by: Peter Marko <peter.marko@siemens.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Steve Sakoman <steve@sakoman.com>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/cve-check.bbclass11
-rw-r--r--meta/recipes-core/meta/cve-update-nvd2-native.bb14
2 files changed, 17 insertions, 8 deletions
diff --git a/meta/classes/cve-check.bbclass b/meta/classes/cve-check.bbclass
index 93a2a1413d..d287cf1457 100644
--- a/meta/classes/cve-check.bbclass
+++ b/meta/classes/cve-check.bbclass
@@ -32,7 +32,7 @@ CVE_PRODUCT ??= "${BPN}"
32CVE_VERSION ??= "${PV}" 32CVE_VERSION ??= "${PV}"
33 33
34CVE_CHECK_DB_DIR ?= "${DL_DIR}/CVE_CHECK" 34CVE_CHECK_DB_DIR ?= "${DL_DIR}/CVE_CHECK"
35CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/nvdcve_2-1.db" 35CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/nvdcve_2-2.db"
36CVE_CHECK_DB_FILE_LOCK ?= "${CVE_CHECK_DB_FILE}.lock" 36CVE_CHECK_DB_FILE_LOCK ?= "${CVE_CHECK_DB_FILE}.lock"
37 37
38CVE_CHECK_LOG ?= "${T}/cve.log" 38CVE_CHECK_LOG ?= "${T}/cve.log"
@@ -447,9 +447,10 @@ def get_cve_info(d, cves):
447 cve_data[row[0]]["summary"] = row[1] 447 cve_data[row[0]]["summary"] = row[1]
448 cve_data[row[0]]["scorev2"] = row[2] 448 cve_data[row[0]]["scorev2"] = row[2]
449 cve_data[row[0]]["scorev3"] = row[3] 449 cve_data[row[0]]["scorev3"] = row[3]
450 cve_data[row[0]]["modified"] = row[4] 450 cve_data[row[0]]["scorev4"] = row[4]
451 cve_data[row[0]]["vector"] = row[5] 451 cve_data[row[0]]["modified"] = row[5]
452 cve_data[row[0]]["vectorString"] = row[6] 452 cve_data[row[0]]["vector"] = row[6]
453 cve_data[row[0]]["vectorString"] = row[7]
453 cursor.close() 454 cursor.close()
454 conn.close() 455 conn.close()
455 return cve_data 456 return cve_data
@@ -514,6 +515,7 @@ def cve_write_data_text(d, patched, unpatched, ignored, cve_data):
514 write_string += "CVE SUMMARY: %s\n" % cve_data[cve]["summary"] 515 write_string += "CVE SUMMARY: %s\n" % cve_data[cve]["summary"]
515 write_string += "CVSS v2 BASE SCORE: %s\n" % cve_data[cve]["scorev2"] 516 write_string += "CVSS v2 BASE SCORE: %s\n" % cve_data[cve]["scorev2"]
516 write_string += "CVSS v3 BASE SCORE: %s\n" % cve_data[cve]["scorev3"] 517 write_string += "CVSS v3 BASE SCORE: %s\n" % cve_data[cve]["scorev3"]
518 write_string += "CVSS v4 BASE SCORE: %s\n" % cve_data[cve]["scorev4"]
517 write_string += "VECTOR: %s\n" % cve_data[cve]["vector"] 519 write_string += "VECTOR: %s\n" % cve_data[cve]["vector"]
518 write_string += "VECTORSTRING: %s\n" % cve_data[cve]["vectorString"] 520 write_string += "VECTORSTRING: %s\n" % cve_data[cve]["vectorString"]
519 write_string += "MORE INFORMATION: %s%s\n\n" % (nvd_link, cve) 521 write_string += "MORE INFORMATION: %s%s\n\n" % (nvd_link, cve)
@@ -631,6 +633,7 @@ def cve_write_data_json(d, patched, unpatched, ignored, cve_data, cve_status):
631 "summary" : cve_data[cve]["summary"], 633 "summary" : cve_data[cve]["summary"],
632 "scorev2" : cve_data[cve]["scorev2"], 634 "scorev2" : cve_data[cve]["scorev2"],
633 "scorev3" : cve_data[cve]["scorev3"], 635 "scorev3" : cve_data[cve]["scorev3"],
636 "scorev4" : cve_data[cve]["scorev4"],
634 "vector" : cve_data[cve]["vector"], 637 "vector" : cve_data[cve]["vector"],
635 "vectorString" : cve_data[cve]["vectorString"], 638 "vectorString" : cve_data[cve]["vectorString"],
636 "status" : status, 639 "status" : status,
diff --git a/meta/recipes-core/meta/cve-update-nvd2-native.bb b/meta/recipes-core/meta/cve-update-nvd2-native.bb
index 1901641965..92177712dc 100644
--- a/meta/recipes-core/meta/cve-update-nvd2-native.bb
+++ b/meta/recipes-core/meta/cve-update-nvd2-native.bb
@@ -247,7 +247,7 @@ def initialize_db(conn):
247 c.execute("CREATE TABLE IF NOT EXISTS META (YEAR INTEGER UNIQUE, DATE TEXT)") 247 c.execute("CREATE TABLE IF NOT EXISTS META (YEAR INTEGER UNIQUE, DATE TEXT)")
248 248
249 c.execute("CREATE TABLE IF NOT EXISTS NVD (ID TEXT UNIQUE, SUMMARY TEXT, \ 249 c.execute("CREATE TABLE IF NOT EXISTS NVD (ID TEXT UNIQUE, SUMMARY TEXT, \
250 SCOREV2 TEXT, SCOREV3 TEXT, MODIFIED INTEGER, VECTOR TEXT, VECTORSTRING TEXT)") 250 SCOREV2 TEXT, SCOREV3 TEXT, SCOREV4 TEXT, MODIFIED INTEGER, VECTOR TEXT, VECTORSTRING TEXT)")
251 251
252 c.execute("CREATE TABLE IF NOT EXISTS PRODUCTS (ID TEXT, \ 252 c.execute("CREATE TABLE IF NOT EXISTS PRODUCTS (ID TEXT, \
253 VENDOR TEXT, PRODUCT TEXT, VERSION_START TEXT, OPERATOR_START TEXT, \ 253 VENDOR TEXT, PRODUCT TEXT, VERSION_START TEXT, OPERATOR_START TEXT, \
@@ -353,12 +353,18 @@ def update_db(conn, elt):
353 cvssv3 = cvssv3 or elt['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseScore'] 353 cvssv3 = cvssv3 or elt['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseScore']
354 except KeyError: 354 except KeyError:
355 pass 355 pass
356 cvssv3 = cvssv3 or 0.0
357 try:
358 accessVector = accessVector or elt['cve']['metrics']['cvssMetricV40'][0]['cvssData']['attackVector']
359 vectorString = vectorString or elt['cve']['metrics']['cvssMetricV40'][0]['cvssData']['vectorString']
360 cvssv4 = elt['cve']['metrics']['cvssMetricV40'][0]['cvssData']['baseScore']
361 except KeyError:
362 cvssv4 = 0.0
356 accessVector = accessVector or "UNKNOWN" 363 accessVector = accessVector or "UNKNOWN"
357 vectorString = vectorString or "UNKNOWN" 364 vectorString = vectorString or "UNKNOWN"
358 cvssv3 = cvssv3 or 0.0
359 365
360 conn.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?, ?)", 366 conn.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?, ?, ?)",
361 [cveId, cveDesc, cvssv2, cvssv3, date, accessVector, vectorString]).close() 367 [cveId, cveDesc, cvssv2, cvssv3, cvssv4, date, accessVector, vectorString]).close()
362 368
363 try: 369 try:
364 # Remove any pre-existing CVE configuration. Even for partial database 370 # Remove any pre-existing CVE configuration. Even for partial database