Source code for api_searcher.third_services.cve_circl.wrappers.cve_parser

from typing import Dict, List
from .product_wrapper import ProductWrapper


[docs]class CVEParser: """ Klasa pomocnicza opakowująca i parsujaca dane o produkcie z danych uzyskanych z serwisu trzeciego https://cve.circl.lu/. """
[docs] @staticmethod def cve(data): return data["id"]
[docs] @staticmethod def cvss_vector(data): return data["cvss-vector"]
[docs] @staticmethod def complexity(data): return data["access"]["complexity"].lower()
[docs] @staticmethod def authentication(data): return data["access"]["authentication"].lower()
[docs] @staticmethod def vector(data): return data["access"]["vector"].lower()
[docs] @staticmethod def cvss(data): return data["cvss"]
[docs] @staticmethod def cwe(data): return data["cwe"]
[docs] @staticmethod def title(data): # TODO struktura return data.get("oval")[0]["title"]
[docs] @staticmethod def products(data) -> List[ProductWrapper]: """Metoda parsująca dane o produkcie z identyfikatora Common Platform Enumeration (CPE) Postać wektora powinna być jak poniższa. cpe:/<part>:<vendor>:<product>:<version>:<update>:<edition>:<language><part> Niestety infromacje sa dodawane prze ludzi ręcznie i występują liczne błędy składniowe uniemożliwiaające poprawne parsowanie. Więcej informacji: https://csrc.nist.gov/projects/security-content-automation-protocol/specifications/cpe """ data = data["vulnerable_product"] vendor_idx = 3 name_idx = 4 version_idx = 5 system_idx = 6 products_list = [] for product_data in data: p = product_data.split(":") products_list.append( ProductWrapper( vendor=p[vendor_idx], name=p[name_idx], version=p[version_idx], system=p[system_idx] ) ) return products_list
[docs] @staticmethod def availability(data): return data["impact"]["availability"]
[docs] @staticmethod def confidentiality(data): return data["impact"]["confidentiality"]
[docs] @staticmethod def integrity(data): return data["impact"]["integrity"]
[docs] @staticmethod def summary(data): return data["summary"]