diff options
| author | Peter Marko <peter.marko@siemens.com> | 2024-10-23 11:45:22 +0200 |
|---|---|---|
| committer | Steve Sakoman <steve@sakoman.com> | 2024-11-26 05:37:09 -0800 |
| commit | a99c033f4c22b2270acebb45e16487eade2b77c5 (patch) | |
| tree | 72df7f62f7e20916eb75f45fe36b9a9436c9e4de /meta | |
| parent | 6a44d7c07807fc1f84b412a2fced054f71818d70 (diff) | |
| download | poky-a99c033f4c22b2270acebb45e16487eade2b77c5.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: 7ce34ce58f83bc02fa2c04bec54e358e8614157e)
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>
(cherry picked from commit 358dbfcd80ae1fa414d294c865dd293670c287f0)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Diffstat (limited to 'meta')
| -rw-r--r-- | meta/classes/cve-check.bbclass | 10 | ||||
| -rw-r--r-- | meta/classes/vex.bbclass | 1 | ||||
| -rw-r--r-- | meta/recipes-core/meta/cve-update-nvd2-native.bb | 14 |
3 files changed, 17 insertions, 8 deletions
diff --git a/meta/classes/cve-check.bbclass b/meta/classes/cve-check.bbclass index 6245594dd7..0c92b87f52 100644 --- a/meta/classes/cve-check.bbclass +++ b/meta/classes/cve-check.bbclass | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | CVE_PRODUCT ??= "${BPN}" | 31 | CVE_PRODUCT ??= "${BPN}" |
| 32 | CVE_VERSION ??= "${PV}" | 32 | CVE_VERSION ??= "${PV}" |
| 33 | 33 | ||
| 34 | CVE_CHECK_DB_FILENAME ?= "nvdcve_2-1.db" | 34 | CVE_CHECK_DB_FILENAME ?= "nvdcve_2-2.db" |
| 35 | CVE_CHECK_DB_DIR ?= "${STAGING_DIR}/CVE_CHECK" | 35 | CVE_CHECK_DB_DIR ?= "${STAGING_DIR}/CVE_CHECK" |
| 36 | CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/${CVE_CHECK_DB_FILENAME}" | 36 | CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/${CVE_CHECK_DB_FILENAME}" |
| 37 | CVE_CHECK_DB_FILE_LOCK ?= "${CVE_CHECK_DB_FILE}.lock" | 37 | CVE_CHECK_DB_FILE_LOCK ?= "${CVE_CHECK_DB_FILE}.lock" |
| @@ -445,9 +445,10 @@ def get_cve_info(d, cve_data): | |||
| 445 | cve_data[row[0]]["NVD-summary"] = row[1] | 445 | cve_data[row[0]]["NVD-summary"] = row[1] |
| 446 | cve_data[row[0]]["NVD-scorev2"] = row[2] | 446 | cve_data[row[0]]["NVD-scorev2"] = row[2] |
| 447 | cve_data[row[0]]["NVD-scorev3"] = row[3] | 447 | cve_data[row[0]]["NVD-scorev3"] = row[3] |
| 448 | cve_data[row[0]]["NVD-modified"] = row[4] | 448 | cve_data[row[0]]["NVD-scorev4"] = row[4] |
| 449 | cve_data[row[0]]["NVD-vector"] = row[5] | 449 | cve_data[row[0]]["NVD-modified"] = row[5] |
| 450 | cve_data[row[0]]["NVD-vectorString"] = row[6] | 450 | cve_data[row[0]]["NVD-vector"] = row[6] |
| 451 | cve_data[row[0]]["NVD-vectorString"] = row[7] | ||
| 451 | cursor.close() | 452 | cursor.close() |
| 452 | conn.close() | 453 | conn.close() |
| 453 | 454 | ||
| @@ -534,6 +535,7 @@ def cve_write_data_json(d, cve_data, cve_status): | |||
| 534 | cve_item["summary"] = cve_data[cve]["NVD-summary"] | 535 | cve_item["summary"] = cve_data[cve]["NVD-summary"] |
| 535 | cve_item["scorev2"] = cve_data[cve]["NVD-scorev2"] | 536 | cve_item["scorev2"] = cve_data[cve]["NVD-scorev2"] |
| 536 | cve_item["scorev3"] = cve_data[cve]["NVD-scorev3"] | 537 | cve_item["scorev3"] = cve_data[cve]["NVD-scorev3"] |
| 538 | cve_item["scorev4"] = cve_data[cve]["NVD-scorev4"] | ||
| 537 | cve_item["modified"] = cve_data[cve]["NVD-modified"] | 539 | cve_item["modified"] = cve_data[cve]["NVD-modified"] |
| 538 | cve_item["vector"] = cve_data[cve]["NVD-vector"] | 540 | cve_item["vector"] = cve_data[cve]["NVD-vector"] |
| 539 | cve_item["vectorString"] = cve_data[cve]["NVD-vectorString"] | 541 | cve_item["vectorString"] = cve_data[cve]["NVD-vectorString"] |
diff --git a/meta/classes/vex.bbclass b/meta/classes/vex.bbclass index bb16e2a529..01d4e52051 100644 --- a/meta/classes/vex.bbclass +++ b/meta/classes/vex.bbclass | |||
| @@ -282,6 +282,7 @@ def cve_write_data_json(d, cve_data, cve_status): | |||
| 282 | cve_item["summary"] = cve_data[cve]["NVD-summary"] | 282 | cve_item["summary"] = cve_data[cve]["NVD-summary"] |
| 283 | cve_item["scorev2"] = cve_data[cve]["NVD-scorev2"] | 283 | cve_item["scorev2"] = cve_data[cve]["NVD-scorev2"] |
| 284 | cve_item["scorev3"] = cve_data[cve]["NVD-scorev3"] | 284 | cve_item["scorev3"] = cve_data[cve]["NVD-scorev3"] |
| 285 | cve_item["scorev4"] = cve_data[cve]["NVD-scorev4"] | ||
| 285 | cve_item["vector"] = cve_data[cve]["NVD-vector"] | 286 | cve_item["vector"] = cve_data[cve]["NVD-vector"] |
| 286 | cve_item["vectorString"] = cve_data[cve]["NVD-vectorString"] | 287 | cve_item["vectorString"] = cve_data[cve]["NVD-vectorString"] |
| 287 | if 'status' in cve_data[cve]: | 288 | if 'status' in cve_data[cve]: |
diff --git a/meta/recipes-core/meta/cve-update-nvd2-native.bb b/meta/recipes-core/meta/cve-update-nvd2-native.bb index 2d23d28c3e..5fbe9095cc 100644 --- a/meta/recipes-core/meta/cve-update-nvd2-native.bb +++ b/meta/recipes-core/meta/cve-update-nvd2-native.bb | |||
| @@ -255,7 +255,7 @@ def initialize_db(conn): | |||
| 255 | c.execute("CREATE TABLE IF NOT EXISTS META (YEAR INTEGER UNIQUE, DATE TEXT)") | 255 | c.execute("CREATE TABLE IF NOT EXISTS META (YEAR INTEGER UNIQUE, DATE TEXT)") |
| 256 | 256 | ||
| 257 | c.execute("CREATE TABLE IF NOT EXISTS NVD (ID TEXT UNIQUE, SUMMARY TEXT, \ | 257 | c.execute("CREATE TABLE IF NOT EXISTS NVD (ID TEXT UNIQUE, SUMMARY TEXT, \ |
| 258 | SCOREV2 TEXT, SCOREV3 TEXT, MODIFIED INTEGER, VECTOR TEXT, VECTORSTRING TEXT)") | 258 | SCOREV2 TEXT, SCOREV3 TEXT, SCOREV4 TEXT, MODIFIED INTEGER, VECTOR TEXT, VECTORSTRING TEXT)") |
| 259 | 259 | ||
| 260 | c.execute("CREATE TABLE IF NOT EXISTS PRODUCTS (ID TEXT, \ | 260 | c.execute("CREATE TABLE IF NOT EXISTS PRODUCTS (ID TEXT, \ |
| 261 | VENDOR TEXT, PRODUCT TEXT, VERSION_START TEXT, OPERATOR_START TEXT, \ | 261 | VENDOR TEXT, PRODUCT TEXT, VERSION_START TEXT, OPERATOR_START TEXT, \ |
| @@ -361,12 +361,18 @@ def update_db(conn, elt): | |||
| 361 | cvssv3 = cvssv3 or elt['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseScore'] | 361 | cvssv3 = cvssv3 or elt['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseScore'] |
| 362 | except KeyError: | 362 | except KeyError: |
| 363 | pass | 363 | pass |
| 364 | cvssv3 = cvssv3 or 0.0 | ||
| 365 | try: | ||
| 366 | accessVector = accessVector or elt['cve']['metrics']['cvssMetricV40'][0]['cvssData']['attackVector'] | ||
| 367 | vectorString = vectorString or elt['cve']['metrics']['cvssMetricV40'][0]['cvssData']['vectorString'] | ||
| 368 | cvssv4 = elt['cve']['metrics']['cvssMetricV40'][0]['cvssData']['baseScore'] | ||
| 369 | except KeyError: | ||
| 370 | cvssv4 = 0.0 | ||
| 364 | accessVector = accessVector or "UNKNOWN" | 371 | accessVector = accessVector or "UNKNOWN" |
| 365 | vectorString = vectorString or "UNKNOWN" | 372 | vectorString = vectorString or "UNKNOWN" |
| 366 | cvssv3 = cvssv3 or 0.0 | ||
| 367 | 373 | ||
| 368 | conn.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?, ?)", | 374 | conn.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?, ?, ?)", |
| 369 | [cveId, cveDesc, cvssv2, cvssv3, date, accessVector, vectorString]).close() | 375 | [cveId, cveDesc, cvssv2, cvssv3, cvssv4, date, accessVector, vectorString]).close() |
| 370 | 376 | ||
| 371 | try: | 377 | try: |
| 372 | # Remove any pre-existing CVE configuration. Even for partial database | 378 | # Remove any pre-existing CVE configuration. Even for partial database |
