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:
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):
import json
root = json.loads(jsondata)
@@ -342,37 +351,41 @@ def update_db_fkie(conn, jsondata):
cveDesc = elt['descriptions'][0]['value']
date = elt['lastModified']
try:
for m in elt['metrics']['cvssMetricV2']:
if m['type'] == 'Primary':
accessVector = m['cvssData']['accessVector']
vectorString = m['cvssData']['vectorString']
cvssv2 = m['cvssData']['baseScore']
if 'cvssMetricV2' in elt['metrics']:
entry = get_metric_entry(elt['metrics']['cvssMetricV2'])
if entry:
accessVector = entry['cvssData']['accessVector']
vectorString = entry['cvssData']['vectorString']
cvssv2 = entry['cvssData']['baseScore']
except KeyError:
cvssv2 = 0.0
try:
for m in elt['metrics']['cvssMetricV30']:
if m['type'] == 'Primary':
accessVector = m['cvssData']['attackVector']
vectorString = m['cvssData']['vectorString']
cvssv3 = m['cvssData']['baseScore']
if 'cvssMetricV30' in elt['metrics']:
entry = get_metric_entry(elt['metrics']['cvssMetricV30'])
if entry:
accessVector = entry['cvssData']['attackVector']
vectorString = entry['cvssData']['vectorString']
cvssv3 = entry['cvssData']['baseScore']
except KeyError:
accessVector = accessVector or "UNKNOWN"
cvssv3 = 0.0
try:
for m in elt['metrics']['cvssMetricV31']:
if m['type'] == 'Primary':
accessVector = m['cvssData']['attackVector']
vectorString = m['cvssData']['vectorString']
cvssv3 = m['cvssData']['baseScore']
if 'cvssMetricV31' in elt['metrics']:
entry = get_metric_entry(elt['metrics']['cvssMetricV31'])
if entry:
accessVector = entry['cvssData']['attackVector']
vectorString = entry['cvssData']['vectorString']
cvssv3 = entry['cvssData']['baseScore']
except KeyError:
accessVector = accessVector or "UNKNOWN"
cvssv3 = 0.0
try:
for m in elt['metrics']['cvssMetricV40']:
if m['type'] == 'Primary':
accessVector = m['cvssData']['attackVector']
vectorString = m['cvssData']['vectorString']
cvssv4 = m['cvssData']['baseScore']
if 'cvssMetricV40' in elt['metrics']:
entry = get_metric_entry(elt['metrics']['cvssMetricV40'])
if entry:
accessVector = entry['cvssData']['attackVector']
vectorString = entry['cvssData']['vectorString']
cvssv4 = entry['cvssData']['baseScore']
except KeyError:
accessVector = accessVector or "UNKNOWN"
cvssv4 = 0.0