cve-update-db-native: FKIE CVE parsing: Use Secondary metric

If there is no primary metric use the Secondary one.

(From OE-Core rev: 5ad0516aba120d9eba5f10afa3a4de3d25fd31fc)

Signed-off-by: Jonathan Schnitzler <jonathan.schnitzler@faro.com>
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>
This commit is contained in:
Jonathan Schnitzler
2025-08-24 16:57:45 +02:00
committed by Richard Purdie
parent 8b5c222b08
commit 52696e1d4a

View File

@@ -322,6 +322,15 @@ def update_db_nvdjson(conn, jsondata):
for config in configurations: for config in configurations:
parse_node_and_insert(conn, config, cveId, True) parse_node_and_insert(conn, config, cveId, True)
def get_metric_entry(metric):
primaries = [c for c in metric if c['type'] == "Primary"]
secondaries = [c for c in metric if c['type'] == "Secondary"]
if len(primaries) > 0:
return primaries[0]
elif len(secondaries)>0:
return secondaries[0]
return None
def update_db_fkie(conn, jsondata): def update_db_fkie(conn, jsondata):
import json import json
root = json.loads(jsondata) root = json.loads(jsondata)
@@ -342,37 +351,41 @@ def update_db_fkie(conn, jsondata):
cveDesc = elt['descriptions'][0]['value'] cveDesc = elt['descriptions'][0]['value']
date = elt['lastModified'] date = elt['lastModified']
try: try:
for m in elt['metrics']['cvssMetricV2']: if 'cvssMetricV2' in elt['metrics']:
if m['type'] == 'Primary': entry = get_metric_entry(elt['metrics']['cvssMetricV2'])
accessVector = m['cvssData']['accessVector'] if entry:
vectorString = m['cvssData']['vectorString'] accessVector = entry['cvssData']['accessVector']
cvssv2 = m['cvssData']['baseScore'] vectorString = entry['cvssData']['vectorString']
cvssv2 = entry['cvssData']['baseScore']
except KeyError: except KeyError:
cvssv2 = 0.0 cvssv2 = 0.0
try: try:
for m in elt['metrics']['cvssMetricV30']: if 'cvssMetricV30' in elt['metrics']:
if m['type'] == 'Primary': entry = get_metric_entry(elt['metrics']['cvssMetricV30'])
accessVector = m['cvssData']['attackVector'] if entry:
vectorString = m['cvssData']['vectorString'] accessVector = entry['cvssData']['attackVector']
cvssv3 = m['cvssData']['baseScore'] vectorString = entry['cvssData']['vectorString']
cvssv3 = entry['cvssData']['baseScore']
except KeyError: except KeyError:
accessVector = accessVector or "UNKNOWN" accessVector = accessVector or "UNKNOWN"
cvssv3 = 0.0 cvssv3 = 0.0
try: try:
for m in elt['metrics']['cvssMetricV31']: if 'cvssMetricV31' in elt['metrics']:
if m['type'] == 'Primary': entry = get_metric_entry(elt['metrics']['cvssMetricV31'])
accessVector = m['cvssData']['attackVector'] if entry:
vectorString = m['cvssData']['vectorString'] accessVector = entry['cvssData']['attackVector']
cvssv3 = m['cvssData']['baseScore'] vectorString = entry['cvssData']['vectorString']
cvssv3 = entry['cvssData']['baseScore']
except KeyError: except KeyError:
accessVector = accessVector or "UNKNOWN" accessVector = accessVector or "UNKNOWN"
cvssv3 = 0.0 cvssv3 = 0.0
try: try:
for m in elt['metrics']['cvssMetricV40']: if 'cvssMetricV40' in elt['metrics']:
if m['type'] == 'Primary': entry = get_metric_entry(elt['metrics']['cvssMetricV40'])
accessVector = m['cvssData']['attackVector'] if entry:
vectorString = m['cvssData']['vectorString'] accessVector = entry['cvssData']['attackVector']
cvssv4 = m['cvssData']['baseScore'] vectorString = entry['cvssData']['vectorString']
cvssv4 = entry['cvssData']['baseScore']
except KeyError: except KeyError:
accessVector = accessVector or "UNKNOWN" accessVector = accessVector or "UNKNOWN"
cvssv4 = 0.0 cvssv4 = 0.0