Repository: opencve/opencve (language: python)

Issue:
NVD Legacy Data Feed
Since i don`t know the best place to post this, ive choosen this way - so  hopefully this is right.

According to the NVD the Json Data feed will go EOL on December 15 2023 - https://nvd.nist.gov/vuln/data-feeds#JSON_FEED

Is this on your radar?


Discussion / hints:
Hi,
Yes I'm on it, ETA end of November.

*ps: please next time use the given template instead of deleting it*

Fix patch:
diff --git a/opencve/api/fields.py b/opencve/api/fields.py
index e7f855c1..b3eddfc1 100644
--- a/opencve/api/fields.py
+++ b/opencve/api/fields.py
@@ -29,7 +29,7 @@ class CveVendorsField(fields.Raw):
     """
 
     def format(self, json):
-        return convert_cpes(json["configurations"])
+        return convert_cpes(json.get("configurations", {}))
 
 
 class DatetimeField(fields.Raw):
diff --git a/opencve/checks/cpes.py b/opencve/checks/cpes.py
index afb20ef4..403e0a99 100644
--- a/opencve/checks/cpes.py
+++ b/opencve/checks/cpes.py
@@ -10,26 +10,22 @@
 
 class Cpes(BaseCheck):
     def execute(self):
-        old = nested_lookup("cpe23Uri", self.cve_obj.json["configurations"])
-        new = nested_lookup("cpe23Uri", self.cve_json["configurations"])
+        old_cpes = nested_lookup("criteria", self.cve_obj.json.get("configurations"))
+        new_cpes = nested_lookup("criteria", self.cve_json.get("configurations"))
 
         payload = {
-            "added": list(set(new) - set(old)),
-            "removed": list(set(old) - set(new)),
+            "added": list(set(new_cpes) - set(old_cpes)),
+            "removed": list(set(old_cpes) - set(new_cpes)),
         }
 
         # The CPEs list has been modified
         if payload["added"] or payload["removed"]:
 
             # Change the CVE's vendors attribute
-            self.cve_obj.vendors = flatten_vendors(
-                convert_cpes(self.cve_json["configurations"])
-            )
+            vendors_products = convert_cpes(self.cve_json.get("configurations", {}))
+            self.cve_obj.vendors = flatten_vendors(vendors_products)
             db.session.commit()
 
-            # Create the vendors and products objects if they don't exist
-            vendors_products = convert_cpes(payload["added"])
-
             for vendor, products in vendors_products.items():
                 v_obj = Vendor.query.filter_by(name=vendor).first()
 
diff --git a/opencve/checks/cvss.py b/opencve/checks/cvss.py
index c8692426..00fe2ab4 100644
--- a/opencve/checks/cvss.py
+++ b/opencve/checks/cvss.py
@@ -5,22 +5,31 @@
 
 class Cvss(BaseCheck):
     def execute(self):
-        # Some CVE does not have CVSS, or they just have one version
-        # Check the old values
-        old = {}
-        if self.cve_obj.cvss2:
-            old["v2"] = self.cve_obj.cvss2
-        if self.cve_obj.cvss3:
-            old["v3"] = self.cve_obj.cvss3
 
-        # Check the new values
+        old_metrics = self.cve_obj.json.get("metrics")
+        new_metrics = self.cve_json.get("metrics")
+
+        # Check the new CVSS scores
         new = {}
-        if "baseMetricV2" in self.cve_json["impact"]:
-            new["v2"] = self.cve_json["impact"]["baseMetricV2"]["cvssV2"]["baseScore"]
-        if "baseMetricV3" in self.cve_json["impact"]:
-            new["v3"] = self.cve_json["impact"]["baseMetricV3"]["cvssV3"]["baseScore"]
+        if "cvssMetricV31" in new_metrics:
+            new["v3"] = new_metrics["cvssMetricV31"][0]["cvssData"]["baseScore"]
+        elif "cvssMetricV30" in new_metrics:
+            new["v3"] = new_metrics["cvssMetricV30"][0]["cvssData"]["baseScore"]
+
+        if "cvssMetricV2" in new_metrics:
+            new["v2"] = new_metrics["cvssMetricV2"][0]["cvssData"]["baseScore"]
+
+        # Retrieve the old CVSS scores
+        old = {}
+        if "cvssMetricV31" in old_metrics:
+            old["v3"] = old_metrics["cvssMetricV31"][0]["cvssData"]["baseScore"]
+        elif "cvssMetricV30" in old_metrics:
+            old["v3"] = old_metrics["cvssMetricV30"][0]["cvssData"]["baseScore"]
+
+        if "cvssMetricV2" in old_metrics:
+            old["v2"] = old_metrics["cvssMetricV2"][0]["cvssData"]["baseScore"]
 
-        # If at least one version has changed, update the CVE
+        # Update the CVE
         if old != new:
             self.cve_obj.cvss2 = new.get("v2")
             self.cve_obj.cvss3 = new.get("v3")
diff --git a/opencve/checks/cwes.py b/opencve/checks/cwes.py
index 256e9c84..63845178 100644
--- a/opencve/checks/cwes.py
+++ b/opencve/checks/cwes.py
@@ -3,21 +3,18 @@
 from opencve.commands.utils import CveUtil
 from opencve.extensions import db
 from opencve.models.cwe import Cwe
+from opencve.utils import weaknesses_to_flat
 
 
 class Cwes(BaseCheck):
     def execute(self):
-        old = self.cve_obj.cwes
-        new = [
-            c["value"]
-            for c in self.cve_json["cve"]["problemtype"]["problemtype_data"][0][
-                "description"
-            ]
-        ]
+
+        new_weaknesses = weaknesses_to_flat(self.cve_json.get("weaknesses"))
+        old_weaknesses = weaknesses_to_flat(self.cve_obj.json.get("weaknesses"))
 
         payload = {
-            "added": list(set(new) - set(old)),
-            "removed": list(set(old) - set(new)),
+            "added": list(set(new_weaknesses) - set(old_weaknesses)),
+            "removed": list(set(old_weaknesses) - set(new_weaknesses)),
         }
 
         # It's possible that a CVE links a CWE not yet defined in database.
@@ -38,7 +35,7 @@ def execute(self):
         if payload["added"] or payload["removed"]:
 
             # Save the new list
-            self.cve_obj.cwes = new
+            self.cve_obj.cwes = new_weaknesses
             db.session.commit()
 
             # Create the event
diff --git a/opencve/checks/first_time.py b/opencve/checks/first_time.py
index e04aa0fe..309dfead 100644
--- a/opencve/checks/first_time.py
+++ b/opencve/checks/first_time.py
@@ -1,15 +1,14 @@
 from opencve.checks import BaseCheck
 from opencve.commands.utils import CveUtil
-from opencve.extensions import db
-from opencve.utils import convert_cpes, flatten_vendors
+from opencve.utils import vendors_conf_to_flat
 
 
 class FirstTime(BaseCheck):
     def execute(self):
-        old = flatten_vendors(convert_cpes(self.cve_obj.json["configurations"]))
-        new = flatten_vendors(convert_cpes(self.cve_json["configurations"]))
-        payload = list(set(new) - set(old))
+        old_confs = vendors_conf_to_flat(self.cve_obj.json.get("configurations", []))
+        new_confs = vendors_conf_to_flat(self.cve_json.get("configurations", []))
 
+        payload = list(set(new_confs) - set(old_confs))
         if payload:
             event = CveUtil.create_event(
                 self.cve_obj, self.cve_json, "first_time", payload
diff --git a/opencve/checks/references.py b/opencve/checks/references.py
index f5e4540e..0b1efeab 100644
--- a/opencve/checks/references.py
+++ b/opencve/checks/references.py
@@ -12,41 +12,23 @@ class References(BaseCheck):
     def execute(self):
         payload = {"changed": [], "added": [], "removed": []}
 
-        # List the old and new references then make the diff between them
-        old_refs = {
-            ref["url"]: ref
-            for ref in self.cve_obj.json["cve"]["references"]["reference_data"]
-        }
-        new_refs = {
-            ref["url"]: ref
-            for ref in self.cve_json["cve"]["references"]["reference_data"]
-        }
-        diff = DeepDiff(old_refs, new_refs)
-
-        # New references
-        payload["added"] = [
-            new_refs[r[6:-2]] for r in diff.get("dictionary_item_added", [])
-        ]
-
-        # Removed references
-        payload["removed"] = [
-            old_refs[r[6:-2]] for r in diff.get("dictionary_item_removed", [])
-        ]
-
-        # Changed references (the following code parses the DeepDiff result
-        # and extracts the urls of modified references)
-        modified_urls = list(
-            set(
-                [
-                    r.split("'][")[0].split("['")[1]
-                    for r in list(diff.get("values_changed", {}).keys())
-                    + list(diff.get("iterable_item_added", {}).keys())
-                ]
-            )
-        )
-        payload["changed"] = [
-            {"old": old_refs[url], "new": new_refs[url]} for url in modified_urls
-        ]
+        old_refs = {ref["url"]: ref for ref in self.cve_obj.json.get("references")}
+        new_refs = {ref["url"]: ref for ref in self.cve_json.get("references")}
+
+        for new_url, new_ref in new_refs.items():
+            # New reference
+            if new_url not in old_refs.keys():
+                payload["added"].append(new_ref)
+                continue
+
+            # Changed reference
+            if new_ref != old_refs[new_url]:
+                payload["changed"].append({"old": old_refs[new_url], "new": new_ref})
+
+        for old_url, old_ref in old_refs.items():
+            # Removed reference
+            if old_url not in new_refs.keys():
+                payload["removed"].append(old_ref)
 
         # Create the event with the references changes
         if payload["changed"] or payload["added"] or payload["removed"]:
diff --git a/opencve/checks/summary.py b/opencve/checks/summary.py
index bbc8f8dd..0928317e 100644
--- a/opencve/checks/summary.py
+++ b/opencve/checks/summary.py
@@ -4,13 +4,42 @@
 
 
 class Summary(BaseCheck):
+    @staticmethod
+    def get_flat_descriptions(descriptions):
+        return {d["lang"]: d["value"] for d in descriptions}
+
+    @staticmethod
+    def get_descriptions_payload(old, new):
+        payload = {"changed": {}, "added": {}, "removed": {}}
+
+        added = list(set(new.keys()) - set(old.keys()))
+        payload["added"] = {lang: new[lang] for lang in added}
+
+        removed = list(set(old.keys()) - set(new.keys()))
+        payload["removed"] = {lang: old[lang] for lang in removed}
+
+        for lang, desc in new.items():
+            if lang in old.keys() and desc != old[lang]:
+                payload["changed"][lang] = {
+                    "old": old[lang],
+                    "new": new[lang],
+                }
+
+        return payload
+
     def execute(self):
-        summary = self.cve_json["cve"]["description"]["description_data"][0]["value"]
+        old_summary = self.get_flat_descriptions(self.cve_obj.json["descriptions"])
+        new_summary = self.get_flat_descriptions(self.cve_json["descriptions"])
+        payload = self.get_descriptions_payload(old_summary, new_summary)
+
+        # In case of multiple languages, keep the EN one
+        descriptions = self.cve_json["descriptions"]
+        if len(descriptions) > 1:
+            descriptions = [d for d in descriptions if d["lang"] in ("en", "en-US")]
+        summary = descriptions[0]["value"]
 
         # Check if the summary has changed
-        if self.cve_obj.summary != summary:
-            # Replace it in the CVE
-            old = self.cve_obj.summary
+        if payload["added"] or payload["removed"] or payload["changed"]:
             self.cve_obj.summary = summary
             db.session.commit()
 
@@ -19,7 +48,7 @@ def execute(self):
                 self.cve_obj,
                 self.cve_json,
                 "summary",
-                {"old": old, "new": self.cve_obj.summary},
+                payload,
             )
             return event
 
diff --git a/opencve/cli.py b/opencve/cli.py
index 4c798560..dadd4375 100644
--- a/opencve/cli.py
+++ b/opencve/cli.py
@@ -9,6 +9,7 @@
 from opencve.commands.upgrade_db import upgrade_db
 from opencve.commands.imports import import_data
 from opencve.commands.webserver import webserver
+from opencve.commands.migrate_nvd import migrate_nvd
 
 
 @click.group()
@@ -24,3 +25,4 @@ def cli():
 cli.add_command(init)
 cli.add_command(upgrade_db)
 cli.add_command(webserver)
+cli.add_command(migrate_nvd)
diff --git a/opencve/commands/imports/__init__.py b/opencve/commands/imports/__init__.py
index a4552601..67d0126d 100644
--- a/opencve/commands/imports/__init__.py
+++ b/opencve/commands/imports/__init__.py
@@ -3,7 +3,7 @@
 from flask.cli import with_appcontext
 
 from opencve.commands import ensure_config, info, timed_operation
-from opencve.commands.imports import cpe, cve, cwe
+from opencve.commands.imports import cve, cwe
 from opencve.extensions import db
 from opencve.models.cve import Cve
 from opencve.models.metas import Meta
@@ -18,7 +18,7 @@
 @with_appcontext
 def import_data(confirm):
     """
-    Perform initial imports (cve, cwe, cpe).
+    Perform initial imports (cve, cwe).
     """
     if Cve.query.first():
         info("Import already done.")
@@ -36,10 +36,8 @@ def import_data(confirm):
     # Import the CWE list
     cwe.run()
 
-    # Import the CVE, then use the returned list of vendors
-    # to merge them with the official CPE dictionnary list.
-    vendors = cve.run()
-    cpe.run(vendors)
+    # Import the CVE list
+    cve.run()
 
     # Populate the metas table
     with timed_operation("Populating metas table..."):
diff --git a/opencve/commands/imports/cpe.py b/opencve/commands/imports/cpe.py
deleted file mode 100644
index c09e8a08..00000000
--- a/opencve/commands/imports/cpe.py
+++ /dev/null
@@ -1,76 +0,0 @@
-import gzip
-from io import BytesIO
-import xml.etree.ElementTree
-
-import requests
-from cpe import CPE
-
-from opencve.commands import header, info, timed_operation
-from opencve.extensions import db
-from opencve.models import get_uuid
-from opencve.models.products import Product
-from opencve.models.vendors import Vendor
-
-NVD_CPE_URL = (
-    "https://nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml.gz"
-)
-
-
-def get_slug(vendor, product=None):
-    slug = vendor
-    if product:
-        slug += "-{}".format(product)
-    return slug
-
-
-def run(mappings):
-    """
-    Import the Vendors and Products list.
-    """
-    header("Importing CPE list...")
-
-    # Download the XML file
-    with timed_operation("Downloading {}...".format(NVD_CPE_URL)):
-        resp = requests.get(NVD_CPE_URL).content
-
-    # Parse the XML elements
-    with timed_operation("Parsing XML elements..."):
-        raw = gzip.GzipFile(fileobj=BytesIO(resp))
-        del resp
-        items = set()
-        for _, elem in xml.etree.ElementTree.iterparse(raw):
-            if elem.tag.endswith("cpe23-item"):
-                items.add(elem.get("name"))
-            elem.clear()
-        del raw
-
-    # Create the objects
-    with timed_operation("Creating list of mappings..."):
-        for item in items:
-            obj = CPE(item)
-            vendor = obj.get_vendor()[0]
-            product = obj.get_product()[0]
-
-            if vendor not in mappings["vendors"].keys():
-                mappings["vendors"][vendor] = dict(id=get_uuid(), name=vendor)
-
-            if get_slug(vendor, product) not in mappings["products"].keys():
-                mappings["products"][get_slug(vendor, product)] = dict(
-                    id=get_uuid(),
-                    name=product,
-                    vendor_id=mappings["vendors"][vendor]["id"],
-                )
-        del items
-
-    # Insert the objects in database
-    with timed_operation("Inserting Vendors and Products..."):
-        db.session.bulk_insert_mappings(Vendor, mappings["vendors"].values())
-        db.session.bulk_insert_mappings(Product, mappings["products"].values())
-        db.session.commit()
-
-    info(
-        "{} vendors and {} products imported.".format(
-            len(mappings["vendors"]), len(mappings["products"])
-        )
-    )
-    del mappings
diff --git a/opencve/commands/imports/cve.py b/opencve/commands/imports/cve.py
index 6e48e375..26077531 100644
--- a/opencve/commands/imports/cve.py
+++ b/opencve/commands/imports/cve.py
@@ -1,93 +1,117 @@
-import gzip
-import json
-from io import BytesIO
+import time
 
 import arrow
 import requests
 
-from opencve.commands import header, info, timed_operation
-from opencve.commands.imports.cpe import get_slug
+from opencve.commands import info, timed_operation
 from opencve.extensions import db
-from opencve.utils import convert_cpes, flatten_vendors, get_cwes
+from opencve.utils import convert_cpes, flatten_vendors, weaknesses_to_flat
 from opencve.models import get_uuid
 from opencve.models.changes import Change
 from opencve.models.cve import Cve
 from opencve.models.tasks import Task
+from opencve.models.products import Product
+from opencve.models.vendors import Vendor
+from opencve.models.metas import Meta
 
-NVD_CVE_URL = "https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-{year}.json.gz"
+
+NVD_API_URL = "https://services.nvd.nist.gov/rest/json/cves/2.0"
+
+
+def get_slug(vendor, product=None):
+    slug = vendor
+    if product:
+        slug += "-{}".format(product)
+    return slug
 
 
 def run():
     """
     Import the CVE list.
-    """
-    mappings = {"vendors": {}, "products": {}}
-
-    from opencve.commands.imports import CURRENT_YEAR, CVE_FIRST_YEAR
 
-    # Create the initial task
+    Important notice:
+        This product uses data from the NVD API but is not endorsed or certified by the NVD.
+    """
     task = Task()
     db.session.add(task)
     db.session.commit()
     task_id = task.id
 
-    for year in range(CVE_FIRST_YEAR, CURRENT_YEAR + 1):
-        header("Importing CVE for {}".format(year))
-        mappings.update({"cves": [], "changes": []})
+    mappings = {"vendors": {}, "products": {}, "cves": [], "changes": []}
+    url_template = NVD_API_URL + "?startIndex={idx}"
 
-        # Download the file
-        url = NVD_CVE_URL.format(year=year)
-        with timed_operation("Downloading {}...".format(url)):
-            resp = requests.get(url).content
+    start_index = 0
+    total_results = 0
 
-        # Parse the XML elements
-        with timed_operation("Parsing JSON elements..."):
-            raw = gzip.GzipFile(fileobj=BytesIO(resp)).read()
-            del resp
-            items = json.loads(raw.decode("utf-8"))["CVE_Items"]
-            del raw
+    while start_index <= total_results:
+        url = url_template.format(idx=start_index)
+        with timed_operation(f"Downloading {url}"):
+            resp = requests.get(url)
 
-        with timed_operation("Creating model objects..."):
+            if not resp.ok:
+                info(f"Bad response: {resp.status_code}, sleeping before retrying")
+                time.sleep(10)
+                continue
 
-            for item in items:
+        with timed_operation("Creating model objects"):
+            data = resp.json()
+            total_results = data.get("totalResults")
+            for vulnerability in data.get("vulnerabilities"):
                 cve_db_id = get_uuid()
-                summary = item["cve"]["description"]["description_data"][0]["value"]
-                cvss2 = (
-                    item["impact"]["baseMetricV2"]["cvssV2"]["baseScore"]
-                    if "baseMetricV2" in item["impact"]
-                    else None
-                )
-                cvss3 = (
-                    item["impact"]["baseMetricV3"]["cvssV3"]["baseScore"]
-                    if "baseMetricV3" in item["impact"]
-                    else None
-                )
+
+                cve_data = vulnerability.get("cve")
+                cve_id = cve_data["id"]
+
+                # Takes the CVSS scores
+                if "cvssMetricV31" in cve_data["metrics"]:
+                    cvss3 = cve_data.get("metrics")["cvssMetricV31"][0]["cvssData"][
+                        "baseScore"
+                    ]
+                elif "cvssMetricV30" in cve_data["metrics"]:
+                    cvss3 = cve_data.get("metrics")["cvssMetricV30"][0]["cvssData"][
+                        "baseScore"
+                    ]
+                else:
+                    cvss3 = None
+
+                if "cvssMetricV2" in cve_data.get("metrics"):
+                    cvss2 = cve_data.get("metrics")["cvssMetricV2"][0]["cvssData"][
+                        "baseScore"
+                    ]
+                else:
+                    cvss2 = None
 
                 # Construct CWE and CPE lists
-                cwes = get_cwes(
-                    item["cve"]["problemtype"]["problemtype_data"][0]["description"]
-                )
-                cpes = convert_cpes(item["configurations"])
-                vendors = flatten_vendors(cpes)
+                cwes = weaknesses_to_flat(cve_data.get("weaknesses"))
+                vendors_products = convert_cpes(cve_data.get("configurations", {}))
+                vendors_flatten = flatten_vendors(vendors_products)
+
+                # In case of multiple languages, keep the EN one
+                descriptions = cve_data["descriptions"]
+                if len(descriptions) > 1:
+                    descriptions = [
+                        d for d in descriptions if d["lang"] in ("en", "en-US")
+                    ]
+                summary = descriptions[0]["value"]
 
                 # Create the CVEs mappings
                 mappings["cves"].append(
                     dict(
                         id=cve_db_id,
-                        cve_id=item["cve"]["CVE_data_meta"]["ID"],
+                        cve_id=cve_id,
                         summary=summary,
-                        json=item,
-                        vendors=vendors,
+                        json=cve_data,
+                        vendors=vendors_flatten,
                         cwes=cwes,
                         cvss2=cvss2,
                         cvss3=cvss3,
-                        created_at=arrow.get(item["publishedDate"]).datetime,
-                        updated_at=arrow.get(item["lastModifiedDate"]).datetime,
+                        created_at=arrow.get(cve_data["published"]).datetime,
+                        updated_at=arrow.get(cve_data["lastModified"]).datetime,
                     )
                 )
 
                 # Create the vendors and their products
-                for vendor, products in cpes.items():
+                for vendor, products in vendors_products.items():
 
                     # Create the vendor
                     if vendor not in mappings["vendors"].keys():
@@ -101,30 +125,52 @@ def run():
                                 vendor_id=mappings["vendors"][vendor]["id"],
                             )
 
-        # Insert the objects in database
-        with timed_operation("Inserting CVE..."):
-            db.session.bulk_insert_mappings(Cve, mappings["cves"])
-            db.session.commit()
+        # NVD requirement is 2000 CVE per page
+        start_index += 2000
 
-            # Create the changes based on CVEs data
-            for cve in mappings["cves"]:
-                mappings["changes"].append(
-                    dict(
-                        id=get_uuid(),
-                        created_at=cve["created_at"],
-                        updated_at=cve["updated_at"],
-                        json=cve["json"],
-                        cve_id=cve["id"],
-                        task_id=task_id,
+        # Insert the objects in database
+        if (start_index % 20_000 == 0) or (start_index >= total_results):
+            with timed_operation("Inserting CVE"):
+                db.session.bulk_insert_mappings(Cve, mappings["cves"])
+                db.session.commit()
+
+                # Create the changes based on CVEs data
+                for cve in mappings["cves"]:
+                    mappings["changes"].append(
+                        dict(
+                            id=get_uuid(),
+                            created_at=cve["created_at"],
+                            updated_at=cve["updated_at"],
+                            json=cve["json"],
+                            cve_id=cve["id"],
+                            task_id=task_id,
+                        )
                     )
-                )
-            db.session.bulk_insert_mappings(Change, mappings["changes"])
-            db.session.commit()
-
-        info("{} CVE imported.".format(len(mappings["cves"])))
-
-        # Free the memory after each processed year
-        del mappings["cves"]
-        del mappings["changes"]
-
-    return mappings
+                db.session.bulk_insert_mappings(Change, mappings["changes"])
+                db.session.commit()
+
+            info("{} CVE imported.".format(len(mappings["cves"])))
+
+            # Free the memory after each processed year
+            mappings["cves"] = []
+            mappings["changes"] = []
+
+        # NVD requirement is 6s between requests
+        if start_index <= total_results:
+            info("Waiting 6 seconds")
+            time.sleep(6)
+
+    # Save the last CVE in database (will be reused in the handle_events task
+    with timed_operation("Saving last CVE information"):
+        last_cve = Cve.query.order_by(Cve.updated_at.desc()).first()
+        db.session.add(Meta(name="nvd_last_cve_id", value=str(last_cve.cve_id)))
+        db.session.add(
+            Meta(name="nvd_last_cve_updated_at", value=str(last_cve.updated_at))
+        )
+        db.session.commit()
+
+    # Insert the objects in database
+    with timed_operation("Inserting Vendors and Products"):
+        db.session.bulk_insert_mappings(Vendor, mappings["vendors"].values())
+        db.session.bulk_insert_mappings(Product, mappings["products"].values())
+        db.session.commit()
diff --git a/opencve/commands/migrate_nvd.py b/opencve/commands/migrate_nvd.py
new file mode 100644
index 00000000..cef695e7
--- /dev/null
+++ b/opencve/commands/migrate_nvd.py
@@ -0,0 +1,60 @@
+import click
+import requests
+import time
+from flask.cli import with_appcontext
+
+from opencve.commands import ensure_config, error, info
+from opencve.models.cve import Cve
+from opencve.extensions import db
+
+
+NVD_API_URL = "https://services.nvd.nist.gov/rest/json/cves/2.0"
+
+
+@click.command()
+@ensure_config
+@with_appcontext
+def migrate_nvd():
+    """Migrate NVD data from JSON 4.0 to 5.0"""
+    msg = (
+        "This command will migrate all existing CVEs into the new NVD format. "
+        "Do you want to continue ?"
+    )
+    if not click.confirm(msg):
+        info("Bye.")
+        return
+
+    url_template = NVD_API_URL + "?startIndex={idx}"
+    start_index = 0
+    total_results = 0
+
+    while start_index <= total_results:
+        url = url_template.format(idx=start_index)
+        info(f"Fetching {url}")
+        resp = requests.get(url)
+
+        # Break if status != 200
+        if not resp.ok:
+            info(f"Bad response: {resp.status_code}, sleeping before retrying...")
+            time.sleep(10)
+            continue
+
+        data = resp.json()
+        total_results = data.get("totalResults")
+
+        for vulnerability in data.get("vulnerabilities"):
+            cve_data = vulnerability.get("cve")
+            cve_id = cve_data.get("id")
+
+            cve_obj = Cve.query.filter_by(cve_id=cve_id).first()
+            if cve_obj:
+                cve_obj.json = cve_data
+
+        # NVD requirement is 2000 CVE per page
+        # and 6 seconds between requests.
+        start_index += 2000
+        time.sleep(6)
+
+        if (start_index % 10_000 == 0) or (start_index >= total_results):
+            db.session.flush()
+            db.session.commit()
diff --git a/opencve/commands/utils.py b/opencve/commands/utils.py
index 88e2870c..b2a864af 100644
--- a/opencve/commands/utils.py
+++ b/opencve/commands/utils.py
@@ -9,19 +9,19 @@
 from opencve.models.events import Event
 from opencve.models.products import Product
 from opencve.models.vendors import Vendor
-from opencve.utils import convert_cpes, flatten_vendors, get_cwes
+from opencve.utils import convert_cpes, flatten_vendors, weaknesses_to_flat
 
 
 class CveUtil(object):
     @classmethod
     def cve_has_changed(cls, cve_db, cve_json):
-        return arrow.get(cve_json["lastModifiedDate"]) != cve_db.updated_at
+        return arrow.get(cve_json["lastModified"]) != cve_db.updated_at
 
     @classmethod
     def create_event(cls, cve_obj, cve_json, type, payload={}):
         event = Event(
-            created_at=arrow.get(cve_json["lastModifiedDate"]).datetime,
-            updated_at=arrow.get(cve_json["lastModifiedDate"]).datetime,
+            created_at=arrow.get(cve_json["lastModified"]).datetime,
+            updated_at=arrow.get(cve_json["lastModified"]).datetime,
             cve=cve_obj,
             type=type,
             details=payload,
@@ -36,8 +36,8 @@ def create_event(cls, cve_obj, cve_json, type, payload={}):
     @classmethod
     def create_change(cls, cve_obj, cve_json, task, events):
         change = Change(
-            created_at=arrow.get(cve_json["lastModifiedDate"]).datetime,
-            updated_at=arrow.get(cve_json["lastModifiedDate"]).datetime,
+            created_at=arrow.get(cve_json["lastModified"]).datetime,
+            updated_at=arrow.get(cve_json["lastModified"]).datetime,
             cve=cve_obj,
             task=task,
             events=events,
@@ -51,35 +51,41 @@ def create_change(cls, cve_obj, cve_json, task, events):
 
     @classmethod
     def create_cve(cls, cve_json):
-        cvss2 = (
-            cve_json["impact"]["baseMetricV2"]["cvssV2"]["baseScore"]
-            if "baseMetricV2" in cve_json["impact"]
-            else None
-        )
-        cvss3 = (
-            cve_json["impact"]["baseMetricV3"]["cvssV3"]["baseScore"]
-            if "baseMetricV3" in cve_json["impact"]
-            else None
-        )
+        # Takes the CVSS scores
+        if "cvssMetricV31" in cve_json["metrics"]:
+            cvss3 = cve_json.get("metrics")["cvssMetricV31"][0]["cvssData"]["baseScore"]
+        elif "cvssMetricV30" in cve_json["metrics"]:
+            cvss3 = cve_json.get("metrics")["cvssMetricV30"][0]["cvssData"]["baseScore"]
+        else:
+            cvss3 = None
+
+        if "cvssMetricV2" in cve_json.get("metrics"):
+            cvss2 = cve_json.get("metrics")["cvssMetricV2"][0]["cvssData"]["baseScore"]
+        else:
+            cvss2 = None
 
         # Construct CWE and CPE lists
-        cwes = get_cwes(
-            cve_json["cve"]["problemtype"]["problemtype_data"][0]["description"]
-        )
-        cpes = convert_cpes(cve_json["configurations"])
-        vendors = flatten_vendors(cpes)
+        cwes = weaknesses_to_flat(cve_json.get("weaknesses"))
+        vendors_products = convert_cpes(cve_json.get("configurations", {}))
+        vendors_flatten = flatten_vendors(vendors_products)
+
+        # In case of multiple languages, keep the EN one
+        descriptions = cve_json["descriptions"]
+        if len(descriptions) > 1:
+            descriptions = [d for d in descriptions if d["lang"] in ("en", "en-US")]
+        summary = descriptions[0]["value"]
 
         # Create the CVE
         cve = Cve(
-            cve_id=cve_json["cve"]["CVE_data_meta"]["ID"],
-            summary=cve_json["cve"]["description"]["description_data"][0]["value"],
+            cve_id=cve_json.get("id"),
+            summary=summary,
             json=cve_json,
-            vendors=vendors,
+            vendors=vendors_flatten,
             cwes=cwes,
             cvss2=cvss2,
             cvss3=cvss3,
-            created_at=arrow.get(cve_json["publishedDate"]).datetime,
-            updated_at=arrow.get(cve_json["lastModifiedDate"]).datetime,
+            created_at=arrow.get(cve_json["published"]).datetime,
+            updated_at=arrow.get(cve_json["lastModified"]).datetime,
         )
         db.session.add(cve)
         db.session.commit()
@@ -96,9 +102,6 @@ def create_cve(cls, cve_json):
                 db.session.commit()
 
         # Add the CPEs
-        vendors_products = convert_cpes(
-            nested_lookup("cpe23Uri", cve_json["configurations"])
-        )
         for vendor, products in vendors_products.items():
             v_obj = Vendor.query.filter_by(name=vendor).first()
 
diff --git a/opencve/migrations/versions/0bcd7a25924a_migrate_nvd_format.py b/opencve/migrations/versions/0bcd7a25924a_migrate_nvd_format.py
new file mode 100644
index 00000000..ab065024
--- /dev/null
+++ b/opencve/migrations/versions/0bcd7a25924a_migrate_nvd_format.py
@@ -0,0 +1,45 @@
+"""Migrate the NVD format
+
+Revision ID: 0bcd7a25924a
+Revises: 1c7aecfc5f6e
+Create Date: 2023-11-25 22:57:59.990718
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = "0bcd7a25924a"
+down_revision = "1c7aecfc5f6e"
+
+import arrow
+from alembic import op
+import sqlalchemy as sa
+
+from opencve.models.cve import Cve
+from opencve.models.metas import Meta
+
+
+def upgrade():
+    """This migration prepares the Meta table to handle the
+    last CVE ID and its associated updatedAt date."""
+    connection = op.get_bind()
+    sessionmaker = sa.orm.sessionmaker()
+    session = sessionmaker(bind=connection)
+
+    # Get the last CVE
+    cve = session.query(Cve).order_by(Cve.updated_at.desc()).first()
+    if not cve:
+        return
+
+    # Create the metas data
+    session.add(Meta(name="nvd_last_cve_id", value=cve.cve_id))
+    session.add(Meta(name="nvd_last_cve_updated_at", value=cve.updated_at))
+    session.commit()
+
+
+def downgrade():
+    connection = op.get_bind()
+    sessionmaker = sa.orm.sessionmaker()
+    session = sessionmaker(bind=connection)
+
+    session.query(Meta).filter_by(name="nvd_last_cve_id").delete()
+    session.query(Meta).filter_by(name="nvd_last_cve_updated_at").delete()
diff --git a/opencve/models/cve.py b/opencve/models/cve.py
index aa40b5a9..70627a60 100644
--- a/opencve/models/cve.py
+++ b/opencve/models/cve.py
@@ -96,3 +96,61 @@ def cvss_weight(self):
         if self.cvss3:
             w += self.cvss3
         return w
+
+    @property
+    def cvss2_score(self):
+        if "cve" in self.json.keys():
+            if "baseMetricV2" in self.json["impact"]:
+                return self.json["impact"]["baseMetricV2"]["cvssV2"]["baseScore"]
+        else:
+            if "cvssMetricV2" in self.json["metrics"]:
+                return self.json["metrics"]["cvssMetricV2"][0]["cvssData"]["baseScore"]
+
+        return None
+
+    @property
+    def cvss3_score(self):
+        if "cve" in self.json.keys():
+            if "baseMetricV3" in self.json["impact"]:
+                return self.json["impact"]["baseMetricV3"]["cvssV3"]["baseScore"]
+        else:
+            if "cvssMetricV31" in self.json["metrics"]:
+                return self.json["metrics"]["cvssMetricV31"][0]["cvssData"]["baseScore"]
+            elif "cvssMetricV30" in self.json["metrics"]:
+                return self.json["metrics"]["cvssMetricV30"][0]["cvssData"]["baseScore"]
+
+        return None
+
+    @property
+    def cvss2_severity(self):
+        if "cve" in self.json.keys():
+            if "baseMetricV2" in self.json["impact"]:
+                return self.json["impact"]["baseMetricV2"]["severity"]
+        else:
+            if "cvssMetricV2" in self.json["metrics"]:
+                return self.json["metrics"]["cvssMetricV2"][0]["baseSeverity"]
+
+        return None
+
+    @property
+    def cvss3_severity(self):
+        if "cve" in self.json.keys():
+            if "baseMetricV3" in self.json["impact"]:
+                return self.json["impact"]["baseMetricV3"]["severity"]
+        else:
+            if "cvssMetricV31" in self.json["metrics"]:
+                return self.json["metrics"]["cvssMetricV31"][0]["cvssData"][
+                    "baseSeverity"
+                ]
+            elif "cvssMetricV30" in self.json["metrics"]:
+                return self.json["metrics"]["cvssMetricV30"][0]["cvssData"][
+                    "baseSeverity"
+                ]
+
+        return None
+
+    @property
+    def references(self):
+        if "cve" in self.json.keys():
+            return self.json["cve"]["references"]["reference_data"]
+        return self.json["references"]
diff --git a/opencve/tasks/events.py b/opencve/tasks/events.py
index c3e592dd..df370eea 100644
--- a/opencve/tasks/events.py
+++ b/opencve/tasks/events.py
@@ -1,7 +1,5 @@
-import gzip
-import json
-import re
-from io import BytesIO
+import time
+from datetime import datetime
 
 import arrow
 import requests
@@ -14,44 +12,28 @@
 from opencve.models.metas import Meta
 from opencve.models.tasks import Task
 
-NVD_MODIFIED_URL = "https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-modified.json.gz"
-NVD_MODIFIED_META_URL = (
-    "https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-modified.meta"
-)
+NVD_API_URL = "https://services.nvd.nist.gov/rest/json/cves/2.0"
 logger = get_task_logger(__name__)
 
 
-def has_changed():
-    logger.info("Downloading {}...".format(NVD_MODIFIED_META_URL))
-    resp = requests.get(NVD_MODIFIED_META_URL)
-    buf = BytesIO(resp.content).read().decode("utf-8")
+def get_last_cve():
+    cve_id = Meta.query.filter_by(name="nvd_last_cve_id").first().value
+    updated_at = arrow.get(
+        Meta.query.filter_by(name="nvd_last_cve_updated_at").first().value
+    )
+    return cve_id, updated_at
 
-    matches = re.match(r".*sha256:(\w{64}).*", buf, re.DOTALL)
-    nvd_sha256 = matches.group(1)
-    last_nvd256 = Meta.query.filter_by(name="nvd_last_sha256").first()
 
-    if nvd_sha256 != last_nvd256.value:
-        logger.info(
-            "Found different hashes (old:{}, new:{}).".format(
-                last_nvd256.value, nvd_sha256
-            )
-        )
-        return last_nvd256, nvd_sha256
-    else:
-        logger.info("DB is up to date.")
-        return last_nvd256, None
-
-
-def download_modified_items():
-    logger.info("Downloading {}...".format(NVD_MODIFIED_URL))
-    resp = requests.get(NVD_MODIFIED_URL).content
-    raw = gzip.GzipFile(fileobj=BytesIO(resp)).read()
-    items = json.loads(raw.decode("utf-8"))["CVE_Items"]
-    return items
+def save_last_cve(cve_id, updated_at):
+    meta_last_cve = Meta.query.filter_by(name="nvd_last_cve_id").first()
+    meta_last_cve.value = cve_id
+    meta_last_cve = Meta.query.filter_by(name="nvd_last_cve_updated_at").first()
+    meta_last_cve.value = str(updated_at)
+    db.session.commit()
 
 
 def check_for_update(cve_json, task):
-    cve_id = cve_json["cve"]["CVE_data_meta"]["ID"]
+    cve_id = cve_json["id"]
     cve_obj = Cve.query.filter_by(cve_id=cve_id).first()
     events = []
 
@@ -77,7 +59,7 @@ def check_for_update(cve_json, task):
                 events.append(event)
 
         # Change the last updated date
-        cve_obj.updated_at = arrow.get(cve_json["lastModifiedDate"]).datetime
+        cve_obj.updated_at = arrow.get(cve_json["lastModified"]).datetime
         cve_obj.json = cve_json
         db.session.commit()
 
@@ -90,24 +72,54 @@ def check_for_update(cve_json, task):
 def handle_events():
     cel.app.app_context().push()
 
-    logger.info("Checking for new events...")
-    current_sum, new_sum = has_changed()
-    if not new_sum:
-        return
+    # Retrieve the last CVE to start the synchronization
+    last_cve_id, last_updated_at = get_last_cve()
 
-    # Retrieve the list of modified CVEs
-    logger.info("Download modified CVEs...")
-    items = download_modified_items()
+    logger.info(f"Parsing last events since {last_cve_id} (at {last_updated_at})")
+    start = last_updated_at.strftime("%Y-%m-%dT%H:%M:%S")
+    end = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S")
+    url_template = (
+        NVD_API_URL
+        + f"?lastModStartDate={start}Z&lastModEndDate={end}Z"
+        + "&startIndex={idx}"
+    )
 
     # Create the task containing the changes
     task = Task()
     db.session.add(task)
 
-    logger.info("Checking {} CVEs...".format(len(items)))
-    for item in items:
-        check_for_update(item, task)
+    # Iterate over all new CVEs
+    start_index = 0
+    total_results = 0
+    while start_index <= total_results:
+        url = url_template.format(idx=start_index)
+        logger.info(f"Fetching {url}")
+        resp = requests.get(url)
+
+        # Continue if status != 200
+        if not resp.ok:
+            logger.info(
+                f"Bad response: {resp.status_code}, sleeping before retrying..."
+            )
+            time.sleep(10)
+            continue
+
+        data = resp.json()
+        total_results = data.get("totalResults")
 
-    logger.info("CVEs checked, updating meta hash...")
-    current_sum.value = new_sum
-    db.session.commit()
-    logger.info("Done, new meta is {}.".format(new_sum))
+        for vulnerability in data.get("vulnerabilities"):
+            cve = vulnerability.get("cve")
+            check_for_update(cve, task)
+
+            # Store the last CVE info
+            cve_last_modified = arrow.get(cve["lastModified"])
+            if last_updated_at < cve_last_modified:
+                last_cve_id = cve["id"]
+                last_updated_at = cve_last_modified
+
+        # NVD requirement is 2000 CVE per page and 6s between requests
+        start_index += 2000
+        time.sleep(6)
+
+    # Save the last CVE information for the next handle_events tasks
+    save_last_cve(last_cve_id, last_updated_at)
diff --git a/opencve/templates/_includes/configurations_new.html b/opencve/templates/_includes/configurations_new.html
new file mode 100644
index 00000000..2e334787
--- /dev/null
+++ b/opencve/templates/_includes/configurations_new.html
@@ -0,0 +1,27 @@
+{% for conf in cve.json.configurations %}
+
+<p><strong>Configuration {{ loop.index }}</strong> (<a class="pointer config-toggle" id="config-{{ loop.index }}">hide</a>)</p>
+<table class="table table-configuration" id="config-{{ loop.index }}-table">
+    <tr>
+        {% if conf.operator == "AND" %}
+        <td class="col-md-1 rowspaned">AND</td>
+        {% endif %}
+        <td class="col-md-11 and">
+            {% for node in conf.nodes %}
+            <table class="table table-bordered no-margin-bottom">
+                {% for cpe in node.cpeMatch %}
+                <tr>
+                    {% if loop.index == 1 and node.cpeMatch|length > 1 %}
+                    <td class="col-md-1 rowspaned" rowspan="{{ node.cpeMatch|length }}">OR</td>
+                    {% endif %}
+                    <td>{{ cpe.criteria }}</td>
+                </tr>
+                {% endfor %}
+            </table>
+            {% endfor %}
+        </td>
+    </tr>
+</table>
+<hr/>
+
+{% endfor %}
\ No newline at end of file
diff --git a/opencve/templates/_includes/configurations_old.html b/opencve/templates/_includes/configurations_old.html
new file mode 100644
index 00000000..4e0d3af4
--- /dev/null
+++ b/opencve/templates/_includes/configurations_old.html
@@ -0,0 +1,33 @@
+{% for conf in cve.json.configurations.nodes %}
+<p><strong>Configuration {{ loop.index }}</strong> (<a class="pointer config-toggle"
+                                                       id="config-{{ loop.index }}">hide</a>)</p>
+{% if conf.operator == 'AND'%}
+{% set children = conf.children %}
+{% else %}
+{% set children = [conf] %}
+{% endif %}
+
+<table class="table table-configuration" id="config-{{ loop.index }}-table">
+    <tr>
+        {% if children|length > 1 %}
+        <td class="col-md-1 rowspaned">AND</td>
+        {% endif %}
+        <td class="col-md-11 and">
+            {% for child in children %}
+            <table class="table table-bordered no-margin-bottom">
+                {% for cpe in child.cpe_match %}
+                <tr>
+                    {% if loop.index == 1 and child.cpe_match|length > 1 %}
+                    <td class="col-md-1 rowspaned" rowspan="{{ child.cpe_match|length }}">OR</td>
+                    {% endif %}
+                    <td>{{ cpe.cpe23Uri }}</td>
+                </tr>
+                {% endfor %}
+            </table>
+            {% endfor %}
+        </td>
+    </tr>
+</table>
+
+<hr/>
+{% endfor %}
\ No newline at end of file
diff --git a/opencve/templates/_includes/cvss2_new.html b/opencve/templates/_includes/cvss2_new.html
new file mode 100644
index 00000000..a03ca77f
--- /dev/null
+++ b/opencve/templates/_includes/cvss2_new.html
@@ -0,0 +1,86 @@
+{% set cvss = cve.json.metrics.cvssMetricV2.0 %}
+<div class="row">
+    <div class="col-md-4">
+        <div class="small-box {{ cvss_bg(cvss.cvssData.baseScore)[0] }}">
+            <div class="inner">
+                <h3>{{ cvss.cvssData.baseScore }}<sup style="font-size: 20px"> /10</sup></h3>
+                <p>CVSS v2.0 : {{ cvss.baseSeverity }}</p>
+            </div>
+            <div class="icon">
+                <i class="ion ion-stats-bars"></i>
+            </div>
+            <a href="https://www.first.org/cvss/v2/guide" target="_blank" class="small-box-footer">
+                V2 Legend <i class="fa fa-arrow-circle-right"></i>
+            </a>
+        </div>
+
+        <p><strong>Vector :</strong> {{ cvss.cvssData.vectorString }}</p>
+        <p><strong>Exploitability :</strong> {{ cvss.exploitabilityScore }} / <strong>Impact
+            :</strong> {{ cvss.impactScore }}</p>
+    </div>
+
+    <div class="col-md-4">
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Access Vector
+                        <span class="pull-right label {{ metric_bg('v2', 'AV', cvss.cvssData.accessVector) }}">{{ cvss.cvssData.accessVector }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Access Complexity
+                        <span class="pull-right label {{ metric_bg('v2', 'AC', cvss.cvssData.accessComplexity) }}">{{ cvss.cvssData.accessComplexity }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Authentication
+                        <span class="pull-right label {{ metric_bg('v2', 'AU', cvss.cvssData.authentication) }}">{{ cvss.cvssData.authentication }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="col-md-4">
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Confidentiality Impact
+                        <span class="pull-right label {{ metric_bg('v2', 'C', cvss.cvssData.confidentialityImpact) }}">{{ cvss.cvssData.confidentialityImpact }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Integrity Impact
+                        <span class="pull-right label {{ metric_bg('v2', 'I', cvss.cvssData.integrityImpact) }}">{{ cvss.cvssData.integrityImpact }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Availability Impact
+                        <span class="pull-right label {{ metric_bg('v2', 'A', cvss.cvssData.availabilityImpact) }}">{{ cvss.cvssData.availabilityImpact }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/opencve/templates/_includes/cvss2.html b/opencve/templates/_includes/cvss2_old.html
similarity index 100%
rename from opencve/templates/_includes/cvss2.html
rename to opencve/templates/_includes/cvss2_old.html
diff --git a/opencve/templates/_includes/cvss3_new.html b/opencve/templates/_includes/cvss3_new.html
new file mode 100644
index 00000000..4207895f
--- /dev/null
+++ b/opencve/templates/_includes/cvss3_new.html
@@ -0,0 +1,110 @@
+{% if "cvssMetricV31" in cve.json.metrics %}
+{% set cvss = cve.json.metrics.cvssMetricV31.0 %}
+{% else %}
+{% set cvss = cve.json.metrics.cvssMetricV30.0 %}
+{% endif %}
+<div class="row">
+    <div class="col-md-4">
+        <div class="small-box {{ cvss_bg(cvss.cvssData.baseScore)[0] }}">
+            <div class="inner">
+                <h3>{{ cvss.cvssData.baseScore }}<sup style="font-size: 20px"> /10</sup></h3>
+                <p>CVSS v3 : {{ cvss.cvssData.baseSeverity }}</p>
+            </div>
+            <div class="icon">
+                <i class="ion ion-stats-bars"></i>
+            </div>
+            <a href="https://www.first.org/cvss/specification-document" target="_blank" class="small-box-footer">
+                V3 Legend <i class="fa fa-arrow-circle-right"></i>
+            </a>
+        </div>
+
+        <p><strong>Vector :</strong> {{ cvss.cvssData.vectorString.split("0/")[1] }}</p>
+        <p><strong>Exploitability :</strong> {{ cvss.exploitabilityScore }} / <strong>Impact
+            :</strong> {{ cvss.impactScore }}</p>
+    </div>
+
+    <div class="col-md-4">
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Attack Vector
+                        <span class="pull-right label {{ metric_bg('v3', 'AV', cvss.cvssData.attackVector) }}">{{ cvss.cvssData.attackVector }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Attack Complexity
+                        <span class="pull-right label {{ metric_bg('v3', 'AC', cvss.cvssData.attackComplexity) }}">{{ cvss.cvssData.attackComplexity }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Privileges Required
+                        <span class="pull-right label {{ metric_bg('v3', 'PR', cvss.cvssData.privilegesRequired) }}">{{ cvss.cvssData.privilegesRequired }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        User Interaction
+                        <span class="pull-right label {{ metric_bg('v3', 'UI', cvss.cvssData.userInteraction) }}">{{ cvss.cvssData.userInteraction }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="col-md-4">
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Confidentiality Impact
+                        <span class="pull-right label {{ metric_bg('v3', 'C', cvss.cvssData.confidentialityImpact) }}">{{ cvss.cvssData.confidentialityImpact }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Integrity Impact
+                        <span class="pull-right label {{ metric_bg('v3', 'I', cvss.cvssData.integrityImpact) }}">{{ cvss.cvssData.integrityImpact }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Availability Impact
+                        <span class="pull-right label {{ metric_bg('v3', 'A', cvss.cvssData.availabilityImpact) }}">{{ cvss.cvssData.availabilityImpact }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+        <div class="panel-group panel-group-cvss">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h4 class="panel-title">
+                        Scope
+                        <span class="pull-right label {{ metric_bg('v3', 'S', cvss.cvssData.scope) }}">{{ cvss.cvssData.scope }}</span>
+                    </h4>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/opencve/templates/_includes/cvss3.html b/opencve/templates/_includes/cvss3_old.html
similarity index 100%
rename from opencve/templates/_includes/cvss3.html
rename to opencve/templates/_includes/cvss3_old.html
diff --git a/opencve/templates/cve.html b/opencve/templates/cve.html
index f5d1b429..a6944145 100644
--- a/opencve/templates/cve.html
+++ b/opencve/templates/cve.html
@@ -23,31 +23,39 @@ <h1>{{ cve.cve_id }}</h1>
                 </div>
             </div>
 
-            {% if cve.json.impact.baseMetricV3 or cve.json.impact.baseMetricV2 %}
+            {% if cve.cvss3_score or cve.cvss2_score %}
             <div class="nav-tabs-custom nav-tabs-primary">
                 <ul class="nav nav-tabs">
-                    {% if cve.json.impact.baseMetricV3 %}
-                    <li class="active"><a href="#cvss3" data-toggle="tab">CVSS v3.0 <span
-                            class="label {{ cvss_bg(cve.json.impact.baseMetricV3.cvssV3.baseScore)[1] }} label-cvss">{{ cve.json.impact.baseMetricV3.cvssV3.baseScore }} {{ cve.json.impact.baseMetricV3.cvssV3.baseSeverity }}</span></a>
+                    {% if cve.cvss3_score %}
+                    <li class="active"><a href="#cvss3" data-toggle="tab">CVSS v3 <span
+                            class="label {{ cvss_bg(cve.cvss3_score)[1] }} label-cvss">{{ cve.cvss3_score }} {{ cve.cvss3_severity }}</span></a>
                     </li>
                     {% endif %}
-                    {% if cve.json.impact.baseMetricV2 %}
-                    <li {% if not cve.json.impact.baseMetricV3 %}class="active" {% endif %}><a href="#cvss2"
+                    {% if cve.cvss2_score %}
+                    <li {% if not cve.cvss3_score %}class="active" {% endif %}><a href="#cvss2"
                                                                                                data-toggle="tab">CVSS
                         v2.0 <span
-                                class="label {{ cvss_bg(cve.json.impact.baseMetricV2.cvssV2.baseScore)[1] }} label-cvss">{{ cve.json.impact.baseMetricV2.cvssV2.baseScore }} {{ cve.json.impact.baseMetricV2.severity }}</span></a>
+                                class="label {{ cvss_bg(cve.cvss2_score)[1] }} label-cvss">{{ cve.cvss2_score }} {{ cve.cvss2_severity }}</span></a>
                     </li>
                     {% endif %}
                 </ul>
                 <div class="tab-content">
-                    {% if cve.json.impact.baseMetricV3 %}
+                    {% if cve.cvss3_score %}
                     <div class="tab-pane active" id="cvss3">
-                        {% include "_includes/cvss3.html" %}
+                        {% if "cve" in cve.json %}
+                        {% include "_includes/cvss3_old.html" %}
+                        {% else %}
+                        {% include "_includes/cvss3_new.html" %}
+                        {% endif %}
                     </div>
                     {% endif %}
-                    {% if cve.json.impact.baseMetricV2 %}
-                    <div class="tab-pane {% if not cve.json.impact.baseMetricV3 %}active{% endif%}" id="cvss2">
-                        {% include "_includes/cvss2.html" %}
+                    {% if cve.cvss2_score %}
+                    <div class="tab-pane {% if not cve.cvss3_score %}active{% endif%}" id="cvss2">
+                        {% if "cve" in cve.json %}
+                        {% include "_includes/cvss2_old.html" %}
+                        {% else %}
+                        {% include "_includes/cvss2_new.html" %}
+                        {% endif %}
                     </div>
                     {% endif %}
                 </div>
@@ -72,14 +80,14 @@ <h1>{{ cve.cve_id }}</h1>
                     </div>
                 </div>
                 <div class="box-body">
-                    {% if cve.json.cve.references.reference_data %}
+                    {% if cve.references %}
                     <table class="table table-bordered">
                         <thead>
                             <th>Link</th>
                             <th>Resource</th>
                         </thead>
                         <tbody>
-                        {% for ref in cve.json.cve.references.reference_data %}
+                        {% for ref in cve.references %}
                         <tr>
                             <td class="col-md-8 td-ellipsis"><a href="{{ ref.url }}" target="_blank">{{ ref.url }}</a>
                             </td>
@@ -100,45 +108,16 @@ <h1>{{ cve.cve_id }}</h1>
                 <div class="box-header">
                     <div class="box-title">Configurations</div>
                     <div class="box-tools pull-right">
-                        <button type="button" class="btn btn-box-tool" data-widget="collapse"><i
-                                class="fa fa-minus"></i></button>
+                        <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
                     </div>
                 </div>
-                {% if cve.json.configurations.nodes %}
+                {% if cve.json.configurations %}
                 <div class="box-body">
-                    {% for conf in cve.json.configurations.nodes %}
-                    <p><strong>Configuration {{ loop.index }}</strong> (<a class="pointer config-toggle"
-                                                                           id="config-{{ loop.index }}">hide</a>)</p>
-                    {% if conf.operator == 'AND'%}
-                    {% set children = conf.children %}
-                    {% else %}
-                    {% set children = [conf] %}
-                    {% endif %}
-
-                    <table class="table table-configuration" id="config-{{ loop.index }}-table">
-                        <tr>
-                            {% if children|length > 1 %}
-                            <td class="col-md-1 rowspaned">AND</td>
-                            {% endif %}
-                            <td class="col-md-11 and">
-                                {% for child in children %}
-                                <table class="table table-bordered no-margin-bottom">
-                                    {% for cpe in child.cpe_match %}
-                                    <tr>
-                                        {% if loop.index == 1 and child.cpe_match|length > 1 %}
-                                        <td class="col-md-1 rowspaned" rowspan="{{ child.cpe_match|length }}">OR</td>
-                                        {% endif %}
-                                        <td>{{ cpe.cpe23Uri }}</td>
-                                    </tr>
-                                    {% endfor %}
-                                </table>
-                                {% endfor %}
-                            </td>
-                        </tr>
-                    </table>
-
-                    <hr/>
-                    {% endfor %}
+                {% if "cve" in cve.json %}
+                {% include "_includes/configurations_old.html" %}
+                {% else %}
+                {% include "_includes/configurations_new.html" %}
+                {% endif %}
                 </div>
                 {% else %}
                 <div class="box-body">
diff --git a/opencve/templates/cves.html b/opencve/templates/cves.html
index de353d48..a3e14a98 100644
--- a/opencve/templates/cves.html
+++ b/opencve/templates/cves.html
@@ -210,16 +210,16 @@ <h1>Vulnerabilities (CVE)</h1>
                             <td class="col-md-3">{{ cve.vendors|vendors_excerpt|safe }}</td>
                             <td class="col-md-3">{{ cve.vendors|products_excerpt|safe }}</td>
                             <td class="col-md-2 text-center">{{ cve.updated_at.strftime('%Y-%m-%d') }}</td>
-                            {% if cve.json.impact.baseMetricV2 %}
+                            {% if cve.cvss2_score %}
                             <td class="col-md-1 text-center"><span
-                                    class="label {{ cvss_bg(cve.json.impact.baseMetricV2.cvssV2.baseScore)[1] }}">{{ cve.json.impact.baseMetricV2.cvssV2.baseScore }} {{ cve.json.impact.baseMetricV2.severity }}</span>
+                                    class="label {{ cvss_bg(cve.cvss2_score)[1] }}">{{ cve.cvss2_score }} {{ cve.cvss2_severity }}</span>
                             </td>
                             {% else %}
                             <td class="col-md-1 text-center"><span class="label label-default">N/A</span></td>
                             {% endif %}
-                            {% if cve.json.impact.baseMetricV3 %}
+                            {% if cve.cvss3_score %}
                             <td class="col-md-1 text-center"><span
-                                    class="label {{ cvss_bg(cve.json.impact.baseMetricV3.cvssV3.baseScore)[1] }}">{{ cve.json.impact.baseMetricV3.cvssV3.baseScore }} {{ cve.json.impact.baseMetricV3.cvssV3.baseSeverity }}</span>
+                                    class="label {{ cvss_bg(cve.cvss3_score)[1] }}">{{ cve.cvss3_score }} {{ cve.cvss3_severity }}</span>
                             </td>
                             {% else %}
                             <td class="col-md-1 text-center"><span class="label label-default">N/A</span></td>
diff --git a/opencve/templates/home.html b/opencve/templates/home.html
index d28e9826..dcb87783 100644
--- a/opencve/templates/home.html
+++ b/opencve/templates/home.html
@@ -63,16 +63,16 @@ <h3 class="timeline-header"><a href="{{ url_for('main.cve', cve_id=change.cve.cv
                                             <tbody>
                                                 <tr>
                                                     <td class="no-bordered">CVSS v3</td>
-                                                    {% if change.cve.json.impact.baseMetricV3 %}
-                                                    <td class="no-bordered"><span class="label {{ cvss_bg(change.cve.json.impact.baseMetricV3.cvssV3.baseScore)[1] }} label-cvss">{{ change.cve.json.impact.baseMetricV3.cvssV3.baseScore }} {{ change.cve.json.impact.baseMetricV3.cvssV3.baseSeverity }}</span></td>
+                                                    {% if change.cve.cvss3_score %}
+                                                    <td class="no-bordered"><span class="label {{ cvss_bg(change.cve.cvss3_score)[1] }} label-cvss">{{ change.cve.cvss3_score }} {{ change.cve.cvss3_severity }}</span></td>
                                                     {% else %}
                                                     <td>--</td>
                                                     {% endif%}
                                                 </tr>
                                                 <tr>
                                                     <td>CVSS v2</td>
-                                                    {% if change.cve.json.impact.baseMetricV2 %}
-                                                    <td><span class="label {{ cvss_bg(change.cve.json.impact.baseMetricV2.cvssV2.baseScore)[1] }} label-cvss">{{ change.cve.json.impact.baseMetricV2.cvssV2.baseScore }} {{ change.cve.json.impact.baseMetricV2.severity }}</span></td>
+                                                    {% if change.cve.cvss2_score %}
+                                                    <td><span class="label {{ cvss_bg(change.cve.cvss2_score)[1] }} label-cvss">{{ change.cve.cvss2_score }} {{ change.cve.cvss2_severity }}</span></td>
                                                     {% else %}
                                                     <td>--</td>
                                                     {% endif%}
diff --git a/opencve/templates/report/summary_details.html b/opencve/templates/report/summary_details.html
index d9e4d436..09df8641 100644
--- a/opencve/templates/report/summary_details.html
+++ b/opencve/templates/report/summary_details.html
@@ -1,7 +1,35 @@
+{% if event.details["removed"] or event.details["added"] %}
 <tr>
     {% if not hide_type %}
     <td>Summary</td>
     {% endif %}
-    <td>
{{ event.details.old }}
</td>
-    <td>{{ event.details.new }}</td>
-</tr>
\ No newline at end of file
+    <td>
+        {% if event.details["removed"] %}
+        <ul>
+            {% for lang, summary in event.details["removed"].items() %}
+            <li>
({{ lang }}) {{ summary }}
</li>
+            {% endfor %}
+        </ul>
+        {% endif %}
+    </td>
+    <td>
+        {% if event.details["added"] %}
+        <ul>
+            {% for lang, summary in event.details["added"].items() %}
+            <li>({{ lang }}) {{ summary }}</li>
+            {% endfor %}
+        </ul>
+        {% endif %}
+    </td>
+</tr>
+{% endif %}
+
+{% for lang, values in event.details["changed"].items() %}
+<tr>
+    {% if not hide_type %}
+    <td>Summary</td>
+    {% endif %}
+    <td>
({{ lang }}) {{ values.old }}
</td>
+    <td>({{ lang }}) {{ values.new }}</td>
+</tr>
+{% endfor %}
\ No newline at end of file
diff --git a/opencve/utils.py b/opencve/utils.py
index c5f579af..b5929f28 100644
--- a/opencve/utils.py
+++ b/opencve/utils.py
@@ -10,7 +10,11 @@ def convert_cpes(conf):
     This function takes an object, extracts its CPE uris and transforms them into
     a dictionnary representing the vendors with their associated products.
     """
-    uris = nested_lookup("cpe23Uri", conf) if not isinstance(conf, list) else conf
+    uris = nested_lookup("criteria", conf)
+
+    # Try old NVD CVE format if no criteria found
+    if not uris:
+        uris = nested_lookup("cpe23Uri", conf)
 
     # Create a list of tuple (vendor, product)
     cpes_t = list(set([tuple(uri.split(":")[3:5]) for uri in uris]))
@@ -38,19 +42,29 @@ def flatten_vendors(vendors):
 
 
 def get_cwes(problems):
+    # TODO: change references to it
     """
     Takes a list of problems and return the CWEs ID.
     """
     return list(set([p["value"] for p in problems]))
 
 
-def get_cwes_details(problems):
+def weaknesses_to_flat(weaknesses=None):
+    return nested_lookup("value", weaknesses)
+
+
+def get_cwes_details(cve_json):
     """
     Takes a list of problems and return the CWEs along
     with the name of the vulnerability.
     """
+    if "cve" in cve_json:
+        problems = cve_json["cve"]["problemtype"]["problemtype_data"][0]["description"]
+    else:
+        problems = cve_json.get("weaknesses")
+
     cwes = {}
-    for cwe_id in get_cwes(problems):
+    for cwe_id in weaknesses_to_flat(problems):
         cwes[cwe_id] = None
         cwe = Cwe.query.filter_by(cwe_id=cwe_id).first()
         if cwe:
@@ -79,3 +93,45 @@ def _format_line(self, side, flag, linenum, text):
             linenum,
             text,
         )
+
+
+def vendors_conf_to_dict(conf):
+    """
+    This function takes an object, extracts its CPE uris and transforms them into
+    a dictionary representing the vendors with their associated products.
+    """
+    uris = nested_lookup("criteria", conf)
+
+    # Create a list of tuple (vendor, product)
+    cpes_t = list(set([tuple(uri.split(":")[3:5]) for uri in uris]))
+
+    # Transform it into nested dictionary
+    cpes = {}
+    for vendor, product in cpes_t:
+        if vendor not in cpes:
+            cpes[vendor] = []
+        cpes[vendor].append(product)
+
+    return cpes
+
+
+def vendors_dict_to_flat(vendors):
+    """
+    Takes a list of nested vendors and products and flat them.
+    """
+    data = []
+    for vendor, products in vendors.items():
+        data.append(vendor)
+        for product in products:
+            data.append(f"{vendor}{PRODUCT_SEPARATOR}{product}")
+    return data
+
+
+def vendors_conf_to_flat(conf=None):
+    """
+    Takes a list of CPEs configuration and returns it in a flat
+    array with a vendor/product separator in each item.
+    """
+    if not conf:
+        return []
+    return vendors_dict_to_flat(vendors_conf_to_dict(conf))
diff --git a/opencve/views/cves.py b/opencve/views/cves.py
index 5e1d9089..b9c8c00e 100644
--- a/opencve/views/cves.py
+++ b/opencve/views/cves.py
@@ -40,11 +40,8 @@ def cves():
 @main.route("/cve/<cve_id>")
 def cve(cve_id):
     cve = CveController.get({"cve_id": cve_id})
-
-    vendors = convert_cpes(cve.json["configurations"])
-    cwes = get_cwes_details(
-        cve.json["cve"]["problemtype"]["problemtype_data"][0]["description"]
-    )
+    vendors = convert_cpes(cve.json.get("configurations", {}))
+    cwes = get_cwes_details(cve.json)
 
     # Get the user tags
     user_tags = []


Test patch:
diff --git a/tests/api/test_cves.py b/tests/api/test_cves.py
index ce2c7ea5..89a26eba 100644
--- a/tests/api/test_cves.py
+++ b/tests/api/test_cves.py
@@ -19,10 +19,10 @@ def test_list_cves(client, create_user, create_cve):
     assert response.status_code == 200
     assert len(response.json) == 1
     assert response.json[0] == {
-        "created_at": "2018-10-09T17:29:00Z",
+        "created_at": "2018-10-09T17:29:01Z",
         "id": "CVE-2018-18074",
         "summary": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network.",
-        "updated_at": "2019-10-03T00:03:00Z",
+        "updated_at": "2022-07-25T18:15:14Z",
     }
 
 
@@ -41,14 +41,18 @@ def test_get_cve(client, create_user, create_cve, open_file):
     assert response.status_code == 200
 
     raw_nvd_data = response.json.pop("raw_nvd_data")
-    assert response.json == {
-        "created_at": "2018-10-09T17:29:00Z",
-        "id": "CVE-2018-18074",
-        "summary": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network.",
-        "updated_at": "2019-10-03T00:03:00Z",
-        "cvss": {"v2": 5.0, "v3": 9.8},
-        "cwes": ["CWE-522"],
-        "vendors": {"canonical": ["ubuntu_linux"], "python-requests": ["requests"]},
+    assert response.json["created_at"] == "2018-10-09T17:29:01Z"
+    assert response.json["id"] == "CVE-2018-18074"
+    assert (
+        response.json["summary"]
+        == "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
+    )
+    assert response.json["updated_at"] == "2022-07-25T18:15:14Z"
+    assert response.json["cvss"] == {"v2": 5.0, "v3": 9.8}
+    assert response.json["cwes"] == ["CWE-522"]
+    assert response.json["vendors"] == {
+        "canonical": ["ubuntu_linux"],
+        "python-requests": ["requests"],
     }
 
     data = open_file("cves/CVE-2018-18074.json")
diff --git a/tests/api/test_cwes.py b/tests/api/test_cwes.py
index 5ca380a1..f259eb59 100644
--- a/tests/api/test_cwes.py
+++ b/tests/api/test_cwes.py
@@ -53,8 +53,8 @@ def test_list_cwe_cves(client, create_user, create_cve):
     assert len(response.json) == 1
 
     assert response.json[0] == {
-        "created_at": "2018-10-09T17:29:00Z",
+        "created_at": "2018-10-09T17:29:01Z",
         "id": "CVE-2018-18074",
         "summary": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network.",
-        "updated_at": "2019-10-03T00:03:00Z",
+        "updated_at": "2022-07-25T18:15:14Z",
     }
diff --git a/tests/api/test_products.py b/tests/api/test_products.py
index dc05cdbc..6c32f873 100644
--- a/tests/api/test_products.py
+++ b/tests/api/test_products.py
@@ -54,10 +54,10 @@ def test_list_product_cves(client, create_user, create_cve):
     assert len(response.json) == 1
 
     assert response.json[0] == {
-        "created_at": "2018-10-09T17:29:00Z",
+        "created_at": "2018-10-09T17:29:01Z",
         "id": "CVE-2018-18074",
         "summary": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network.",
-        "updated_at": "2019-10-03T00:03:00Z",
+        "updated_at": "2022-07-25T18:15:14Z",
     }
 
 
diff --git a/tests/api/test_vendors.py b/tests/api/test_vendors.py
index 90487b97..cf5ef4da 100644
--- a/tests/api/test_vendors.py
+++ b/tests/api/test_vendors.py
@@ -50,8 +50,8 @@ def test_list_vendor_cves(client, create_user, create_cve):
     assert len(response.json) == 1
 
     assert response.json[0] == {
-        "created_at": "2018-10-09T17:29:00Z",
+        "created_at": "2018-10-09T17:29:01Z",
         "id": "CVE-2018-18074",
         "summary": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network.",
-        "updated_at": "2019-10-03T00:03:00Z",
+        "updated_at": "2022-07-25T18:15:14Z",
     }
diff --git a/tests/checks/test_cpes.py b/tests/checks/test_cpes.py
index 0d3b4d07..3e320ad4 100644
--- a/tests/checks/test_cpes.py
+++ b/tests/checks/test_cpes.py
@@ -22,7 +22,7 @@ def test_check_cpes(create_cve, handle_events, open_file):
     # The CVE creation already created vendors and products
     vendors = Vendor.query.all()
     assert len(vendors) == 2
-    assert sorted([v.name for v in vendors]) == sorted(["python-requests", "canonical"])
+    assert sorted([v.name for v in vendors]) == sorted(["canonical", "python-requests"])
 
     products = Product.query.all()
     assert len(products) == 2
@@ -44,14 +44,14 @@ def test_check_cpes(create_cve, handle_events, open_file):
     vendors = Vendor.query.all()
     assert len(vendors) == 3
     assert sorted([v.name for v in vendors]) == sorted(
-        ["python-requests", "canonical", "opencveio"]
+        ["canonical", "opencveio", "python-requests"]
     )
 
     # 1 new product
     products = Product.query.all()
     assert len(products) == 3
     assert sorted([p.name for p in products]) == sorted(
-        ["requests", "ubuntu_linux", "opencve"]
+        ["opencve", "requests", "ubuntu_linux"]
     )
 
     # Task has been created
@@ -64,10 +64,10 @@ def test_check_cpes(create_cve, handle_events, open_file):
     assert len(changes) == 1
     change = changes[0]
     assert change.task.id == task.id
-    assert convert_cpes(change.json["configurations"]) == {
-        "canonical": ["ubuntu_linux"],
-        "opencveio": ["opencve"],
-    }
+
+    configs = convert_cpes(change.json["configurations"])
+    assert configs["canonical"] == ["ubuntu_linux"]
+    assert configs["opencveio"] == ["opencve"]
 
     # Event has been created
     event = Event.query.filter_by(type="cpes").first()
diff --git a/tests/checks/test_cvss.py b/tests/checks/test_cvss.py
index 4e9bd62e..6d33af2b 100644
--- a/tests/checks/test_cvss.py
+++ b/tests/checks/test_cvss.py
@@ -30,8 +30,12 @@ def test_check_cvss(create_cve, handle_events, open_file):
     assert len(changes) == 1
     change = changes[0]
     assert change.task.id == task.id
-    assert change.json["impact"]["baseMetricV2"]["cvssV2"]["baseScore"] == new_cvss2
-    assert change.json["impact"]["baseMetricV3"]["cvssV3"]["baseScore"] == new_cvss3
+    assert (
+        change.json["metrics"]["cvssMetricV2"][0]["cvssData"]["baseScore"] == new_cvss2
+    )
+    assert (
+        change.json["metrics"]["cvssMetricV31"][0]["cvssData"]["baseScore"] == new_cvss3
+    )
 
     # Event has been created
     events = Event.query.all()
diff --git a/tests/checks/test_cwes.py b/tests/checks/test_cwes.py
index b6852b09..dbb84759 100644
--- a/tests/checks/test_cwes.py
+++ b/tests/checks/test_cwes.py
@@ -36,12 +36,7 @@ def test_check_cwes(create_cve, handle_events, open_file):
     assert len(changes) == 1
     change = changes[0]
     assert change.task.id == task.id
-    assert (
-        change.json["cve"]["problemtype"]["problemtype_data"][0]["description"][0][
-            "value"
-        ]
-        == new
-    )
+    assert change.json["weaknesses"][0]["description"][0]["value"] == new
 
     # Event has been created
     events = Event.query.all()
diff --git a/tests/checks/test_references.py b/tests/checks/test_references.py
index 4de166db..7837585b 100644
--- a/tests/checks/test_references.py
+++ b/tests/checks/test_references.py
@@ -6,7 +6,7 @@
 
 def test_check_references(create_cve, handle_events, open_file):
     cve = create_cve("CVE-2018-18074")
-    references = cve.json["cve"]["references"]["reference_data"]
+    references = cve.json["references"]
     assert len(references) == 9
     assert [r["url"] for r in references] == [
         "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
@@ -23,7 +23,7 @@ def test_check_references(create_cve, handle_events, open_file):
     # 1 reference added, 1 modified and 7 removed
     handle_events("modified_cves/CVE-2018-18074_references.json")
     cve = Cve.query.filter_by(cve_id="CVE-2018-18074").first()
-    references = cve.json["cve"]["references"]["reference_data"]
+    references = cve.json["references"]
     assert len(references) == 3
     assert sorted([r["url"] for r in references]) == sorted(
         [
@@ -43,7 +43,7 @@ def test_check_references(create_cve, handle_events, open_file):
     assert len(changes) == 1
     change = changes[0]
     assert change.task.id == task.id
-    references = change.json["cve"]["references"]["reference_data"]
+    references = change.json["references"]
     assert len(references) == 3
     assert sorted([r["url"] for r in references]) == sorted(
         [
@@ -67,7 +67,7 @@ def test_check_references(create_cve, handle_events, open_file):
     added = event.details["added"]
     assert len(added) == 1
     assert added[0]["name"] == "OPENCVE-1234"
-    assert added[0]["refsource"] == "OPENCVE"
+    assert added[0]["source"] == "OPENCVE"
     assert added[0]["tags"] == ["opencve"]
     assert added[0]["url"] == "https://www.opencve.io/"
 
@@ -88,7 +88,7 @@ def test_check_references(create_cve, handle_events, open_file):
 
 def test_check_references_with_quote(create_cve, handle_events, open_file):
     cve = create_cve("CVE-2022-3122")
-    references = cve.json["cve"]["references"]["reference_data"]
+    references = cve.json["references"]
     assert len(references) == 2
     assert [r["url"] for r in references] == [
         "https://github.com/joinia/webray.com.cn/blob/main/Clinic's-Patient-Management-System/cpmssql.md",
@@ -109,7 +109,7 @@ def test_check_references_with_quote(create_cve, handle_events, open_file):
     assert len(changes) == 1
     change = changes[0]
     assert change.task.id == task.id
-    references = change.json["cve"]["references"]["reference_data"]
+    references = change.json["references"]
     assert len(references) == 2
     assert sorted([r["url"] for r in references]) == sorted(
         [
diff --git a/tests/checks/test_summary.py b/tests/checks/test_summary.py
index cd23a551..2df2432d 100644
--- a/tests/checks/test_summary.py
+++ b/tests/checks/test_summary.py
@@ -26,14 +26,23 @@ def test_check_summary(create_cve, handle_events, open_file):
     assert len(changes) == 1
     change = changes[0]
     assert change.task.id == task.id
-    assert change.json["cve"]["description"]["description_data"][0]["value"] == new
+    assert change.json["descriptions"][0]["value"] == new
 
     # Event has been created
     events = Event.query.all()
     assert len(events) == 1
     event = events[0]
     assert event.type == "summary"
-    assert event.details == {"old": old, "new": new}
+    assert event.details == {
+        "changed": {
+            "en": {
+                "old": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network.",
+                "new": "The summary has been changed.",
+            }
+        },
+        "added": {},
+        "removed": {},
+    }
     assert event.review == False
     assert event.cve.cve_id == "CVE-2018-18074"
     assert event.change.id == change.id
diff --git a/tests/commands/test_utils.py b/tests/commands/test_utils.py
index fe2dfc71..ac945d02 100644
--- a/tests/commands/test_utils.py
+++ b/tests/commands/test_utils.py
@@ -9,7 +9,6 @@
 from opencve.models.events import Event
 from opencve.models.tasks import Task
 from opencve.models.vendors import Vendor
-from opencve.models.products import Product
 
 
 def test_create_cve(app, open_file):
@@ -21,11 +20,23 @@ def test_create_cve(app, open_file):
     # The CVE has been created
     assert cve.id == cves[0].id
     assert cve.cve_id == "CVE-2020-26116"
-    assert cve.cwes == ["CWE-116"]
+    assert cve.cwes == ["CWE-74"]
     assert sorted(cve.vendors) == sorted(
         [
+            "canonical",
+            "canonical$PRODUCT$ubuntu_linux",
+            "debian",
+            "debian$PRODUCT$debian_linux",
             "fedoraproject",
             f"fedoraproject{PRODUCT_SEPARATOR}fedora",
+            "netapp",
+            "netapp$PRODUCT$hci_compute_node",
+            "netapp$PRODUCT$hci_storage_node",
+            "netapp$PRODUCT$solidfire",
+            "opensuse",
+            "opensuse$PRODUCT$leap",
+            "oracle",
+            "oracle$PRODUCT$zfs_storage_appliance_kit",
             "python",
             f"python{PRODUCT_SEPARATOR}python",
         ]
@@ -45,11 +56,11 @@ def test_create_cve(app, open_file):
     cwes = Cwe.query.all()
     assert len(cwes) == 1
     cwe = cwes[0]
-    assert cwe.cwe_id == "CWE-116"
+    assert cwe.cwe_id == "CWE-74"
 
     # The vendors and products has been created
     vendors = Vendor.query.all()
-    assert len(vendors) == 2
+    assert len(vendors) == 7
 
     vendor_1 = Vendor.query.filter_by(name="fedoraproject").first()
     assert len(vendor_1.products) == 1
diff --git a/tests/conftest.py b/tests/conftest.py
index 1cdb28af..cbfd31bf 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -3,7 +3,7 @@
 import os
 from base64 import b64encode
 from pathlib import Path
-from unittest.mock import patch, Mock
+from unittest.mock import patch, Mock, MagicMock
 
 tests_directory = os.path.dirname(os.path.realpath(__file__))
 os.environ["OPENCVE_CONFIG"] = str(Path(tests_directory) / "opencve.cfg")
@@ -11,6 +11,7 @@
     Path(tests_directory).parent / "opencve/templates/_welcome"
 )
 
+import arrow
 import pytest
 from bs4 import BeautifulSoup
 from flask import url_for
@@ -116,7 +117,7 @@ def _create_cves(cves):
 
 
 @pytest.fixture
-def handle_events(app, open_file):
+def handle_events_old(app, open_file):
     def _handle_events(name):
         def _has_changed():
             current = Mock()
@@ -137,6 +138,40 @@ def _download_modified():
     return _handle_events
 
 
+@pytest.fixture
+def handle_events(app, open_file):
+    @patch("opencve.tasks.events.get_last_cve")
+    @patch("time.sleep", return_value=None)
+    def _handle_events(name, mock_sleep, mock_get):
+        mock_get.return_value = (
+            "CVE-2023-1234",
+            arrow.get("2023-12-01T00:00:00.000000+00:00"),
+        )
+
+        with patch("opencve.tasks.events.save_last_cve") as _:
+            with patch("opencve.tasks.events.requests") as mock_request:
+                mock_response = MagicMock()
+                mock_response.status_code = 200
+
+                data = {
+                    "resultsPerPage": 1,
+                    "startIndex": 0,
+                    "totalResults": 1,
+                    "format": "NVD_CVE",
+                    "version": "2.0",
+                    "timestamp": "2023-12-01T00:00:00.00",
+                    "vulnerabilities": [],
+                }
+                data["vulnerabilities"].append({"cve": open_file(name)})
+
+                mock_response.json.return_value = data
+                mock_request.get.return_value = mock_response
+
+                handle_events_task()
+
+    return _handle_events
+
+
 @pytest.fixture
 def create_user(app):
     def _create_user(name="user"):
diff --git a/tests/controllers/test_cves.py b/tests/controllers/test_cves.py
index 6a9e46fd..9545901a 100644
--- a/tests/controllers/test_cves.py
+++ b/tests/controllers/test_cves.py
@@ -86,7 +86,7 @@ def test_list_cves_paginated(app, create_cves):
         ({"search": "18074"}, ["CVE-2018-18074"]),
         ({"search": "2020"}, ["CVE-2020-26116", "CVE-2020-9392"]),
         ({"search": "python"}, ["CVE-2018-18074", "CVE-2020-26116"]),
-        ({"search": "canonical"}, ["CVE-2018-18074"]),
+        ({"search": "canonical"}, ["CVE-2018-18074", "CVE-2020-26116"]),
     ],
 )
 def test_search_cves(app, create_cves, args, result):
diff --git a/tests/controllers/test_reports.py b/tests/controllers/test_reports.py
index ff45b8fc..d71c8f43 100644
--- a/tests/controllers/test_reports.py
+++ b/tests/controllers/test_reports.py
@@ -66,8 +66,8 @@ def test_list_paginated(mock_send, app, handle_events, create_user):
     with app.test_request_context():
         reports = ReportController.list_items({"user_id": user.id})
         assert len(reports) == 2
-        assert reports[0].details == ["python"]
-        assert reports[1].details == ["linux"]
+        assert sorted(reports[0].details) == ["canonical", "python"]
+        assert sorted(reports[1].details) == ["canonical", "linux"]
 
         reports = ReportController.list_items({"user_id": user.id, "page": 2})
         assert len(reports) == 1
diff --git a/tests/data/cves/CVE-2018-18074.json b/tests/data/cves/CVE-2018-18074.json
index eff16c7b..8adb088a 100644
--- a/tests/data/cves/CVE-2018-18074.json
+++ b/tests/data/cves/CVE-2018-18074.json
@@ -1,141 +1,174 @@
 {
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": [{
-                "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "tags": ["Release Notes", "Third Party Advisory"],
-                "refsource": "CONFIRM"
-            }, {
-                "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
-                "name": "openSUSE-SU-2019:1754",
-                "tags": [],
-                "refsource": "SUSE"
-            }, {
-                "url": "https://access.redhat.com/errata/RHSA-2019:2035",
-                "name": "RHSA-2019:2035",
-                "tags": [],
-                "refsource": "REDHAT"
-            }, {
-                "url": "https://bugs.debian.org/910766",
-                "name": "https://bugs.debian.org/910766",
-                "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/issues/4716",
-                "name": "https://github.com/requests/requests/issues/4716",
-                "tags": ["Exploit", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/pull/4718",
-                "name": "https://github.com/requests/requests/pull/4718",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-1/",
-                "name": "USN-3790-1",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-2/",
-                "name": "USN-3790-2",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }]
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-522"
-                }]
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2018-18074",
-            "ASSIGNER": "cve@mitre.org"
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7CFBA4E8-EE3D-413C-8175-43F7E42960CA",
+              "versionEndExcluding": "2.20.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
     },
-    "impact": {
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "baseScore": 5.0,
-                "accessVector": "NETWORK",
-                "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
-                "authentication": "NONE",
-                "integrityImpact": "NONE",
-                "accessComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "confidentialityImpact": "PARTIAL"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
             },
-            "severity": "MEDIUM",
-            "impactScore": 2.9,
-            "obtainAllPrivilege": false,
-            "exploitabilityScore": 10.0,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
-        },
-        "baseMetricV3": {
-            "cvssV3": {
-                "scope": "UNCHANGED",
-                "version": "3.0",
-                "baseScore": 9.8,
-                "attackVector": "NETWORK",
-                "baseSeverity": "CRITICAL",
-                "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-                "integrityImpact": "HIGH",
-                "userInteraction": "NONE",
-                "attackComplexity": "LOW",
-                "availabilityImpact": "HIGH",
-                "privilegesRequired": "NONE",
-                "confidentialityImpact": "HIGH"
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "F7016A2A-8365-4F1A-89A2-7A19F2BCAE5B",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
             },
-            "impactScore": 5.9,
-            "exploitabilityScore": 3.9
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
+              "matchCriteriaId": "07C312A0-CD2C-4B9C-B064-6409B25C278F",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
     },
-    "publishedDate": "2018-10-09T17:29Z",
-    "configurations": {
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "2.20.0"
-            }]
-        }, {
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2019-10-03T00:03Z"
+    {
+      "lang": "es",
+      "value": "El paquete Requests antes de la versi\u00f3n 2.20.0 para Python env\u00eda una cabecera de autorizaci\u00f3n HTTP a un URI http al recibir una redirecci\u00f3n same-hostname https-to-http, lo que facilita que los atacantes remotos descibran las credenciales esnifando la red."
+    }
+  ],
+  "id": "CVE-2018-18074",
+  "lastModified": "2022-07-25T18:15:14.467",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 5.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 9.8,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "NONE",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.6,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2018-10-09T17:29:01.897",
+  "references": [
+    {
+        "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "tags": ["Release Notes", "Third Party Advisory"],
+        "source": "CONFIRM"
+    }, {
+        "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
+        "name": "openSUSE-SU-2019:1754",
+        "tags": [],
+        "source": "SUSE"
+    }, {
+        "url": "https://access.redhat.com/errata/RHSA-2019:2035",
+        "name": "RHSA-2019:2035",
+        "tags": [],
+        "source": "REDHAT"
+    }, {
+        "url": "https://bugs.debian.org/910766",
+        "name": "https://bugs.debian.org/910766",
+        "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/issues/4716",
+        "name": "https://github.com/requests/requests/issues/4716",
+        "tags": ["Exploit", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/pull/4718",
+        "name": "https://github.com/requests/requests/pull/4718",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-1/",
+        "name": "USN-3790-1",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-2/",
+        "name": "USN-3790-2",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-522"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
 }
\ No newline at end of file
diff --git a/tests/data/cves/CVE-2019-17052.json b/tests/data/cves/CVE-2019-17052.json
index db62d055..ab6f3587 100644
--- a/tests/data/cves/CVE-2019-17052.json
+++ b/tests/data/cves/CVE-2019-17052.json
@@ -1,147 +1,256 @@
 {
-    "cve" : {
-      "data_type" : "CVE",
-      "data_format" : "MITRE",
-      "data_version" : "4.0",
-      "CVE_data_meta" : {
-        "ID" : "CVE-2019-17052",
-        "ASSIGNER" : "cve@mitre.org"
-      },
-      "problemtype" : {
-        "problemtype_data" : [ {
-          "description" : [ {
-            "lang" : "en",
-            "value" : "CWE-276"
-          } ]
-        } ]
-      },
-      "references" : {
-        "reference_data" : [ {
-          "url" : "http://packetstormsecurity.com/files/155212/Slackware-Security-Advisory-Slackware-14.2-kernel-Updates.html",
-          "name" : "http://packetstormsecurity.com/files/155212/Slackware-Security-Advisory-Slackware-14.2-kernel-Updates.html",
-          "refsource" : "MISC",
-          "tags" : [ ]
-        }, {
-          "url" : "https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=2c675dab816278a1724c1e93b384c2f05a11cb31",
-          "name" : "https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=2c675dab816278a1724c1e93b384c2f05a11cb31",
-          "refsource" : "MISC",
-          "tags" : [ ]
-        }, {
-          "url" : "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0614e2b73768b502fc32a75349823356d98aae2c",
-          "name" : "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0614e2b73768b502fc32a75349823356d98aae2c",
-          "refsource" : "MISC",
-          "tags" : [ "Patch", "Vendor Advisory" ]
-        }, {
-          "url" : "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0edc3f703f7bcaf550774b5d43ab727bcd0fe06b",
-          "name" : "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0edc3f703f7bcaf550774b5d43ab727bcd0fe06b",
-          "refsource" : "MISC",
-          "tags" : [ "Patch", "Vendor Advisory" ]
-        }, {
-          "url" : "https://lists.debian.org/debian-lts-announce/2020/01/msg00013.html",
-          "name" : "[debian-lts-announce] 20200118 [SECURITY] [DLA 2068-1] linux security update",
-          "refsource" : "MLIST",
-          "tags" : [ ]
-        }, {
-          "url" : "https://lists.debian.org/debian-lts-announce/2020/03/msg00001.html",
-          "name" : "[debian-lts-announce] 20200302 [SECURITY] [DLA 2114-1] linux-4.9 security update",
-          "refsource" : "MLIST",
-          "tags" : [ ]
-        }, {
-          "url" : "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/U6JNEWGIK7QA24OIUUL67QZNJN52NB7T/",
-          "name" : "FEDORA-2019-41e28660ae",
-          "refsource" : "FEDORA",
-          "tags" : [ ]
-        }, {
-          "url" : "https://seclists.org/bugtraq/2019/Nov/11",
-          "name" : "20191108 [slackware-security] Slackware 14.2 kernel (SSA:2019-311-01)",
-          "refsource" : "BUGTRAQ",
-          "tags" : [ ]
-        }, {
-          "url" : "https://usn.ubuntu.com/4184-1/",
-          "name" : "USN-4184-1",
-          "refsource" : "UBUNTU",
-          "tags" : [ ]
-        }, {
-          "url" : "https://usn.ubuntu.com/4185-1/",
-          "name" : "USN-4185-1",
-          "refsource" : "UBUNTU",
-          "tags" : [ ]
-        }, {
-          "url" : "https://usn.ubuntu.com/4185-2/",
-          "name" : "USN-4185-2",
-          "refsource" : "UBUNTU",
-          "tags" : [ ]
-        }, {
-          "url" : "https://usn.ubuntu.com/4186-1/",
-          "name" : "USN-4186-1",
-          "refsource" : "UBUNTU",
-          "tags" : [ ]
-        }, {
-          "url" : "https://usn.ubuntu.com/4186-2/",
-          "name" : "USN-4186-2",
-          "refsource" : "UBUNTU",
-          "tags" : [ ]
-        } ]
-      },
-      "description" : {
-        "description_data" : [ {
-          "lang" : "en",
-          "value" : "ax25_create in net/ax25/af_ax25.c in the AF_AX25 network module in the Linux kernel 3.16 through 5.3.2 does not enforce CAP_NET_RAW, which means that unprivileged users can create a raw socket, aka CID-0614e2b73768."
-        } ]
-      }
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "B1AC2470-AAEC-4A2B-B144-38DD8323A647",
+              "versionEndIncluding": "5.3.2",
+              "versionStartIncluding": "3.16",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:debian:debian_linux:8.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "C11E6FB0-C8C0-4527-9AA0-CB9B316F8F43",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:29:*:*:*:*:*:*:*",
+              "matchCriteriaId": "D100F7CE-FC64-4CC6-852A-6136D72DA419",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "7A5301BF-1402-4BE0-A0F8-69FBE79BC6D6",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:19.04:*:*:*:*:*:*:*",
+              "matchCriteriaId": "CD783B0C-9246-47D9-A937-6144FE8BFF0F",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "ax25_create in net/ax25/af_ax25.c in the AF_AX25 network module in the Linux kernel 3.16 through 5.3.2 does not enforce CAP_NET_RAW, which means that unprivileged users can create a raw socket, aka CID-0614e2b73768."
     },
-    "configurations" : {
-      "CVE_data_version" : "4.0",
-      "nodes" : [ {
-        "operator" : "OR",
-        "cpe_match" : [ {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
-          "versionEndIncluding" : "5.3.2"
-        } ]
-      } ]
-    },
-    "impact" : {
-      "baseMetricV3" : {
-        "cvssV3" : {
-          "version" : "3.1",
-          "vectorString" : "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N",
-          "attackVector" : "LOCAL",
-          "attackComplexity" : "LOW",
-          "privilegesRequired" : "LOW",
-          "userInteraction" : "NONE",
-          "scope" : "UNCHANGED",
-          "confidentialityImpact" : "NONE",
-          "integrityImpact" : "LOW",
-          "availabilityImpact" : "NONE",
-          "baseScore" : 3.3,
-          "baseSeverity" : "LOW"
+    {
+      "lang": "es",
+      "value": "ax25_create en net / ax25 / af_ax25.c en el m\u00f3dulo de red AF_AX25 en el kernel de Linux versi\u00f3n 3.16 hasta la la versi\u00f3n 5.3.2 no aplica CAP_NET_RAW, lo que significa que los usuarios no privilegiados pueden crear un socket en bruto, tambi\u00e9n conocido como CID-0614e2b73768"
+    }
+  ],
+  "id": "CVE-2019-17052",
+  "lastModified": "2023-11-07T03:06:08.307",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "LOW",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "LOCAL",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 2.1,
+          "confidentialityImpact": "NONE",
+          "integrityImpact": "PARTIAL",
+          "vectorString": "AV:L/AC:L/Au:N/C:N/I:P/A:N",
+          "version": "2.0"
         },
-        "exploitabilityScore" : 1.8,
-        "impactScore" : 1.4
-      },
-      "baseMetricV2" : {
-        "cvssV2" : {
-          "version" : "2.0",
-          "vectorString" : "AV:L/AC:L/Au:N/C:N/I:P/A:N",
-          "accessVector" : "LOCAL",
-          "accessComplexity" : "LOW",
-          "authentication" : "NONE",
-          "confidentialityImpact" : "NONE",
-          "integrityImpact" : "PARTIAL",
-          "availabilityImpact" : "NONE",
-          "baseScore" : 2.1
+        "exploitabilityScore": 3.9,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "LOCAL",
+          "availabilityImpact": "NONE",
+          "baseScore": 3.3,
+          "baseSeverity": "LOW",
+          "confidentialityImpact": "NONE",
+          "integrityImpact": "LOW",
+          "privilegesRequired": "LOW",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N",
+          "version": "3.1"
         },
-        "severity" : "LOW",
-        "exploitabilityScore" : 3.9,
-        "impactScore" : 2.9,
-        "acInsufInfo" : false,
-        "obtainAllPrivilege" : false,
-        "obtainUserPrivilege" : false,
-        "obtainOtherPrivilege" : false,
-        "userInteractionRequired" : false
+        "exploitabilityScore": 1.8,
+        "impactScore": 1.4,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
       }
+    ]
+  },
+  "published": "2019-10-01T14:15:40.397",
+  "references": [
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory",
+        "VDB Entry"
+      ],
+      "url": "http://packetstormsecurity.com/files/155212/Slackware-Security-Advisory-Slackware-14.2-kernel-Updates.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Patch",
+        "Vendor Advisory"
+      ],
+      "url": "https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=2c675dab816278a1724c1e93b384c2f05a11cb31"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Patch",
+        "Vendor Advisory"
+      ],
+      "url": "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0614e2b73768b502fc32a75349823356d98aae2c"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Patch",
+        "Vendor Advisory"
+      ],
+      "url": "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0edc3f703f7bcaf550774b5d43ab727bcd0fe06b"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Third Party Advisory"
+      ],
+      "url": "https://lists.debian.org/debian-lts-announce/2020/01/msg00013.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Third Party Advisory"
+      ],
+      "url": "https://lists.debian.org/debian-lts-announce/2020/03/msg00001.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/U6JNEWGIK7QA24OIUUL67QZNJN52NB7T/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Patch",
+        "Third Party Advisory"
+      ],
+      "url": "https://seclists.org/bugtraq/2019/Nov/11"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4184-1/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4185-1/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4185-2/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4186-1/"
     },
-    "publishedDate" : "2019-10-01T14:15Z",
-    "lastModifiedDate" : "2021-01-04T22:15Z"
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4186-2/"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-276"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
 }
\ No newline at end of file
diff --git a/tests/data/cves/CVE-2019-8075.json b/tests/data/cves/CVE-2019-8075.json
index d74d0b15..ed4b2fb8 100644
--- a/tests/data/cves/CVE-2019-8075.json
+++ b/tests/data/cves/CVE-2019-8075.json
@@ -1,165 +1,337 @@
 {
-    "cve" : {
-      "data_type" : "CVE",
-      "data_format" : "MITRE",
-      "data_version" : "4.0",
-      "CVE_data_meta" : {
-        "ID" : "CVE-2019-8075",
-        "ASSIGNER" : "cve@mitre.org"
-      },
-      "problemtype" : {
-        "problemtype_data" : [ {
-          "description" : [ {
-            "lang" : "en",
-            "value" : "CWE-346"
-          } ]
-        } ]
-      },
-      "references" : {
-        "reference_data" : [ {
-          "url" : "https://helpx.adobe.com/security/products/flash-player/apsb19-30.html",
-          "name" : "https://helpx.adobe.com/security/products/flash-player/apsb19-30.html",
-          "refsource" : "CONFIRM",
-          "tags" : [ "Patch", "Vendor Advisory" ]
-        }, {
-          "url" : "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/AB2XOYF26EBHJEI6LXCBL32TGZM7UHQ4/",
-          "name" : "FEDORA-2020-10ec8aca61",
-          "refsource" : "FEDORA",
-          "tags" : [ ]
-        }, {
-          "url" : "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/S4XYJ7B6OXHZNYSA5J3DBUOFEC6WCAGW/",
-          "name" : "FEDORA-2020-3e005ce2e0",
-          "refsource" : "FEDORA",
-          "tags" : [ ]
-        }, {
-          "url" : "https://www.debian.org/security/2021/dsa-4824",
-          "name" : "DSA-4824",
-          "refsource" : "DEBIAN",
-          "tags" : [ ]
-        } ]
-      },
-      "description" : {
-        "description_data" : [ {
-          "lang" : "en",
-          "value" : "Adobe Flash Player version 32.0.0.192 and earlier versions have a Same Origin Policy Bypass vulnerability. Successful exploitation could lead to Information Disclosure in the context of the current user."
-        } ]
-      }
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:adobe:flash_player_desktop_runtime:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "1F2A52BE-3461-47DE-A522-BADFFFED7F71",
+              "versionEndIncluding": "32.0.0.207",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        },
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:apple:macos:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "387021A0-AF36-463C-A605-32EA7DAC172E",
+              "vulnerable": false
+            },
+            {
+              "criteria": "cpe:2.3:o:linux:linux_kernel:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "703AF700-7A70-47E2-BC3A-7FD03B3CA9C1",
+              "vulnerable": false
+            },
+            {
+              "criteria": "cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "A2572D17-1DE6-457B-99CC-64AFD54487EA",
+              "vulnerable": false
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ],
+      "operator": "AND"
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:adobe:flash_player:*:*:*:*:*:chrome:*:*",
+              "matchCriteriaId": "A04A161F-50A8-497A-BBEA-464D2839AF5C",
+              "versionEndIncluding": "32.0.0.207",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        },
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:apple:macos:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "387021A0-AF36-463C-A605-32EA7DAC172E",
+              "vulnerable": false
+            },
+            {
+              "criteria": "cpe:2.3:o:google:chrome_os:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "D32ACF6F-5FF7-4815-8EAD-4719F5FC9B79",
+              "vulnerable": false
+            },
+            {
+              "criteria": "cpe:2.3:o:linux:linux_kernel:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "703AF700-7A70-47E2-BC3A-7FD03B3CA9C1",
+              "vulnerable": false
+            },
+            {
+              "criteria": "cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "A2572D17-1DE6-457B-99CC-64AFD54487EA",
+              "vulnerable": false
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ],
+      "operator": "AND"
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:adobe:flash_player:*:*:*:*:*:edge:*:*",
+              "matchCriteriaId": "F50E7428-6FFC-487F-ABC4-FC04D578CE4E",
+              "versionEndIncluding": "32.0.0.207",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:adobe:flash_player:*:*:*:*:*:internet_explorer_11:*:*",
+              "matchCriteriaId": "FB18C115-339C-45FC-8780-4EBDECC71877",
+              "versionEndIncluding": "32.0.0.207",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        },
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:microsoft:windows_10:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "21540673-614A-4D40-8BD7-3F07723803B0",
+              "vulnerable": false
+            },
+            {
+              "criteria": "cpe:2.3:o:microsoft:windows_8.1:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "E93068DB-549B-45AB-8E5C-00EB5D8B5CF8",
+              "vulnerable": false
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ],
+      "operator": "AND"
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:google:chrome:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "56F7F1FE-1A2F-4DE7-B088-3B1356C02DE0",
+              "versionEndExcluding": "87.0.4280.66",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        },
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:linux:linux_kernel:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "703AF700-7A70-47E2-BC3A-7FD03B3CA9C1",
+              "vulnerable": false
+            },
+            {
+              "criteria": "cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "A2572D17-1DE6-457B-99CC-64AFD54487EA",
+              "vulnerable": false
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ],
+      "operator": "AND"
     },
-    "configurations" : {
-      "CVE_data_version" : "4.0",
-      "nodes" : [ {
-        "operator" : "AND",
-        "children" : [ {
-          "operator" : "OR",
-          "cpe_match" : [ {
-            "vulnerable" : true,
-            "cpe23Uri" : "cpe:2.3:a:adobe:flash_player_desktop_runtime:*:*:*:*:*:*:*:*",
-            "versionEndIncluding" : "32.0.0.207"
-          } ]
-        }, {
-          "operator" : "OR",
-          "cpe_match" : [ {
-            "vulnerable" : false,
-            "cpe23Uri" : "cpe:2.3:o:apple:mac_os:-:*:*:*:*:*:*:*"
-          }, {
-            "vulnerable" : false,
-            "cpe23Uri" : "cpe:2.3:o:linux:linux_kernel:-:*:*:*:*:*:*:*"
-          }, {
-            "vulnerable" : false,
-            "cpe23Uri" : "cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:*"
-          } ]
-        } ]
-      }, {
-        "operator" : "AND",
-        "children" : [ {
-          "operator" : "OR",
-          "cpe_match" : [ {
-            "vulnerable" : true,
-            "cpe23Uri" : "cpe:2.3:a:adobe:flash_player:*:*:*:*:*:chrome:*:*",
-            "versionEndIncluding" : "32.0.0.207"
-          } ]
-        }, {
-          "operator" : "OR",
-          "cpe_match" : [ {
-            "vulnerable" : false,
-            "cpe23Uri" : "cpe:2.3:o:apple:mac_os:-:*:*:*:*:*:*:*"
-          }, {
-            "vulnerable" : false,
-            "cpe23Uri" : "cpe:2.3:o:google:chrome_os:-:*:*:*:*:*:*:*"
-          }, {
-            "vulnerable" : false,
-            "cpe23Uri" : "cpe:2.3:o:linux:linux_kernel:-:*:*:*:*:*:*:*"
-          }, {
-            "vulnerable" : false,
-            "cpe23Uri" : "cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:*"
-          } ]
-        } ]
-      }, {
-        "operator" : "AND",
-        "children" : [ {
-          "operator" : "OR",
-          "cpe_match" : [ {
-            "vulnerable" : true,
-            "cpe23Uri" : "cpe:2.3:a:adobe:flash_player:*:*:*:*:*:edge:*:*",
-            "versionEndIncluding" : "32.0.0.207"
-          }, {
-            "vulnerable" : true,
-            "cpe23Uri" : "cpe:2.3:a:adobe:flash_player:*:*:*:*:*:internet_explorer_11:*:*",
-            "versionEndIncluding" : "32.0.0.207"
-          } ]
-        }, {
-          "operator" : "OR",
-          "cpe_match" : [ {
-            "vulnerable" : false,
-            "cpe23Uri" : "cpe:2.3:o:microsoft:windows_10:-:*:*:*:*:*:*:*"
-          }, {
-            "vulnerable" : false,
-            "cpe23Uri" : "cpe:2.3:o:microsoft:windows_8.1:-:*:*:*:*:*:*:*"
-          } ]
-        } ]
-      } ]
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:google:chrome:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "75B848C6-40C7-4720-BB77-9D87BA0717A4",
+              "versionEndExcluding": "87.0.4280.67",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        },
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:apple:macos:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "387021A0-AF36-463C-A605-32EA7DAC172E",
+              "vulnerable": false
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ],
+      "operator": "AND"
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:debian:debian_linux:10.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "07B237A9-69A3-4A9C-9DA0-4E06BD37AE73",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
     },
-    "impact" : {
-      "baseMetricV3" : {
-        "cvssV3" : {
-          "version" : "3.1",
-          "vectorString" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
-          "attackVector" : "NETWORK",
-          "attackComplexity" : "LOW",
-          "privilegesRequired" : "NONE",
-          "userInteraction" : "NONE",
-          "scope" : "UNCHANGED",
-          "confidentialityImpact" : "HIGH",
-          "integrityImpact" : "NONE",
-          "availabilityImpact" : "NONE",
-          "baseScore" : 7.5,
-          "baseSeverity" : "HIGH"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:32:*:*:*:*:*:*:*",
+              "matchCriteriaId": "36D96259-24BD-44E2-96D9-78CE1D41F956",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:33:*:*:*:*:*:*:*",
+              "matchCriteriaId": "E460AA51-FCDA-46B9-AE97-E6676AA5E194",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "Adobe Flash Player version 32.0.0.192 and earlier versions have a Same Origin Policy Bypass vulnerability. Successful exploitation could lead to Information Disclosure in the context of the current user."
+    },
+    {
+      "lang": "es",
+      "value": "Adobe Flash Player versi\u00f3n 32.0.0.192 y versiones anteriores, presentan una vulnerabilidad de Omisi\u00f3n de la Pol\u00edtica del Mismo Origen. Su explotaci\u00f3n con \u00e9xito podr\u00eda conllevar a una divulgaci\u00f3n de informaci\u00f3n en el contexto del usuario actual."
+    }
+  ],
+  "id": "CVE-2019-8075",
+  "lastModified": "2023-11-07T03:13:27.363",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 5.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
         },
-        "exploitabilityScore" : 3.9,
-        "impactScore" : 3.6
-      },
-      "baseMetricV2" : {
-        "cvssV2" : {
-          "version" : "2.0",
-          "vectorString" : "AV:N/AC:L/Au:N/C:P/I:N/A:N",
-          "accessVector" : "NETWORK",
-          "accessComplexity" : "LOW",
-          "authentication" : "NONE",
-          "confidentialityImpact" : "PARTIAL",
-          "integrityImpact" : "NONE",
-          "availabilityImpact" : "NONE",
-          "baseScore" : 5.0
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 7.5,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "NONE",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
+          "version": "3.1"
         },
-        "severity" : "MEDIUM",
-        "exploitabilityScore" : 10.0,
-        "impactScore" : 2.9,
-        "acInsufInfo" : false,
-        "obtainAllPrivilege" : false,
-        "obtainUserPrivilege" : false,
-        "obtainOtherPrivilege" : false,
-        "userInteractionRequired" : false
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.6,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
       }
+    ]
+  },
+  "published": "2019-09-27T16:15:10.953",
+  "references": [
+    {
+      "source": "psirt@adobe.com",
+      "tags": [
+        "Release Notes",
+        "Third Party Advisory"
+      ],
+      "url": "https://chromereleases.googleblog.com/2020/11/stable-channel-update-for-desktop_17.html"
+    },
+    {
+      "source": "psirt@adobe.com",
+      "tags": [
+        "Mailing List",
+        "Third Party Advisory"
+      ],
+      "url": "https://crbug.com/945997"
+    },
+    {
+      "source": "psirt@adobe.com",
+      "tags": [
+        "Patch",
+        "Vendor Advisory"
+      ],
+      "url": "https://helpx.adobe.com/security/products/flash-player/apsb19-30.html"
+    },
+    {
+      "source": "psirt@adobe.com",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/AB2XOYF26EBHJEI6LXCBL32TGZM7UHQ4/"
+    },
+    {
+      "source": "psirt@adobe.com",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/S4XYJ7B6OXHZNYSA5J3DBUOFEC6WCAGW/"
     },
-    "publishedDate" : "2019-09-27T16:15Z",
-    "lastModifiedDate" : "2021-01-02T16:15Z"
+    {
+      "source": "psirt@adobe.com",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://www.debian.org/security/2021/dsa-4824"
+    }
+  ],
+  "sourceIdentifier": "psirt@adobe.com",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "NVD-CWE-noinfo"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
 }
\ No newline at end of file
diff --git a/tests/data/cves/CVE-2020-26116.json b/tests/data/cves/CVE-2020-26116.json
index 3727fd72..d01c1db4 100644
--- a/tests/data/cves/CVE-2020-26116.json
+++ b/tests/data/cves/CVE-2020-26116.json
@@ -1,159 +1,332 @@
 {
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": [{
-                "url": "http://lists.opensuse.org/opensuse-security-announce/2020-11/msg00027.html",
-                "name": "openSUSE-SU-2020:1859",
-                "tags": [],
-                "refsource": "SUSE"
-            }, {
-                "url": "https://bugs.python.org/issue39603",
-                "name": "https://bugs.python.org/issue39603",
-                "tags": ["Exploit", "Issue Tracking", "Patch", "Vendor Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://lists.debian.org/debian-lts-announce/2020/11/msg00032.html",
-                "name": "[debian-lts-announce] 20201119 [SECURITY] [DLA 2456-1] python3.5 security update",
-                "tags": [],
-                "refsource": "MLIST"
-            }, {
-                "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/BW4GCLQISJCOEGQNIMVUZDQMIY6RR6CC/",
-                "name": "FEDORA-2020-221823ebdd",
-                "tags": ["Third Party Advisory"],
-                "refsource": "FEDORA"
-            }, {
-                "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/HDQ2THWU4GPV4Y5H5WW5PFMSWXL2CRFD/",
-                "name": "FEDORA-2020-e33acdea18",
-                "tags": [],
-                "refsource": "FEDORA"
-            }, {
-                "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/JWMAVY4T4257AZHTF2RZJKNJNSJFY24O/",
-                "name": "FEDORA-2020-887d3fa26f",
-                "tags": [],
-                "refsource": "FEDORA"
-            }, {
-                "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/OXI72HIHMXCQFWTULUXDG7VDA2BCYL4Y/",
-                "name": "FEDORA-2020-d30881c970",
-                "tags": [],
-                "refsource": "FEDORA"
-            }, {
-                "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/QOX7DGMMWWL6POCRYGAUCISOLR2IG3XV/",
-                "name": "FEDORA-2020-d42cb01973",
-                "tags": [],
-                "refsource": "FEDORA"
-            }, {
-                "url": "https://python-security.readthedocs.io/vuln/http-header-injection-method.html",
-                "name": "https://python-security.readthedocs.io/vuln/http-header-injection-method.html",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://security.netapp.com/advisory/ntap-20201023-0001/",
-                "name": "https://security.netapp.com/advisory/ntap-20201023-0001/",
-                "tags": [],
-                "refsource": "CONFIRM"
-            }, {
-                "url": "https://usn.ubuntu.com/4581-1/",
-                "name": "USN-4581-1",
-                "tags": [],
-                "refsource": "UBUNTU"
-            }]
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "http.client in Python 3.x before 3.5.10, 3.6.x before 3.6.12, 3.7.x before 3.7.9, and 3.8.x before 3.8.5 allows CRLF injection if the attacker controls the HTTP request method, as demonstrated by inserting CR and LF control characters in the first argument of HTTPConnection.request."
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-116"
-                }]
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2020-26116",
-            "ASSIGNER": "cve@mitre.org"
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "0DCA021D-A322-4442-A030-B723D8F8C7E5",
+              "versionEndExcluding": "3.5.10",
+              "versionStartIncluding": "3.0.0",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7EB6A6FC-6C82-4543-8DAA-96FF2BACDB5C",
+              "versionEndExcluding": "3.6.12",
+              "versionStartIncluding": "3.6.0",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "045171F0-A76D-4385-B2AE-51479B425C45",
+              "versionEndExcluding": "3.7.9",
+              "versionStartIncluding": "3.7.0",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "9065C407-4FE5-4895-84FC-21B706581C0F",
+              "versionEndExcluding": "3.8.5",
+              "versionStartIncluding": "3.8.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
     },
-    "impact": {
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "baseScore": 6.4,
-                "accessVector": "NETWORK",
-                "vectorString": "AV:N/AC:L/Au:N/C:P/I:P/A:N",
-                "authentication": "NONE",
-                "integrityImpact": "PARTIAL",
-                "accessComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "confidentialityImpact": "PARTIAL"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:31:*:*:*:*:*:*:*",
+              "matchCriteriaId": "80F0FA5D-8D3B-4C0E-81E2-87998286AF33",
+              "vulnerable": true
             },
-            "severity": "MEDIUM",
-            "acInsufInfo": false,
-            "impactScore": 4.9,
-            "obtainAllPrivilege": false,
-            "exploitabilityScore": 10.0,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
-        },
-        "baseMetricV3": {
-            "cvssV3": {
-                "scope": "CHANGED",
-                "version": "3.1",
-                "baseScore": 7.2,
-                "attackVector": "NETWORK",
-                "baseSeverity": "HIGH",
-                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N",
-                "integrityImpact": "LOW",
-                "userInteraction": "NONE",
-                "attackComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "privilegesRequired": "NONE",
-                "confidentialityImpact": "LOW"
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:32:*:*:*:*:*:*:*",
+              "matchCriteriaId": "36D96259-24BD-44E2-96D9-78CE1D41F956",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:33:*:*:*:*:*:*:*",
+              "matchCriteriaId": "E460AA51-FCDA-46B9-AE97-E6676AA5E194",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:12.04:*:*:*:-:*:*:*",
+              "matchCriteriaId": "CB66DB75-2B16-4EBF-9B93-CE49D8086E41",
+              "vulnerable": true
             },
-            "impactScore": 2.7,
-            "exploitabilityScore": 3.9
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "7A5301BF-1402-4BE0-A0F8-69FBE79BC6D6",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:netapp:solidfire:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "A6E9EF0C-AFA8-4F7B-9FDC-1E0F7C26E737",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:h:netapp:hci_compute_node:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "AD7447BC-F315-4298-A822-549942FC118B",
+              "vulnerable": false
+            },
+            {
+              "criteria": "cpe:2.3:h:netapp:hci_storage_node:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "02DEB4FB-A21D-4CB1-B522-EEE5093E8521",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:debian:debian_linux:9.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "DEECE5FC-CACF-4496-A3E7-164736409252",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:oracle:zfs_storage_appliance_kit:8.8:*:*:*:*:*:*:*",
+              "matchCriteriaId": "D3E503FB-6279-4D4A-91D8-E237ECF9D2B0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:opensuse:leap:15.1:*:*:*:*:*:*:*",
+              "matchCriteriaId": "B620311B-34A3-48A6-82DF-6F078D7A4493",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "http.client in Python 3.x before 3.5.10, 3.6.x before 3.6.12, 3.7.x before 3.7.9, and 3.8.x before 3.8.5 allows CRLF injection if the attacker controls the HTTP request method, as demonstrated by inserting CR and LF control characters in the first argument of HTTPConnection.request."
+    },
+    {
+      "lang": "es",
+      "value": "http.client en Python 3.x antes de la versi\u00f3n 3.5.10, 3.6.x antes de la versi\u00f3n 3.6.12, 3.7.x antes de la versi\u00f3n 3.7.9, y 3.8.x antes de la versi\u00f3n 3.8.5 permite la inyecci\u00f3n de CRLF si el atacante controla el m\u00e9todo de petici\u00f3n HTTP, como se demuestra insertando caracteres de control CR y LF en el primer argumento de HTTPConnection.request"
+    }
+  ],
+  "id": "CVE-2020-26116",
+  "lastModified": "2023-11-07T03:20:30.150",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 6.4,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "PARTIAL",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:P/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 4.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 7.2,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "LOW",
+          "integrityImpact": "LOW",
+          "privilegesRequired": "NONE",
+          "scope": "CHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 2.7,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2020-09-27T04:15:11.587",
+  "references": [
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Third Party Advisory"
+      ],
+      "url": "http://lists.opensuse.org/opensuse-security-announce/2020-11/msg00027.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Exploit",
+        "Issue Tracking",
+        "Patch",
+        "Vendor Advisory"
+      ],
+      "url": "https://bugs.python.org/issue39603"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Third Party Advisory"
+      ],
+      "url": "https://lists.debian.org/debian-lts-announce/2020/11/msg00032.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.debian.org/debian-lts-announce/2023/05/msg00024.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/BW4GCLQISJCOEGQNIMVUZDQMIY6RR6CC/"
     },
-    "publishedDate": "2020-09-27T04:15Z",
-    "configurations": {
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "3.5.10",
-                "versionStartIncluding": "3.0.0"
-            }, {
-                "cpe23Uri": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "3.6.12",
-                "versionStartIncluding": "3.6.0"
-            }, {
-                "cpe23Uri": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "3.7.9",
-                "versionStartIncluding": "3.7.0"
-            }, {
-                "cpe23Uri": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "3.8.5",
-                "versionStartIncluding": "3.8.0"
-            }]
-        }, {
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:o:fedoraproject:fedora:33:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2020-11-19T07:15Z"
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/HDQ2THWU4GPV4Y5H5WW5PFMSWXL2CRFD/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/JWMAVY4T4257AZHTF2RZJKNJNSJFY24O/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/OXI72HIHMXCQFWTULUXDG7VDA2BCYL4Y/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/QOX7DGMMWWL6POCRYGAUCISOLR2IG3XV/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Patch",
+        "Third Party Advisory"
+      ],
+      "url": "https://python-security.readthedocs.io/vuln/http-header-injection-method.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://security.gentoo.org/glsa/202101-18"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://security.netapp.com/advisory/ntap-20201023-0001/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4581-1/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Patch",
+        "Third Party Advisory"
+      ],
+      "url": "https://www.oracle.com/security-alerts/cpuoct2021.html"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-74"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
 }
\ No newline at end of file
diff --git a/tests/data/cves/CVE-2020-27781.json b/tests/data/cves/CVE-2020-27781.json
index 99761d34..fbef2a5d 100644
--- a/tests/data/cves/CVE-2020-27781.json
+++ b/tests/data/cves/CVE-2020-27781.json
@@ -1,110 +1,195 @@
 {
-    "cve" : {
-      "data_type" : "CVE",
-      "data_format" : "MITRE",
-      "data_version" : "4.0",
-      "CVE_data_meta" : {
-        "ID" : "CVE-2020-27781",
-        "ASSIGNER" : "cve@mitre.org"
-      },
-      "problemtype" : {
-        "problemtype_data" : [ {
-          "description" : [ {
-            "lang" : "en",
-            "value" : "CWE-522"
-          } ]
-        } ]
-      },
-      "references" : {
-        "reference_data" : [ {
-          "url" : "https://bugzilla.redhat.com/show_bug.cgi?id=1900109",
-          "name" : "https://bugzilla.redhat.com/show_bug.cgi?id=1900109",
-          "refsource" : "MISC",
-          "tags" : [ "Issue Tracking", "Vendor Advisory" ]
-        }, {
-          "url" : "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/ZJ7FFROL25FYRL6FMI33VRKOD74LINRP/",
-          "name" : "FEDORA-2020-fcafbe7225",
-          "refsource" : "FEDORA",
-          "tags" : [ ]
-        } ]
-      },
-      "description" : {
-        "description_data" : [ {
-          "lang" : "en",
-          "value" : "User credentials can be manipulated and stolen by Native CephFS consumers of OpenStack Manila, resulting in potential privilege escalation. An Open Stack Manila user can request access to a share to an arbitrary cephx user, including existing users. The access key is retrieved via the interface drivers. Then, all users of the requesting OpenStack project can view the access key. This enables the attacker to target any resource that the user has access to. This can be done to even \"admin\" users, compromising the ceph administrator. This flaw affects Ceph versions prior to 14.2.16, 15.x prior to 15.2.8, and 16.x prior to 16.2.0."
-        } ]
-      }
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:redhat:ceph:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "30CAD7E4-1F44-43FA-9825-1EC1EF6187AB",
+              "versionEndExcluding": "14.2.16",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:redhat:ceph:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "29C89901-90B8-4354-94A8-6AE6B5FAED5C",
+              "versionEndExcluding": "15.2.8",
+              "versionStartIncluding": "15.0.0",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:redhat:ceph:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "EBB55C92-9964-4BDF-9C61-DD3A4091BACC",
+              "versionEndExcluding": "16.2.0",
+              "versionStartIncluding": "16.0.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:redhat:ceph_storage:2.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "D07DF15E-FE6B-4DAF-99BB-2147CF7D7EEA",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:redhat:ceph_storage:3.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "516F4E8E-ED2F-4282-9DAB-D8B378F61258",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:redhat:ceph_storage:4.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "D6E54096-5D45-4CB2-AC9A-DDB55BF2B94C",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:redhat:openshift_container_platform:4.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "932D137F-528B-4526-9A89-CD59FA1AB0FE",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:redhat:openstack_platform:13.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "C52600BF-9E87-4CD2-91F3-685AFE478C1E",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
     },
-    "configurations" : {
-      "CVE_data_version" : "4.0",
-      "nodes" : [ {
-        "operator" : "OR",
-        "cpe_match" : [ {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:a:redhat:ceph:*:*:*:*:*:*:*:*",
-          "versionEndExcluding" : "16.2.0"
-        } ]
-      }, {
-        "operator" : "OR",
-        "cpe_match" : [ {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:a:redhat:ceph_storage:2.0:*:*:*:*:*:*:*"
-        }, {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:a:redhat:ceph_storage:3.0:*:*:*:*:*:*:*"
-        }, {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:a:redhat:ceph_storage:4.0:*:*:*:*:*:*:*"
-        }, {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:a:redhat:openshift_container_platform:4.0:*:*:*:*:*:*:*"
-        }, {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:a:redhat:openstack_platform:13.0:*:*:*:*:*:*:*"
-        } ]
-      } ]
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:33:*:*:*:*:*:*:*",
+              "matchCriteriaId": "E460AA51-FCDA-46B9-AE97-E6676AA5E194",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "User credentials can be manipulated and stolen by Native CephFS consumers of OpenStack Manila, resulting in potential privilege escalation. An Open Stack Manila user can request access to a share to an arbitrary cephx user, including existing users. The access key is retrieved via the interface drivers. Then, all users of the requesting OpenStack project can view the access key. This enables the attacker to target any resource that the user has access to. This can be done to even \"admin\" users, compromising the ceph administrator. This flaw affects Ceph versions prior to 14.2.16, 15.x prior to 15.2.8, and 16.x prior to 16.2.0."
     },
-    "impact" : {
-      "baseMetricV3" : {
-        "cvssV3" : {
-          "version" : "3.1",
-          "vectorString" : "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N",
-          "attackVector" : "LOCAL",
-          "attackComplexity" : "LOW",
-          "privilegesRequired" : "LOW",
-          "userInteraction" : "NONE",
-          "scope" : "UNCHANGED",
-          "confidentialityImpact" : "HIGH",
-          "integrityImpact" : "HIGH",
-          "availabilityImpact" : "NONE",
-          "baseScore" : 7.1,
-          "baseSeverity" : "HIGH"
+    {
+      "lang": "es",
+      "value": "Las credenciales de un usuario pueden ser manipuladas y robadas por consumidores de Native CephFS de OpenStack Manila, resultando en una posible escalada de privilegios. Un usuario de Open Stack Manila puede requerir acceso a un recurso compartido para un usuario cephx arbitrario, incluyendo los usuarios existentes. La clave de acceso se recupera por medio de los controladores de interfaz. Luego, todos los usuarios del proyecto de OpenStack solicitante pueden visualizar la clave de acceso. Esto permite a un atacante apuntar a cualquier recurso al que el usuario tenga acceso. Esto puede ser realizado inclusive para usuarios \"admin\", comprometiendo al administrador de ceph. Este fallo afecta a Ceph versiones anteriores a 14.2.16, versiones 15.x anteriores a 15.2.8, y versiones 16.x anteriores a 16.2.0."
+    }
+  ],
+  "id": "CVE-2020-27781",
+  "lastModified": "2023-11-07T03:21:00.317",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "LOW",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "LOCAL",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 3.6,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "PARTIAL",
+          "vectorString": "AV:L/AC:L/Au:N/C:P/I:P/A:N",
+          "version": "2.0"
         },
-        "exploitabilityScore" : 1.8,
-        "impactScore" : 5.2
-      },
-      "baseMetricV2" : {
-        "cvssV2" : {
-          "version" : "2.0",
-          "vectorString" : "AV:L/AC:L/Au:N/C:P/I:P/A:N",
-          "accessVector" : "LOCAL",
-          "accessComplexity" : "LOW",
-          "authentication" : "NONE",
-          "confidentialityImpact" : "PARTIAL",
-          "integrityImpact" : "PARTIAL",
-          "availabilityImpact" : "NONE",
-          "baseScore" : 3.6
+        "exploitabilityScore": 3.9,
+        "impactScore": 4.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "LOCAL",
+          "availabilityImpact": "NONE",
+          "baseScore": 7.1,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "HIGH",
+          "privilegesRequired": "LOW",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N",
+          "version": "3.1"
         },
-        "severity" : "LOW",
-        "exploitabilityScore" : 3.9,
-        "impactScore" : 4.9,
-        "acInsufInfo" : false,
-        "obtainAllPrivilege" : false,
-        "obtainUserPrivilege" : false,
-        "obtainOtherPrivilege" : false,
-        "userInteractionRequired" : false
+        "exploitabilityScore": 1.8,
+        "impactScore": 5.2,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
       }
+    ]
+  },
+  "published": "2020-12-18T21:15:12.660",
+  "references": [
+    {
+      "source": "secalert@redhat.com",
+      "tags": [
+        "Issue Tracking",
+        "Vendor Advisory"
+      ],
+      "url": "https://bugzilla.redhat.com/show_bug.cgi?id=1900109"
+    },
+    {
+      "source": "secalert@redhat.com",
+      "url": "https://lists.debian.org/debian-lts-announce/2023/10/msg00034.html"
+    },
+    {
+      "source": "secalert@redhat.com",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/ZJ7FFROL25FYRL6FMI33VRKOD74LINRP/"
+    },
+    {
+      "source": "secalert@redhat.com",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://security.gentoo.org/glsa/202105-39"
+    }
+  ],
+  "sourceIdentifier": "secalert@redhat.com",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-522"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
     },
-    "publishedDate" : "2020-12-18T21:15Z",
-    "lastModifiedDate" : "2021-01-03T03:15Z"
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-522"
+        }
+      ],
+      "source": "53f830b8-0a3f-465b-8143-3b8a9948e749",
+      "type": "Secondary"
+    }
+  ]
 }
\ No newline at end of file
diff --git a/tests/data/cves/CVE-2020-29660.json b/tests/data/cves/CVE-2020-29660.json
index 04773893..63691115 100644
--- a/tests/data/cves/CVE-2020-29660.json
+++ b/tests/data/cves/CVE-2020-29660.json
@@ -1,111 +1,399 @@
 {
-    "cve" : {
-      "data_type" : "CVE",
-      "data_format" : "MITRE",
-      "data_version" : "4.0",
-      "CVE_data_meta" : {
-        "ID" : "CVE-2020-29660",
-        "ASSIGNER" : "cve@mitre.org"
-      },
-      "problemtype" : {
-        "problemtype_data" : [ {
-          "description" : [ {
-            "lang" : "en",
-            "value" : "CWE-667"
-          }, {
-            "lang" : "en",
-            "value" : "CWE-416"
-          } ]
-        } ]
-      },
-      "references" : {
-        "reference_data" : [ {
-          "url" : "http://www.openwall.com/lists/oss-security/2020/12/10/1",
-          "name" : "[oss-security] 20201210 2 kernel issues",
-          "refsource" : "MLIST",
-          "tags" : [ "Mailing List", "Patch", "Third Party Advisory" ]
-        }, {
-          "url" : "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c8bcd9c5be24fb9e6132e97da5a35e55a83e36b9",
-          "name" : "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c8bcd9c5be24fb9e6132e97da5a35e55a83e36b9",
-          "refsource" : "MISC",
-          "tags" : [ "Exploit", "Patch", "Vendor Advisory" ]
-        }, {
-          "url" : "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/BOB25SU6XUL4TNP7KB63WNZSYTIYFDPP/",
-          "name" : "FEDORA-2020-bc0cc81a7a",
-          "refsource" : "FEDORA",
-          "tags" : [ "Third Party Advisory" ]
-        }, {
-          "url" : "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/MZ7OAKAEFAXQRGBZK4LYUWINCD3D2XCL/",
-          "name" : "FEDORA-2020-b732958765",
-          "refsource" : "FEDORA",
-          "tags" : [ "Third Party Advisory" ]
-        } ]
-      },
-      "description" : {
-        "description_data" : [ {
-          "lang" : "en",
-          "value" : "A locking inconsistency issue was discovered in the tty subsystem of the Linux kernel through 5.9.13. drivers/tty/tty_io.c and drivers/tty/tty_jobctrl.c may allow a read-after-free attack against TIOCGSID, aka CID-c8bcd9c5be24."
-        } ]
-      }
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "64B92439-A36E-4A51-B34C-52E926DB908E",
+              "versionEndIncluding": "5.9.13",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:32:*:*:*:*:*:*:*",
+              "matchCriteriaId": "36D96259-24BD-44E2-96D9-78CE1D41F956",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:33:*:*:*:*:*:*:*",
+              "matchCriteriaId": "E460AA51-FCDA-46B9-AE97-E6676AA5E194",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:debian:debian_linux:9.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "DEECE5FC-CACF-4496-A3E7-164736409252",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:debian:debian_linux:10.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "07B237A9-69A3-4A9C-9DA0-4E06BD37AE73",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:netapp:active_iq_unified_manager:-:*:*:*:*:vmware_vsphere:*:*",
+              "matchCriteriaId": "3A756737-1CC4-42C2-A4DF-E1C893B4E2D5",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:broadcom:fabric_operating_system:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "046FB51E-B768-44D3-AEB5-D857145CA840",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:netapp:solidfire_baseboard_management_controller_firmware:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "FB9B8171-F6CA-427D-81E0-6536D3BBFA8D",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        },
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:h:netapp:solidfire_baseboard_management_controller:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "090AA6F4-4404-4E26-82AB-C3A22636F276",
+              "vulnerable": false
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ],
+      "operator": "AND"
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:netapp:h410c_firmware:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "234DEFE0-5CE5-4B0A-96B8-5D227CB8ED31",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        },
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:h:netapp:h410c:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "CDDF61B7-EC5C-467C-B710-B89F502CD04F",
+              "vulnerable": false
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ],
+      "operator": "AND"
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:netapp:a700s_firmware:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "FDD92BFA-9117-4E6E-A13F-ED064B4B7284",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        },
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:h:netapp:a700s:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "4B7DA42F-5D64-4967-A2D4-6210FE507841",
+              "vulnerable": false
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ],
+      "operator": "AND"
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:netapp:8300_firmware:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "4E73901F-666D-4D8B-BDFD-93DD2F70C74B",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        },
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:h:netapp:8300:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "D0FD5AED-42CF-4918-B32C-D675738EF15C",
+              "vulnerable": false
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ],
+      "operator": "AND"
     },
-    "configurations" : {
-      "CVE_data_version" : "4.0",
-      "nodes" : [ {
-        "operator" : "OR",
-        "cpe_match" : [ {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:o:fedoraproject:fedora:32:*:*:*:*:*:*:*"
-        }, {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:o:fedoraproject:fedora:33:*:*:*:*:*:*:*"
-        }, {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
-          "versionEndIncluding" : "5.9.13"
-        } ]
-      } ]
-    },
-    "impact" : {
-      "baseMetricV3" : {
-        "cvssV3" : {
-          "version" : "3.1",
-          "vectorString" : "CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N",
-          "attackVector" : "LOCAL",
-          "attackComplexity" : "LOW",
-          "privilegesRequired" : "HIGH",
-          "userInteraction" : "NONE",
-          "scope" : "UNCHANGED",
-          "confidentialityImpact" : "HIGH",
-          "integrityImpact" : "NONE",
-          "availabilityImpact" : "NONE",
-          "baseScore" : 4.4,
-          "baseSeverity" : "MEDIUM"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:netapp:8700_firmware:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "34B25BEF-8708-4E2C-8BA6-EBCD5267EB04",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         },
-        "exploitabilityScore" : 0.8,
-        "impactScore" : 3.6
-      },
-      "baseMetricV2" : {
-        "cvssV2" : {
-          "version" : "2.0",
-          "vectorString" : "AV:L/AC:L/Au:N/C:P/I:N/A:N",
-          "accessVector" : "LOCAL",
-          "accessComplexity" : "LOW",
-          "authentication" : "NONE",
-          "confidentialityImpact" : "PARTIAL",
-          "integrityImpact" : "NONE",
-          "availabilityImpact" : "NONE",
-          "baseScore" : 2.1
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:h:netapp:8700:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "CE0F11D2-B5D9-46B4-BFC5-C86BC87D516A",
+              "vulnerable": false
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ],
+      "operator": "AND"
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:netapp:a400_firmware:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "04E3BD77-8915-4FFC-8483-5DB5D610F829",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        },
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:h:netapp:a400:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "97E94ECB-BB51-4364-BEDD-8648C193196F",
+              "vulnerable": false
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ],
+      "operator": "AND"
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "A locking inconsistency issue was discovered in the tty subsystem of the Linux kernel through 5.9.13. drivers/tty/tty_io.c and drivers/tty/tty_jobctrl.c may allow a read-after-free attack against TIOCGSID, aka CID-c8bcd9c5be24."
+    },
+    {
+      "lang": "es",
+      "value": "Se detect\u00f3 un problema de inconsistencia de bloqueo en el subsistema tty del kernel de Linux versiones hasta 5.9.13. Los archivos drivers/tty/tty_io.c y drivers/tty/tty_jobctrl.c pueden permitir un ataque de lectura de la memoria previamente liberada contra TIOCGSID, tambi\u00e9n se conoce como CID-c8bcd9c5be24"
+    }
+  ],
+  "id": "CVE-2020-29660",
+  "lastModified": "2023-11-07T03:21:33.123",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "LOW",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "LOCAL",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 2.1,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:L/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
         },
-        "severity" : "LOW",
-        "exploitabilityScore" : 3.9,
-        "impactScore" : 2.9,
-        "acInsufInfo" : false,
-        "obtainAllPrivilege" : false,
-        "obtainUserPrivilege" : false,
-        "obtainOtherPrivilege" : false,
-        "userInteractionRequired" : false
+        "exploitabilityScore": 3.9,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
       }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "LOCAL",
+          "availabilityImpact": "NONE",
+          "baseScore": 4.4,
+          "baseSeverity": "MEDIUM",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "NONE",
+          "privilegesRequired": "HIGH",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 0.8,
+        "impactScore": 3.6,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2020-12-09T17:15:31.743",
+  "references": [
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Exploit",
+        "Third Party Advisory",
+        "VDB Entry"
+      ],
+      "url": "http://packetstormsecurity.com/files/164950/Kernel-Live-Patch-Security-Notice-LSN-0082-1.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Patch",
+        "Third Party Advisory"
+      ],
+      "url": "http://www.openwall.com/lists/oss-security/2020/12/10/1"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Exploit",
+        "Patch",
+        "Vendor Advisory"
+      ],
+      "url": "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c8bcd9c5be24fb9e6132e97da5a35e55a83e36b9"
     },
-    "publishedDate" : "2020-12-09T17:15Z",
-    "lastModifiedDate" : "2020-12-18T18:16Z"
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Third Party Advisory"
+      ],
+      "url": "https://lists.debian.org/debian-lts-announce/2021/02/msg00018.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Third Party Advisory"
+      ],
+      "url": "https://lists.debian.org/debian-lts-announce/2021/03/msg00010.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/BOB25SU6XUL4TNP7KB63WNZSYTIYFDPP/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/MZ7OAKAEFAXQRGBZK4LYUWINCD3D2XCL/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://security.netapp.com/advisory/ntap-20210122-0001/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://www.debian.org/security/2021/dsa-4843"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-416"
+        },
+        {
+          "lang": "en",
+          "value": "CWE-667"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
 }
\ No newline at end of file
diff --git a/tests/data/cves/CVE-2020-35076.json b/tests/data/cves/CVE-2020-35076.json
index 89e4e733..b9dd9d37 100644
--- a/tests/data/cves/CVE-2020-35076.json
+++ b/tests/data/cves/CVE-2020-35076.json
@@ -1,32 +1,15 @@
 {
-    "cve" : {
-      "data_type" : "CVE",
-      "data_format" : "MITRE",
-      "data_version" : "4.0",
-      "CVE_data_meta" : {
-        "ID" : "CVE-2020-35076",
-        "ASSIGNER" : "cve@mitre.org"
-      },
-      "problemtype" : {
-        "problemtype_data" : [ {
-          "description" : [ ]
-        } ]
-      },
-      "references" : {
-        "reference_data" : [ ]
-      },
-      "description" : {
-        "description_data" : [ {
-          "lang" : "en",
-          "value" : "** REJECT ** DO NOT USE THIS CANDIDATE NUMBER. ConsultIDs: none. Reason: This candidate was withdrawn by its CNA. Notes: none."
-        } ]
-      }
-    },
-    "configurations" : {
-      "CVE_data_version" : "4.0",
-      "nodes" : [ ]
-    },
-    "impact" : { },
-    "publishedDate" : "2020-12-10T23:15Z",
-    "lastModifiedDate" : "2020-12-10T23:15Z"
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "Rejected reason: DO NOT USE THIS CANDIDATE NUMBER. ConsultIDs: none. Reason: This candidate was withdrawn by its CNA. Notes: none"
+    }
+  ],
+  "id": "CVE-2020-35076",
+  "lastModified": "2023-11-07T03:21:52.237",
+  "metrics": {},
+  "published": "2020-12-10T23:15:13.363",
+  "references": [],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Rejected"
 }
\ No newline at end of file
diff --git a/tests/data/cves/CVE-2020-35188.json b/tests/data/cves/CVE-2020-35188.json
index 68006316..ecb5ea68 100644
--- a/tests/data/cves/CVE-2020-35188.json
+++ b/tests/data/cves/CVE-2020-35188.json
@@ -1,116 +1,97 @@
 {
-    "cve": {
-        "data_type": "CVE",
-        "data_format": "MITRE",
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2020-35188",
-            "ASSIGNER": "cve@mitre.org"
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-306"
-                }]
-            }]
-        },
-        "references": {
-            "reference_data": [{
-                "url": "https://github.com/koharin/koharin2/blob/main/CVE-2020-35188",
-                "name": "https://github.com/koharin/koharin2/blob/main/CVE-2020-35188",
-                "refsource": "MISC",
-                "tags": ["Third Party Advisory"]
-            }]
-        },
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "The official chronograf docker images before 1.7.7-alpine (Alpine specific) contain a blank password for a root user. System using the chronograf docker container deployed by affected versions of the docker image may allow a remote attacker to achieve root access with a blank password."
-            }]
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:influxdata:chronograf:1.3.9.0-alpine:*:*:*:*:*:*:*",
+              "matchCriteriaId": "FBD33137-D4FD-475B-B678-55CFB3591FFE",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
-    },
-    "configurations": {
-        "CVE_data_version": "4.0",
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.3.9.0-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.4.3.0-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.5.0.0-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.6.0-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.6.1-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.2-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.3-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.4-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.5-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.6-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.7-alpine:*:*:*:*:*:*:*"
-            }]
-        }]
-    },
-    "impact": {
-        "baseMetricV3": {
-            "cvssV3": {
-                "version": "3.1",
-                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-                "attackVector": "NETWORK",
-                "attackComplexity": "LOW",
-                "privilegesRequired": "NONE",
-                "userInteraction": "NONE",
-                "scope": "UNCHANGED",
-                "confidentialityImpact": "HIGH",
-                "integrityImpact": "HIGH",
-                "availabilityImpact": "HIGH",
-                "baseScore": 9.8,
-                "baseSeverity": "CRITICAL"
-            },
-            "exploitabilityScore": 3.9,
-            "impactScore": 5.9
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "The official chronograf docker images before 1.7.7-alpine (Alpine specific) contain a blank password for a root user. System using the chronograf docker container deployed by affected versions of the docker image may allow a remote attacker to achieve root access with a blank password."
+    }
+  ],
+  "id": "CVE-2020-35188",
+  "lastModified": "2023-11-07T03:50:48.980",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 10.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "HIGH",
+          "baseScore": 9.8,
+          "baseSeverity": "CRITICAL",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "HIGH",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
+          "version": "3.1"
         },
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "vectorString": "AV:N/AC:L/Au:N/C:C/I:C/A:C",
-                "accessVector": "NETWORK",
-                "accessComplexity": "LOW",
-                "authentication": "NONE",
-                "confidentialityImpact": "COMPLETE",
-                "integrityImpact": "COMPLETE",
-                "availabilityImpact": "COMPLETE",
-                "baseScore": 10.0
-            },
-            "severity": "HIGH",
-            "exploitabilityScore": 10.0,
-            "impactScore": 10.0,
-            "acInsufInfo": false,
-            "obtainAllPrivilege": false,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
+        "exploitabilityScore": 3.9,
+        "impactScore": 5.9,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2022-09-05T14:15:08.510",
+  "references": [{
+      "url": "https://github.com/koharin/koharin2/blob/main/CVE-2020-35188",
+      "name": "https://github.com/koharin/koharin2/blob/main/CVE-2020-35188",
+      "source": "MISC",
+      "tags": ["Third Party Advisory"]
+  }],
+  "sourceIdentifier": "cna@vuldb.com",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-306"
         }
-    },
-    "publishedDate": "2020-12-17T02:15Z",
-    "lastModifiedDate": "2020-12-18T16:23Z"
+      ],
+      "source": "1af790b2-7ee1-4545-860a-a788eba489b5",
+      "type": "Secondary"
+    }
+  ]
 }
\ No newline at end of file
diff --git a/tests/data/cves/CVE-2020-9392.json b/tests/data/cves/CVE-2020-9392.json
index 736d14a8..f0d8437f 100644
--- a/tests/data/cves/CVE-2020-9392.json
+++ b/tests/data/cves/CVE-2020-9392.json
@@ -1,87 +1,128 @@
 {
-    "cve" : {
-      "data_type" : "CVE",
-      "data_format" : "MITRE",
-      "data_version" : "4.0",
-      "CVE_data_meta" : {
-        "ID" : "CVE-2020-9392",
-        "ASSIGNER" : "cve@mitre.org"
-      },
-      "problemtype" : {
-        "problemtype_data" : [ {
-          "description" : [ {
-            "lang" : "en",
-            "value" : "CWE-276"
-          } ]
-        } ]
-      },
-      "references" : {
-        "reference_data" : [ {
-          "url" : "https://www.wordfence.com/blog/2020/02/multiple-vulnerabilities-patched-in-pricing-table-by-supsystic-plugin/",
-          "name" : "https://www.wordfence.com/blog/2020/02/multiple-vulnerabilities-patched-in-pricing-table-by-supsystic-plugin/",
-          "refsource" : "MISC",
-          "tags" : [ "Exploit", "Third Party Advisory" ]
-        } ]
-      },
-      "description" : {
-        "description_data" : [ {
-          "lang" : "en",
-          "value" : "An issue was discovered in the pricing-table-by-supsystic plugin before 1.8.2 for WordPress. Because there is no permission check on the ImportJSONTable, createFromTpl, and getJSONExportTable endpoints, unauthenticated users can retrieve pricing table information, create new tables, or import/modify a table."
-        } ]
-      }
-    },
-    "configurations" : {
-      "CVE_data_version" : "4.0",
-      "nodes" : [ {
-        "operator" : "OR",
-        "cpe_match" : [ {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:a:supsystic:pricing_table_by_supsystic:*:*:*:*:*:wordpress:*:*",
-          "versionEndExcluding" : "1.8.2"
-        } ]
-      } ]
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:supsystic:pricing_table_by_supsystic:*:*:*:*:*:wordpress:*:*",
+              "matchCriteriaId": "91344271-5B6B-4292-88F8-0069195C3B31",
+              "versionEndExcluding": "1.8.2",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "An issue was discovered in the pricing-table-by-supsystic plugin before 1.8.2 for WordPress. Because there is no permission check on the ImportJSONTable, createFromTpl, and getJSONExportTable endpoints, unauthenticated users can retrieve pricing table information, create new tables, or import/modify a table."
     },
-    "impact" : {
-      "baseMetricV3" : {
-        "cvssV3" : {
-          "version" : "3.1",
-          "vectorString" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L",
-          "attackVector" : "NETWORK",
-          "attackComplexity" : "LOW",
-          "privilegesRequired" : "NONE",
-          "userInteraction" : "NONE",
-          "scope" : "UNCHANGED",
-          "confidentialityImpact" : "LOW",
-          "integrityImpact" : "LOW",
-          "availabilityImpact" : "LOW",
-          "baseScore" : 7.3,
-          "baseSeverity" : "HIGH"
+    {
+      "lang": "es",
+      "value": "Se detect\u00f3 un problema en el plugin pricing-table-by-supsystic versiones anteriores a 1.8.2 para WordPress. Debido a que no presenta comprobaci\u00f3n de permisos en los endpoints ImportJSONTable, createFromTpl y getJSONExportTable, los usuarios no autenticados pueden recuperar informaci\u00f3n de la tabla de precios, crear nuevas tablas o importar y modificar una tabla."
+    }
+  ],
+  "id": "CVE-2020-9392",
+  "lastModified": "2020-03-25T15:08:10.820",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "HIGH",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "PARTIAL",
+          "baseScore": 7.5,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "PARTIAL",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:P/A:P",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 6.4,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV30": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "LOW",
+          "baseScore": 7.3,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "LOW",
+          "integrityImpact": "LOW",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L",
+          "version": "3.0"
         },
-        "exploitabilityScore" : 3.9,
-        "impactScore" : 3.4
-      },
-      "baseMetricV2" : {
-        "cvssV2" : {
-          "version" : "2.0",
-          "vectorString" : "AV:N/AC:L/Au:N/C:P/I:P/A:P",
-          "accessVector" : "NETWORK",
-          "accessComplexity" : "LOW",
-          "authentication" : "NONE",
-          "confidentialityImpact" : "PARTIAL",
-          "integrityImpact" : "PARTIAL",
-          "availabilityImpact" : "PARTIAL",
-          "baseScore" : 7.5
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.4,
+        "source": "cve@mitre.org",
+        "type": "Secondary"
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "LOW",
+          "baseScore": 7.3,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "LOW",
+          "integrityImpact": "LOW",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L",
+          "version": "3.1"
         },
-        "severity" : "HIGH",
-        "exploitabilityScore" : 10.0,
-        "impactScore" : 6.4,
-        "acInsufInfo" : false,
-        "obtainAllPrivilege" : false,
-        "obtainUserPrivilege" : false,
-        "obtainOtherPrivilege" : false,
-        "userInteractionRequired" : false
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.4,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
       }
-    },
-    "publishedDate" : "2020-03-23T17:15Z",
-    "lastModifiedDate" : "2020-03-25T15:08Z"
+    ]
+  },
+  "published": "2020-03-23T17:15:15.487",
+  "references": [
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Exploit",
+        "Third Party Advisory"
+      ],
+      "url": "https://www.wordfence.com/blog/2020/02/multiple-vulnerabilities-patched-in-pricing-table-by-supsystic-plugin/"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Analyzed",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-276"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
 }
\ No newline at end of file
diff --git a/tests/data/cves/CVE-2022-3122.json b/tests/data/cves/CVE-2022-3122.json
index d7f51866..1ce33fd9 100644
--- a/tests/data/cves/CVE-2022-3122.json
+++ b/tests/data/cves/CVE-2022-3122.json
@@ -1,49 +1,114 @@
 {
-  "cve": {
-    "data_type": "CVE",
-    "references": {
-      "reference_data": [
+  "configurations": [
+    {
+      "nodes": [
         {
-          "url": "https://github.com/joinia/webray.com.cn/blob/main/Clinic's-Patient-Management-System/cpmssql.md",
-          "name": "https://github.com/joinia/webray.com.cn/blob/main/Clinic's-Patient-Management-System/cpmssql.md",
-          "tags": [],
-          "refsource": "MISC"
-        },
-        {
-          "url": "https://vuldb.com/?id.207854",
-          "name": "https://vuldb.com/?id.207854",
-          "tags": [],
-          "refsource": "MISC"
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:clinic\\'s_patient_management_system_project:clinic\\'s_patient_management_system:1.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "FBD33137-D4FD-475B-B678-55CFB3591FFE",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
       ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "A vulnerability was found in SourceCodester Clinics Patient Management System 1.0. It has been rated as critical. Affected by this issue is some unknown functionality of the file medicine_details.php. The manipulation of the argument medicine leads to sql injection. The attack may be launched remotely. The exploit has been disclosed to the public and may be used. VDB-207854 is the identifier assigned to this vulnerability."
+    },
+    {
+      "lang": "es",
+      "value": "Se ha encontrado una vulnerabilidad en SourceCodester Clinics Patient Management System versi\u00f3n 1.0. Ha sido calificada como cr\u00edtica. Este problema afecta a una funcionalidad desconocida del archivo medicine_details.php. La manipulaci\u00f3n del argumento medicine conlleva a una inyecci\u00f3n sql. El ataque puede ser lanzado remotamente. La explotaci\u00f3n ha sido divulgada al p\u00fablico y puede ser usada. VDB-207854 es el identificador asignado a esta vulnerabilidad"
+    }
+  ],
+  "id": "CVE-2022-3122",
+  "lastModified": "2023-11-07T03:50:48.980",
+  "metrics": {
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "HIGH",
+          "baseScore": 9.8,
+          "baseSeverity": "CRITICAL",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "HIGH",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 5.9,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      },
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "LOW",
+          "baseScore": 6.3,
+          "baseSeverity": "MEDIUM",
+          "confidentialityImpact": "LOW",
+          "integrityImpact": "LOW",
+          "privilegesRequired": "LOW",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 2.8,
+        "impactScore": 3.4,
+        "source": "1af790b2-7ee1-4545-860a-a788eba489b5",
+        "type": "Secondary"
+      }
+    ]
+  },
+  "published": "2022-09-05T14:15:08.510",
+  "references": [
+    {
+      "url": "https://github.com/joinia/webray.com.cn/blob/main/Clinic's-Patient-Management-System/cpmssql.md",
+      "name": "https://github.com/joinia/webray.com.cn/blob/main/Clinic's-Patient-Management-System/cpmssql.md",
+      "tags": [],
+      "source": "MISC"
     },
-    "data_format": "MITRE",
-    "description": {
-      "description_data": [
+    {
+      "url": "https://vuldb.com/?id.207854",
+      "name": "https://vuldb.com/?id.207854",
+      "tags": [],
+      "source": "MISC"
+    }
+  ],
+  "sourceIdentifier": "cna@vuldb.com",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
         {
           "lang": "en",
-          "value": "A vulnerability was found in SourceCodester Clinics Patient Management System 1.0. It has been rated as critical. Affected by this issue is some unknown functionality of the file medicine_details.php. The manipulation of the argument medicine leads to sql injection. The attack may be launched remotely. The exploit has been disclosed to the public and may be used. VDB-207854 is the identifier assigned to this vulnerability."
+          "value": "CWE-89"
         }
-      ]
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
     },
-    "problemtype": {
-      "problemtype_data": [
+    {
+      "description": [
         {
-          "description": []
+          "lang": "en",
+          "value": "CWE-89"
         }
-      ]
-    },
-    "data_version": "4.0",
-    "CVE_data_meta": {
-      "ID": "CVE-2022-3122",
-      "ASSIGNER": "cna@vuldb.com"
+      ],
+      "source": "1af790b2-7ee1-4545-860a-a788eba489b5",
+      "type": "Secondary"
     }
-  },
-  "impact": {},
-  "publishedDate": "2022-09-05T14:15Z",
-  "configurations": {
-    "nodes": [],
-    "CVE_data_version": "4.0"
-  },
-  "lastModifiedDate": "2022-09-06T04:07Z"
-}
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2018-18074.json b/tests/data/modified_cves/CVE-2018-18074.json
index 01462df9..58c25c2e 100644
--- a/tests/data/modified_cves/CVE-2018-18074.json
+++ b/tests/data/modified_cves/CVE-2018-18074.json
@@ -1,141 +1,174 @@
-[{
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": [{
-                "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "tags": ["Release Notes", "Third Party Advisory"],
-                "refsource": "CONFIRM"
-            }, {
-                "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
-                "name": "openSUSE-SU-2019:1754",
-                "tags": [],
-                "refsource": "SUSE"
-            }, {
-                "url": "https://access.redhat.com/errata/RHSA-2019:2035",
-                "name": "RHSA-2019:2035",
-                "tags": [],
-                "refsource": "REDHAT"
-            }, {
-                "url": "https://bugs.debian.org/910766",
-                "name": "https://bugs.debian.org/910766",
-                "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/issues/4716",
-                "name": "https://github.com/requests/requests/issues/4716",
-                "tags": ["Exploit", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/pull/4718",
-                "name": "https://github.com/requests/requests/pull/4718",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-1/",
-                "name": "USN-3790-1",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-2/",
-                "name": "USN-3790-2",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }]
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-522"
-                }]
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2018-18074",
-            "ASSIGNER": "cve@mitre.org"
+{
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7CFBA4E8-EE3D-413C-8175-43F7E42960CA",
+              "versionEndExcluding": "2.20.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
     },
-    "impact": {
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "baseScore": 5.0,
-                "accessVector": "NETWORK",
-                "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
-                "authentication": "NONE",
-                "integrityImpact": "NONE",
-                "accessComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "confidentialityImpact": "PARTIAL"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
             },
-            "severity": "MEDIUM",
-            "impactScore": 2.9,
-            "obtainAllPrivilege": false,
-            "exploitabilityScore": 10.0,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
-        },
-        "baseMetricV3": {
-            "cvssV3": {
-                "scope": "UNCHANGED",
-                "version": "3.0",
-                "baseScore": 9.8,
-                "attackVector": "NETWORK",
-                "baseSeverity": "CRITICAL",
-                "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-                "integrityImpact": "HIGH",
-                "userInteraction": "NONE",
-                "attackComplexity": "LOW",
-                "availabilityImpact": "HIGH",
-                "privilegesRequired": "NONE",
-                "confidentialityImpact": "HIGH"
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "F7016A2A-8365-4F1A-89A2-7A19F2BCAE5B",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
             },
-            "impactScore": 5.9,
-            "exploitabilityScore": 3.9
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
+              "matchCriteriaId": "07C312A0-CD2C-4B9C-B064-6409B25C278F",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
     },
-    "publishedDate": "2018-10-09T17:29Z",
-    "configurations": {
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "2.20.0"
-            }]
-        }, {
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2019-10-03T00:03Z"
-}]
\ No newline at end of file
+    {
+      "lang": "es",
+      "value": "El paquete Requests antes de la versi\u00f3n 2.20.0 para Python env\u00eda una cabecera de autorizaci\u00f3n HTTP a un URI http al recibir una redirecci\u00f3n same-hostname https-to-http, lo que facilita que los atacantes remotos descibran las credenciales esnifando la red."
+    }
+  ],
+  "id": "CVE-2018-18074",
+  "lastModified": "2022-07-25T18:15:14.467",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 5.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 9.8,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "NONE",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.6,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2018-10-09T17:29:01.897",
+   "references": [
+    {
+        "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "tags": ["Release Notes", "Third Party Advisory"],
+        "source": "CONFIRM"
+    }, {
+        "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
+        "name": "openSUSE-SU-2019:1754",
+        "tags": [],
+        "source": "SUSE"
+    }, {
+        "url": "https://access.redhat.com/errata/RHSA-2019:2035",
+        "name": "RHSA-2019:2035",
+        "tags": [],
+        "source": "REDHAT"
+    }, {
+        "url": "https://bugs.debian.org/910766",
+        "name": "https://bugs.debian.org/910766",
+        "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/issues/4716",
+        "name": "https://github.com/requests/requests/issues/4716",
+        "tags": ["Exploit", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/pull/4718",
+        "name": "https://github.com/requests/requests/pull/4718",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-1/",
+        "name": "USN-3790-1",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-2/",
+        "name": "USN-3790-2",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-522"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2018-18074_cpes.json b/tests/data/modified_cves/CVE-2018-18074_cpes.json
index 77a201d9..f616235b 100644
--- a/tests/data/modified_cves/CVE-2018-18074_cpes.json
+++ b/tests/data/modified_cves/CVE-2018-18074_cpes.json
@@ -1,140 +1,174 @@
-[{
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": [{
-                "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "tags": ["Release Notes", "Third Party Advisory"],
-                "refsource": "CONFIRM"
-            }, {
-                "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
-                "name": "openSUSE-SU-2019:1754",
-                "tags": [],
-                "refsource": "SUSE"
-            }, {
-                "url": "https://access.redhat.com/errata/RHSA-2019:2035",
-                "name": "RHSA-2019:2035",
-                "tags": [],
-                "refsource": "REDHAT"
-            }, {
-                "url": "https://bugs.debian.org/910766",
-                "name": "https://bugs.debian.org/910766",
-                "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/issues/4716",
-                "name": "https://github.com/requests/requests/issues/4716",
-                "tags": ["Exploit", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/pull/4718",
-                "name": "https://github.com/requests/requests/pull/4718",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-1/",
-                "name": "USN-3790-1",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-2/",
-                "name": "USN-3790-2",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }]
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-522"
-                }]
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2018-18074",
-            "ASSIGNER": "cve@mitre.org"
+{
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:opencveio:opencve:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7CFBA4E8-EE3D-413C-8175-43F7E42960CA",
+              "versionEndExcluding": "2.20.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
     },
-    "impact": {
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "baseScore": 5.0,
-                "accessVector": "NETWORK",
-                "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
-                "authentication": "NONE",
-                "integrityImpact": "NONE",
-                "accessComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "confidentialityImpact": "PARTIAL"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
             },
-            "severity": "MEDIUM",
-            "impactScore": 2.9,
-            "obtainAllPrivilege": false,
-            "exploitabilityScore": 10.0,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
-        },
-        "baseMetricV3": {
-            "cvssV3": {
-                "scope": "UNCHANGED",
-                "version": "3.0",
-                "baseScore": 9.8,
-                "attackVector": "NETWORK",
-                "baseSeverity": "CRITICAL",
-                "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-                "integrityImpact": "HIGH",
-                "userInteraction": "NONE",
-                "attackComplexity": "LOW",
-                "availabilityImpact": "HIGH",
-                "privilegesRequired": "NONE",
-                "confidentialityImpact": "HIGH"
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "F7016A2A-8365-4F1A-89A2-7A19F2BCAE5B",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
             },
-            "impactScore": 5.9,
-            "exploitabilityScore": 3.9
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
+              "matchCriteriaId": "07C312A0-CD2C-4B9C-B064-6409B25C278F",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
     },
-    "publishedDate": "2018-10-09T17:29Z",
-    "configurations": {
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:a:opencveio:opencve:*:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }, {
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2019-10-03T13:37Z"
-}]
\ No newline at end of file
+    {
+      "lang": "es",
+      "value": "El paquete Requests antes de la versi\u00f3n 2.20.0 para Python env\u00eda una cabecera de autorizaci\u00f3n HTTP a un URI http al recibir una redirecci\u00f3n same-hostname https-to-http, lo que facilita que los atacantes remotos descibran las credenciales esnifando la red."
+    }
+  ],
+  "id": "CVE-2018-18074",
+  "lastModified": "2024-01-01T00:00:00.000",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 5.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 9.8,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "NONE",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.6,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2018-10-09T17:29:01.897",
+   "references": [
+    {
+        "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "tags": ["Release Notes", "Third Party Advisory"],
+        "source": "CONFIRM"
+    }, {
+        "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
+        "name": "openSUSE-SU-2019:1754",
+        "tags": [],
+        "source": "SUSE"
+    }, {
+        "url": "https://access.redhat.com/errata/RHSA-2019:2035",
+        "name": "RHSA-2019:2035",
+        "tags": [],
+        "source": "REDHAT"
+    }, {
+        "url": "https://bugs.debian.org/910766",
+        "name": "https://bugs.debian.org/910766",
+        "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/issues/4716",
+        "name": "https://github.com/requests/requests/issues/4716",
+        "tags": ["Exploit", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/pull/4718",
+        "name": "https://github.com/requests/requests/pull/4718",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-1/",
+        "name": "USN-3790-1",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-2/",
+        "name": "USN-3790-2",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-522"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2018-18074_cvss.json b/tests/data/modified_cves/CVE-2018-18074_cvss.json
index 429bf448..fc99e8c8 100644
--- a/tests/data/modified_cves/CVE-2018-18074_cvss.json
+++ b/tests/data/modified_cves/CVE-2018-18074_cvss.json
@@ -1,141 +1,174 @@
-[{
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": [{
-                "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "tags": ["Release Notes", "Third Party Advisory"],
-                "refsource": "CONFIRM"
-            }, {
-                "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
-                "name": "openSUSE-SU-2019:1754",
-                "tags": [],
-                "refsource": "SUSE"
-            }, {
-                "url": "https://access.redhat.com/errata/RHSA-2019:2035",
-                "name": "RHSA-2019:2035",
-                "tags": [],
-                "refsource": "REDHAT"
-            }, {
-                "url": "https://bugs.debian.org/910766",
-                "name": "https://bugs.debian.org/910766",
-                "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/issues/4716",
-                "name": "https://github.com/requests/requests/issues/4716",
-                "tags": ["Exploit", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/pull/4718",
-                "name": "https://github.com/requests/requests/pull/4718",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-1/",
-                "name": "USN-3790-1",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-2/",
-                "name": "USN-3790-2",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }]
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-522"
-                }]
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2018-18074",
-            "ASSIGNER": "cve@mitre.org"
+{
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7CFBA4E8-EE3D-413C-8175-43F7E42960CA",
+              "versionEndExcluding": "2.20.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
     },
-    "impact": {
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "baseScore": 6.0,
-                "accessVector": "NETWORK",
-                "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
-                "authentication": "NONE",
-                "integrityImpact": "NONE",
-                "accessComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "confidentialityImpact": "PARTIAL"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
             },
-            "severity": "MEDIUM",
-            "impactScore": 2.9,
-            "obtainAllPrivilege": false,
-            "exploitabilityScore": 10.0,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
-        },
-        "baseMetricV3": {
-            "cvssV3": {
-                "scope": "UNCHANGED",
-                "version": "3.0",
-                "baseScore": 10,
-                "attackVector": "NETWORK",
-                "baseSeverity": "CRITICAL",
-                "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-                "integrityImpact": "HIGH",
-                "userInteraction": "NONE",
-                "attackComplexity": "LOW",
-                "availabilityImpact": "HIGH",
-                "privilegesRequired": "NONE",
-                "confidentialityImpact": "HIGH"
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "F7016A2A-8365-4F1A-89A2-7A19F2BCAE5B",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
             },
-            "impactScore": 5.9,
-            "exploitabilityScore": 3.9
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
+              "matchCriteriaId": "07C312A0-CD2C-4B9C-B064-6409B25C278F",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
     },
-    "publishedDate": "2018-10-09T17:29Z",
-    "configurations": {
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "2.20.0"
-            }]
-        }, {
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2019-10-03T13:37Z"
-}]
\ No newline at end of file
+    {
+      "lang": "es",
+      "value": "El paquete Requests antes de la versi\u00f3n 2.20.0 para Python env\u00eda una cabecera de autorizaci\u00f3n HTTP a un URI http al recibir una redirecci\u00f3n same-hostname https-to-http, lo que facilita que los atacantes remotos descibran las credenciales esnifando la red."
+    }
+  ],
+  "id": "CVE-2018-18074",
+  "lastModified": "2024-01-01T00:00:00.000",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 6.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 10,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "NONE",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.6,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2018-10-09T17:29:01.897",
+  "references": [
+    {
+        "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "tags": ["Release Notes", "Third Party Advisory"],
+        "source": "CONFIRM"
+    }, {
+        "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
+        "name": "openSUSE-SU-2019:1754",
+        "tags": [],
+        "source": "SUSE"
+    }, {
+        "url": "https://access.redhat.com/errata/RHSA-2019:2035",
+        "name": "RHSA-2019:2035",
+        "tags": [],
+        "source": "REDHAT"
+    }, {
+        "url": "https://bugs.debian.org/910766",
+        "name": "https://bugs.debian.org/910766",
+        "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/issues/4716",
+        "name": "https://github.com/requests/requests/issues/4716",
+        "tags": ["Exploit", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/pull/4718",
+        "name": "https://github.com/requests/requests/pull/4718",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-1/",
+        "name": "USN-3790-1",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-2/",
+        "name": "USN-3790-2",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-522"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2018-18074_cwes.json b/tests/data/modified_cves/CVE-2018-18074_cwes.json
index dda44e77..c22fd966 100644
--- a/tests/data/modified_cves/CVE-2018-18074_cwes.json
+++ b/tests/data/modified_cves/CVE-2018-18074_cwes.json
@@ -1,141 +1,174 @@
-[{
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": [{
-                "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "tags": ["Release Notes", "Third Party Advisory"],
-                "refsource": "CONFIRM"
-            }, {
-                "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
-                "name": "openSUSE-SU-2019:1754",
-                "tags": [],
-                "refsource": "SUSE"
-            }, {
-                "url": "https://access.redhat.com/errata/RHSA-2019:2035",
-                "name": "RHSA-2019:2035",
-                "tags": [],
-                "refsource": "REDHAT"
-            }, {
-                "url": "https://bugs.debian.org/910766",
-                "name": "https://bugs.debian.org/910766",
-                "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/issues/4716",
-                "name": "https://github.com/requests/requests/issues/4716",
-                "tags": ["Exploit", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/pull/4718",
-                "name": "https://github.com/requests/requests/pull/4718",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-1/",
-                "name": "USN-3790-1",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-2/",
-                "name": "USN-3790-2",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }]
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-1337"
-                }]
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2018-18074",
-            "ASSIGNER": "cve@mitre.org"
+{
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7CFBA4E8-EE3D-413C-8175-43F7E42960CA",
+              "versionEndExcluding": "2.20.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
     },
-    "impact": {
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "baseScore": 5.0,
-                "accessVector": "NETWORK",
-                "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
-                "authentication": "NONE",
-                "integrityImpact": "NONE",
-                "accessComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "confidentialityImpact": "PARTIAL"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
             },
-            "severity": "MEDIUM",
-            "impactScore": 2.9,
-            "obtainAllPrivilege": false,
-            "exploitabilityScore": 10.0,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
-        },
-        "baseMetricV3": {
-            "cvssV3": {
-                "scope": "UNCHANGED",
-                "version": "3.0",
-                "baseScore": 9.8,
-                "attackVector": "NETWORK",
-                "baseSeverity": "CRITICAL",
-                "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-                "integrityImpact": "HIGH",
-                "userInteraction": "NONE",
-                "attackComplexity": "LOW",
-                "availabilityImpact": "HIGH",
-                "privilegesRequired": "NONE",
-                "confidentialityImpact": "HIGH"
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "F7016A2A-8365-4F1A-89A2-7A19F2BCAE5B",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
             },
-            "impactScore": 5.9,
-            "exploitabilityScore": 3.9
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
+              "matchCriteriaId": "07C312A0-CD2C-4B9C-B064-6409B25C278F",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
     },
-    "publishedDate": "2018-10-09T17:29Z",
-    "configurations": {
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "2.20.0"
-            }]
-        }, {
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2019-10-03T13:37Z"
-}]
\ No newline at end of file
+    {
+      "lang": "es",
+      "value": "El paquete Requests antes de la versi\u00f3n 2.20.0 para Python env\u00eda una cabecera de autorizaci\u00f3n HTTP a un URI http al recibir una redirecci\u00f3n same-hostname https-to-http, lo que facilita que los atacantes remotos descibran las credenciales esnifando la red."
+    }
+  ],
+  "id": "CVE-2018-18074",
+  "lastModified": "2024-01-01T00:00:00.000",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 5.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 9.8,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "NONE",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.6,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2018-10-09T17:29:01.897",
+   "references": [
+    {
+        "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "tags": ["Release Notes", "Third Party Advisory"],
+        "source": "CONFIRM"
+    }, {
+        "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
+        "name": "openSUSE-SU-2019:1754",
+        "tags": [],
+        "source": "SUSE"
+    }, {
+        "url": "https://access.redhat.com/errata/RHSA-2019:2035",
+        "name": "RHSA-2019:2035",
+        "tags": [],
+        "source": "REDHAT"
+    }, {
+        "url": "https://bugs.debian.org/910766",
+        "name": "https://bugs.debian.org/910766",
+        "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/issues/4716",
+        "name": "https://github.com/requests/requests/issues/4716",
+        "tags": ["Exploit", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/pull/4718",
+        "name": "https://github.com/requests/requests/pull/4718",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-1/",
+        "name": "USN-3790-1",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-2/",
+        "name": "USN-3790-2",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-1337"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2018-18074_first_time_1.json b/tests/data/modified_cves/CVE-2018-18074_first_time_1.json
index 54e5c35b..fc8554d6 100644
--- a/tests/data/modified_cves/CVE-2018-18074_first_time_1.json
+++ b/tests/data/modified_cves/CVE-2018-18074_first_time_1.json
@@ -1,140 +1,174 @@
-[{
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": [{
-                "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "tags": ["Release Notes", "Third Party Advisory"],
-                "refsource": "CONFIRM"
-            }, {
-                "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
-                "name": "openSUSE-SU-2019:1754",
-                "tags": [],
-                "refsource": "SUSE"
-            }, {
-                "url": "https://access.redhat.com/errata/RHSA-2019:2035",
-                "name": "RHSA-2019:2035",
-                "tags": [],
-                "refsource": "REDHAT"
-            }, {
-                "url": "https://bugs.debian.org/910766",
-                "name": "https://bugs.debian.org/910766",
-                "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/issues/4716",
-                "name": "https://github.com/requests/requests/issues/4716",
-                "tags": ["Exploit", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/pull/4718",
-                "name": "https://github.com/requests/requests/pull/4718",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-1/",
-                "name": "USN-3790-1",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-2/",
-                "name": "USN-3790-2",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }]
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-522"
-                }]
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2018-18074",
-            "ASSIGNER": "cve@mitre.org"
+{
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:opencveio:opencve:1:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7CFBA4E8-EE3D-413C-8175-43F7E42960CA",
+              "versionEndExcluding": "2.20.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
     },
-    "impact": {
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "baseScore": 5.0,
-                "accessVector": "NETWORK",
-                "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
-                "authentication": "NONE",
-                "integrityImpact": "NONE",
-                "accessComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "confidentialityImpact": "PARTIAL"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
             },
-            "severity": "MEDIUM",
-            "impactScore": 2.9,
-            "obtainAllPrivilege": false,
-            "exploitabilityScore": 10.0,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
-        },
-        "baseMetricV3": {
-            "cvssV3": {
-                "scope": "UNCHANGED",
-                "version": "3.0",
-                "baseScore": 9.8,
-                "attackVector": "NETWORK",
-                "baseSeverity": "CRITICAL",
-                "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-                "integrityImpact": "HIGH",
-                "userInteraction": "NONE",
-                "attackComplexity": "LOW",
-                "availabilityImpact": "HIGH",
-                "privilegesRequired": "NONE",
-                "confidentialityImpact": "HIGH"
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "F7016A2A-8365-4F1A-89A2-7A19F2BCAE5B",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
             },
-            "impactScore": 5.9,
-            "exploitabilityScore": 3.9
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
+              "matchCriteriaId": "07C312A0-CD2C-4B9C-B064-6409B25C278F",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
     },
-    "publishedDate": "2018-10-09T17:29Z",
-    "configurations": {
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:a:opencveio:opencve:1:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }, {
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2019-10-03T13:37Z"
-}]
\ No newline at end of file
+    {
+      "lang": "es",
+      "value": "El paquete Requests antes de la versi\u00f3n 2.20.0 para Python env\u00eda una cabecera de autorizaci\u00f3n HTTP a un URI http al recibir una redirecci\u00f3n same-hostname https-to-http, lo que facilita que los atacantes remotos descibran las credenciales esnifando la red."
+    }
+  ],
+  "id": "CVE-2018-18074",
+  "lastModified": "2024-01-01T00:00:00.000",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 5.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 9.8,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "NONE",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.6,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2018-10-09T17:29:01.897",
+   "references": [
+    {
+        "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "tags": ["Release Notes", "Third Party Advisory"],
+        "source": "CONFIRM"
+    }, {
+        "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
+        "name": "openSUSE-SU-2019:1754",
+        "tags": [],
+        "source": "SUSE"
+    }, {
+        "url": "https://access.redhat.com/errata/RHSA-2019:2035",
+        "name": "RHSA-2019:2035",
+        "tags": [],
+        "source": "REDHAT"
+    }, {
+        "url": "https://bugs.debian.org/910766",
+        "name": "https://bugs.debian.org/910766",
+        "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/issues/4716",
+        "name": "https://github.com/requests/requests/issues/4716",
+        "tags": ["Exploit", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/pull/4718",
+        "name": "https://github.com/requests/requests/pull/4718",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-1/",
+        "name": "USN-3790-1",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-2/",
+        "name": "USN-3790-2",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-522"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2018-18074_first_time_2.json b/tests/data/modified_cves/CVE-2018-18074_first_time_2.json
index 8525337b..b888f472 100644
--- a/tests/data/modified_cves/CVE-2018-18074_first_time_2.json
+++ b/tests/data/modified_cves/CVE-2018-18074_first_time_2.json
@@ -1,143 +1,180 @@
-[{
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": [{
-                "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "tags": ["Release Notes", "Third Party Advisory"],
-                "refsource": "CONFIRM"
-            }, {
-                "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
-                "name": "openSUSE-SU-2019:1754",
-                "tags": [],
-                "refsource": "SUSE"
-            }, {
-                "url": "https://access.redhat.com/errata/RHSA-2019:2035",
-                "name": "RHSA-2019:2035",
-                "tags": [],
-                "refsource": "REDHAT"
-            }, {
-                "url": "https://bugs.debian.org/910766",
-                "name": "https://bugs.debian.org/910766",
-                "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/issues/4716",
-                "name": "https://github.com/requests/requests/issues/4716",
-                "tags": ["Exploit", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/pull/4718",
-                "name": "https://github.com/requests/requests/pull/4718",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-1/",
-                "name": "USN-3790-1",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-2/",
-                "name": "USN-3790-2",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }]
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-522"
-                }]
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2018-18074",
-            "ASSIGNER": "cve@mitre.org"
+{
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:opencveio:opencve:1:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7CFBA4E8-EE3D-413C-8175-43F7E42960CA",
+              "versionEndExcluding": "2.20.0",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:opencveio:opencve:2:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7CFBA4E8-EE3D-413C-8175-43F7E42960CA",
+              "versionEndExcluding": "2.20.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
     },
-    "impact": {
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "baseScore": 5.0,
-                "accessVector": "NETWORK",
-                "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
-                "authentication": "NONE",
-                "integrityImpact": "NONE",
-                "accessComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "confidentialityImpact": "PARTIAL"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
             },
-            "severity": "MEDIUM",
-            "impactScore": 2.9,
-            "obtainAllPrivilege": false,
-            "exploitabilityScore": 10.0,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
-        },
-        "baseMetricV3": {
-            "cvssV3": {
-                "scope": "UNCHANGED",
-                "version": "3.0",
-                "baseScore": 9.8,
-                "attackVector": "NETWORK",
-                "baseSeverity": "CRITICAL",
-                "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-                "integrityImpact": "HIGH",
-                "userInteraction": "NONE",
-                "attackComplexity": "LOW",
-                "availabilityImpact": "HIGH",
-                "privilegesRequired": "NONE",
-                "confidentialityImpact": "HIGH"
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "F7016A2A-8365-4F1A-89A2-7A19F2BCAE5B",
+              "vulnerable": true
             },
-            "impactScore": 5.9,
-            "exploitabilityScore": 3.9
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
+              "matchCriteriaId": "07C312A0-CD2C-4B9C-B064-6409B25C278F",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
     },
-    "publishedDate": "2018-10-09T17:29Z",
-    "configurations": {
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:a:opencveio:opencve:1:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:a:opencveio:opencve:2:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }, {
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2021-12-21T13:37Z"
-}]
\ No newline at end of file
+    {
+      "lang": "es",
+      "value": "El paquete Requests antes de la versi\u00f3n 2.20.0 para Python env\u00eda una cabecera de autorizaci\u00f3n HTTP a un URI http al recibir una redirecci\u00f3n same-hostname https-to-http, lo que facilita que los atacantes remotos descibran las credenciales esnifando la red."
+    }
+  ],
+  "id": "CVE-2018-18074",
+  "lastModified": "2024-01-02T00:00:00.000",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 5.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 9.8,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "NONE",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.6,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2018-10-09T17:29:01.897",
+   "references": [
+    {
+        "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "tags": ["Release Notes", "Third Party Advisory"],
+        "source": "CONFIRM"
+    }, {
+        "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
+        "name": "openSUSE-SU-2019:1754",
+        "tags": [],
+        "source": "SUSE"
+    }, {
+        "url": "https://access.redhat.com/errata/RHSA-2019:2035",
+        "name": "RHSA-2019:2035",
+        "tags": [],
+        "source": "REDHAT"
+    }, {
+        "url": "https://bugs.debian.org/910766",
+        "name": "https://bugs.debian.org/910766",
+        "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/issues/4716",
+        "name": "https://github.com/requests/requests/issues/4716",
+        "tags": ["Exploit", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/pull/4718",
+        "name": "https://github.com/requests/requests/pull/4718",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-1/",
+        "name": "USN-3790-1",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-2/",
+        "name": "USN-3790-2",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-522"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2018-18074_references.json b/tests/data/modified_cves/CVE-2018-18074_references.json
index ab9d2905..7555485d 100644
--- a/tests/data/modified_cves/CVE-2018-18074_references.json
+++ b/tests/data/modified_cves/CVE-2018-18074_references.json
@@ -1,111 +1,142 @@
-[{
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": [{
-                "url": "https://www.opencve.io/",
-                "name": "OPENCVE-1234",
-                "tags": ["opencve"],
-                "refsource": "OPENCVE"
-            }, {
-                "url": "https://access.redhat.com/errata/RHSA-2019:2035",
-                "name": "RHSA-2019:2035",
-                "tags": ["opencve"],
-                "refsource": "REDHAT"
-            }, {
-                "url": "https://bugs.debian.org/910766",
-                "name": "https://bugs.debian.org/910766",
-                "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }]
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-522"
-                }]
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2018-18074",
-            "ASSIGNER": "cve@mitre.org"
+{
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7CFBA4E8-EE3D-413C-8175-43F7E42960CA",
+              "versionEndExcluding": "2.20.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
     },
-    "impact": {
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "baseScore": 5.0,
-                "accessVector": "NETWORK",
-                "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
-                "authentication": "NONE",
-                "integrityImpact": "NONE",
-                "accessComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "confidentialityImpact": "PARTIAL"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
             },
-            "severity": "MEDIUM",
-            "impactScore": 2.9,
-            "obtainAllPrivilege": false,
-            "exploitabilityScore": 10.0,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
-        },
-        "baseMetricV3": {
-            "cvssV3": {
-                "scope": "UNCHANGED",
-                "version": "3.0",
-                "baseScore": 9.8,
-                "attackVector": "NETWORK",
-                "baseSeverity": "CRITICAL",
-                "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-                "integrityImpact": "HIGH",
-                "userInteraction": "NONE",
-                "attackComplexity": "LOW",
-                "availabilityImpact": "HIGH",
-                "privilegesRequired": "NONE",
-                "confidentialityImpact": "HIGH"
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "F7016A2A-8365-4F1A-89A2-7A19F2BCAE5B",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
             },
-            "impactScore": 5.9,
-            "exploitabilityScore": 3.9
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
+              "matchCriteriaId": "07C312A0-CD2C-4B9C-B064-6409B25C278F",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network."
     },
-    "publishedDate": "2018-10-09T17:29Z",
-    "configurations": {
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "2.20.0"
-            }]
-        }, {
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2019-10-03T13:37Z"
-}]
\ No newline at end of file
+    {
+      "lang": "es",
+      "value": "El paquete Requests antes de la versi\u00f3n 2.20.0 para Python env\u00eda una cabecera de autorizaci\u00f3n HTTP a un URI http al recibir una redirecci\u00f3n same-hostname https-to-http, lo que facilita que los atacantes remotos descibran las credenciales esnifando la red."
+    }
+  ],
+  "id": "CVE-2018-18074",
+  "lastModified": "2024-01-01T00:00:00.000",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 5.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 9.8,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "NONE",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.6,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2018-10-09T17:29:01.897",
+  "references": [{
+      "url": "https://www.opencve.io/",
+      "name": "OPENCVE-1234",
+      "tags": ["opencve"],
+      "source": "OPENCVE"
+  }, {
+      "url": "https://access.redhat.com/errata/RHSA-2019:2035",
+      "name": "RHSA-2019:2035",
+      "tags": ["opencve"],
+      "source": "REDHAT"
+  }, {
+      "url": "https://bugs.debian.org/910766",
+      "name": "https://bugs.debian.org/910766",
+      "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
+      "source": "MISC"
+  }],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-522"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2018-18074_summary.json b/tests/data/modified_cves/CVE-2018-18074_summary.json
index 4d1e1bd9..34b0510b 100644
--- a/tests/data/modified_cves/CVE-2018-18074_summary.json
+++ b/tests/data/modified_cves/CVE-2018-18074_summary.json
@@ -1,141 +1,174 @@
-[{
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": [{
-                "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
-                "tags": ["Release Notes", "Third Party Advisory"],
-                "refsource": "CONFIRM"
-            }, {
-                "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
-                "name": "openSUSE-SU-2019:1754",
-                "tags": [],
-                "refsource": "SUSE"
-            }, {
-                "url": "https://access.redhat.com/errata/RHSA-2019:2035",
-                "name": "RHSA-2019:2035",
-                "tags": [],
-                "refsource": "REDHAT"
-            }, {
-                "url": "https://bugs.debian.org/910766",
-                "name": "https://bugs.debian.org/910766",
-                "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/issues/4716",
-                "name": "https://github.com/requests/requests/issues/4716",
-                "tags": ["Exploit", "Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://github.com/requests/requests/pull/4718",
-                "name": "https://github.com/requests/requests/pull/4718",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-1/",
-                "name": "USN-3790-1",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }, {
-                "url": "https://usn.ubuntu.com/3790-2/",
-                "name": "USN-3790-2",
-                "tags": ["Third Party Advisory"],
-                "refsource": "UBUNTU"
-            }]
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "The summary has been changed."
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-522"
-                }]
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2018-18074",
-            "ASSIGNER": "cve@mitre.org"
+{
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7CFBA4E8-EE3D-413C-8175-43F7E42960CA",
+              "versionEndExcluding": "2.20.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
     },
-    "impact": {
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "baseScore": 5.0,
-                "accessVector": "NETWORK",
-                "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
-                "authentication": "NONE",
-                "integrityImpact": "NONE",
-                "accessComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "confidentialityImpact": "PARTIAL"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
             },
-            "severity": "MEDIUM",
-            "impactScore": 2.9,
-            "obtainAllPrivilege": false,
-            "exploitabilityScore": 10.0,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
-        },
-        "baseMetricV3": {
-            "cvssV3": {
-                "scope": "UNCHANGED",
-                "version": "3.0",
-                "baseScore": 9.8,
-                "attackVector": "NETWORK",
-                "baseSeverity": "CRITICAL",
-                "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-                "integrityImpact": "HIGH",
-                "userInteraction": "NONE",
-                "attackComplexity": "LOW",
-                "availabilityImpact": "HIGH",
-                "privilegesRequired": "NONE",
-                "confidentialityImpact": "HIGH"
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "F7016A2A-8365-4F1A-89A2-7A19F2BCAE5B",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
             },
-            "impactScore": 5.9,
-            "exploitabilityScore": 3.9
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
+              "matchCriteriaId": "07C312A0-CD2C-4B9C-B064-6409B25C278F",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "The summary has been changed."
     },
-    "publishedDate": "2018-10-09T17:29Z",
-    "configurations": {
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:a:python-requests:requests:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "2.20.0"
-            }]
-        }, {
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
-                "vulnerable": true
-            }, {
-                "cpe23Uri": "cpe:2.3:o:canonical:ubuntu_linux:18.10:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2019-10-03T13:37Z"
-}]
\ No newline at end of file
+    {
+      "lang": "es",
+      "value": "El paquete Requests antes de la versi\u00f3n 2.20.0 para Python env\u00eda una cabecera de autorizaci\u00f3n HTTP a un URI http al recibir una redirecci\u00f3n same-hostname https-to-http, lo que facilita que los atacantes remotos descibran las credenciales esnifando la red."
+    }
+  ],
+  "id": "CVE-2018-18074",
+  "lastModified": "2024-01-01T00:00:00.000",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 5.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 9.8,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "NONE",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 3.6,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2018-10-09T17:29:01.897",
+   "references": [
+    {
+        "url": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "name": "http://docs.python-requests.org/en/master/community/updates/#release-and-version-history",
+        "tags": ["Release Notes", "Third Party Advisory"],
+        "source": "CONFIRM"
+    }, {
+        "url": "http://lists.opensuse.org/opensuse-security-announce/2019-07/msg00024.html",
+        "name": "openSUSE-SU-2019:1754",
+        "tags": [],
+        "source": "SUSE"
+    }, {
+        "url": "https://access.redhat.com/errata/RHSA-2019:2035",
+        "name": "RHSA-2019:2035",
+        "tags": [],
+        "source": "REDHAT"
+    }, {
+        "url": "https://bugs.debian.org/910766",
+        "name": "https://bugs.debian.org/910766",
+        "tags": ["Exploit", "Issue Tracking", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "name": "https://github.com/requests/requests/commit/c45d7c49ea75133e52ab22a8e9e13173938e36ff",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/issues/4716",
+        "name": "https://github.com/requests/requests/issues/4716",
+        "tags": ["Exploit", "Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://github.com/requests/requests/pull/4718",
+        "name": "https://github.com/requests/requests/pull/4718",
+        "tags": ["Patch", "Third Party Advisory"],
+        "source": "MISC"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-1/",
+        "name": "USN-3790-1",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }, {
+        "url": "https://usn.ubuntu.com/3790-2/",
+        "name": "USN-3790-2",
+        "tags": ["Third Party Advisory"],
+        "source": "UBUNTU"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-522"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2019-17052.json b/tests/data/modified_cves/CVE-2019-17052.json
index 07327d7a..215bdfea 100644
--- a/tests/data/modified_cves/CVE-2019-17052.json
+++ b/tests/data/modified_cves/CVE-2019-17052.json
@@ -1,147 +1,256 @@
-[{
-    "cve" : {
-      "data_type" : "CVE",
-      "data_format" : "MITRE",
-      "data_version" : "4.0",
-      "CVE_data_meta" : {
-        "ID" : "CVE-2019-17052",
-        "ASSIGNER" : "cve@mitre.org"
-      },
-      "problemtype" : {
-        "problemtype_data" : [ {
-          "description" : [ {
-            "lang" : "en",
-            "value" : "CWE-276"
-          } ]
-        } ]
-      },
-      "references" : {
-        "reference_data" : [ {
-          "url" : "http://packetstormsecurity.com/files/155212/Slackware-Security-Advisory-Slackware-14.2-kernel-Updates.html",
-          "name" : "http://packetstormsecurity.com/files/155212/Slackware-Security-Advisory-Slackware-14.2-kernel-Updates.html",
-          "refsource" : "MISC",
-          "tags" : [ ]
-        }, {
-          "url" : "https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=2c675dab816278a1724c1e93b384c2f05a11cb31",
-          "name" : "https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=2c675dab816278a1724c1e93b384c2f05a11cb31",
-          "refsource" : "MISC",
-          "tags" : [ ]
-        }, {
-          "url" : "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0614e2b73768b502fc32a75349823356d98aae2c",
-          "name" : "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0614e2b73768b502fc32a75349823356d98aae2c",
-          "refsource" : "MISC",
-          "tags" : [ "Patch", "Vendor Advisory" ]
-        }, {
-          "url" : "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0edc3f703f7bcaf550774b5d43ab727bcd0fe06b",
-          "name" : "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0edc3f703f7bcaf550774b5d43ab727bcd0fe06b",
-          "refsource" : "MISC",
-          "tags" : [ "Patch", "Vendor Advisory" ]
-        }, {
-          "url" : "https://lists.debian.org/debian-lts-announce/2020/01/msg00013.html",
-          "name" : "[debian-lts-announce] 20200118 [SECURITY] [DLA 2068-1] linux security update",
-          "refsource" : "MLIST",
-          "tags" : [ ]
-        }, {
-          "url" : "https://lists.debian.org/debian-lts-announce/2020/03/msg00001.html",
-          "name" : "[debian-lts-announce] 20200302 [SECURITY] [DLA 2114-1] linux-4.9 security update",
-          "refsource" : "MLIST",
-          "tags" : [ ]
-        }, {
-          "url" : "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/U6JNEWGIK7QA24OIUUL67QZNJN52NB7T/",
-          "name" : "FEDORA-2019-41e28660ae",
-          "refsource" : "FEDORA",
-          "tags" : [ ]
-        }, {
-          "url" : "https://seclists.org/bugtraq/2019/Nov/11",
-          "name" : "20191108 [slackware-security] Slackware 14.2 kernel (SSA:2019-311-01)",
-          "refsource" : "BUGTRAQ",
-          "tags" : [ ]
-        }, {
-          "url" : "https://usn.ubuntu.com/4184-1/",
-          "name" : "USN-4184-1",
-          "refsource" : "UBUNTU",
-          "tags" : [ ]
-        }, {
-          "url" : "https://usn.ubuntu.com/4185-1/",
-          "name" : "USN-4185-1",
-          "refsource" : "UBUNTU",
-          "tags" : [ ]
-        }, {
-          "url" : "https://usn.ubuntu.com/4185-2/",
-          "name" : "USN-4185-2",
-          "refsource" : "UBUNTU",
-          "tags" : [ ]
-        }, {
-          "url" : "https://usn.ubuntu.com/4186-1/",
-          "name" : "USN-4186-1",
-          "refsource" : "UBUNTU",
-          "tags" : [ ]
-        }, {
-          "url" : "https://usn.ubuntu.com/4186-2/",
-          "name" : "USN-4186-2",
-          "refsource" : "UBUNTU",
-          "tags" : [ ]
-        } ]
-      },
-      "description" : {
-        "description_data" : [ {
-          "lang" : "en",
-          "value" : "ax25_create in net/ax25/af_ax25.c in the AF_AX25 network module in the Linux kernel 3.16 through 5.3.2 does not enforce CAP_NET_RAW, which means that unprivileged users can create a raw socket, aka CID-0614e2b73768."
-        } ]
-      }
+{
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "B1AC2470-AAEC-4A2B-B144-38DD8323A647",
+              "versionEndIncluding": "5.3.2",
+              "versionStartIncluding": "3.16",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:debian:debian_linux:8.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "C11E6FB0-C8C0-4527-9AA0-CB9B316F8F43",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:29:*:*:*:*:*:*:*",
+              "matchCriteriaId": "D100F7CE-FC64-4CC6-852A-6136D72DA419",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "7A5301BF-1402-4BE0-A0F8-69FBE79BC6D6",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:19.04:*:*:*:*:*:*:*",
+              "matchCriteriaId": "CD783B0C-9246-47D9-A937-6144FE8BFF0F",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "ax25_create in net/ax25/af_ax25.c in the AF_AX25 network module in the Linux kernel 3.16 through 5.3.2 does not enforce CAP_NET_RAW, which means that unprivileged users can create a raw socket, aka CID-0614e2b73768."
     },
-    "configurations" : {
-      "CVE_data_version" : "4.0",
-      "nodes" : [ {
-        "operator" : "OR",
-        "cpe_match" : [ {
-          "vulnerable" : true,
-          "cpe23Uri" : "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
-          "versionEndIncluding" : "5.3.2"
-        } ]
-      } ]
-    },
-    "impact" : {
-      "baseMetricV3" : {
-        "cvssV3" : {
-          "version" : "3.1",
-          "vectorString" : "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N",
-          "attackVector" : "LOCAL",
-          "attackComplexity" : "LOW",
-          "privilegesRequired" : "LOW",
-          "userInteraction" : "NONE",
-          "scope" : "UNCHANGED",
-          "confidentialityImpact" : "NONE",
-          "integrityImpact" : "LOW",
-          "availabilityImpact" : "NONE",
-          "baseScore" : 3.3,
-          "baseSeverity" : "LOW"
+    {
+      "lang": "es",
+      "value": "ax25_create en net / ax25 / af_ax25.c en el m\u00f3dulo de red AF_AX25 en el kernel de Linux versi\u00f3n 3.16 hasta la la versi\u00f3n 5.3.2 no aplica CAP_NET_RAW, lo que significa que los usuarios no privilegiados pueden crear un socket en bruto, tambi\u00e9n conocido como CID-0614e2b73768"
+    }
+  ],
+  "id": "CVE-2019-17052",
+  "lastModified": "2024-01-01T00:00:00.000",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "LOW",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "LOCAL",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 2.1,
+          "confidentialityImpact": "NONE",
+          "integrityImpact": "PARTIAL",
+          "vectorString": "AV:L/AC:L/Au:N/C:N/I:P/A:N",
+          "version": "2.0"
         },
-        "exploitabilityScore" : 1.8,
-        "impactScore" : 1.4
-      },
-      "baseMetricV2" : {
-        "cvssV2" : {
-          "version" : "2.0",
-          "vectorString" : "AV:L/AC:L/Au:N/C:N/I:P/A:N",
-          "accessVector" : "LOCAL",
-          "accessComplexity" : "LOW",
-          "authentication" : "NONE",
-          "confidentialityImpact" : "NONE",
-          "integrityImpact" : "PARTIAL",
-          "availabilityImpact" : "NONE",
-          "baseScore" : 2.1
+        "exploitabilityScore": 3.9,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "LOCAL",
+          "availabilityImpact": "NONE",
+          "baseScore": 3.3,
+          "baseSeverity": "LOW",
+          "confidentialityImpact": "NONE",
+          "integrityImpact": "LOW",
+          "privilegesRequired": "LOW",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N",
+          "version": "3.1"
         },
-        "severity" : "LOW",
-        "exploitabilityScore" : 3.9,
-        "impactScore" : 2.9,
-        "acInsufInfo" : false,
-        "obtainAllPrivilege" : false,
-        "obtainUserPrivilege" : false,
-        "obtainOtherPrivilege" : false,
-        "userInteractionRequired" : false
+        "exploitabilityScore": 1.8,
+        "impactScore": 1.4,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
       }
+    ]
+  },
+  "published": "2019-10-01T14:15:40.397",
+  "references": [
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory",
+        "VDB Entry"
+      ],
+      "url": "http://packetstormsecurity.com/files/155212/Slackware-Security-Advisory-Slackware-14.2-kernel-Updates.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Patch",
+        "Vendor Advisory"
+      ],
+      "url": "https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=2c675dab816278a1724c1e93b384c2f05a11cb31"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Patch",
+        "Vendor Advisory"
+      ],
+      "url": "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0614e2b73768b502fc32a75349823356d98aae2c"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Patch",
+        "Vendor Advisory"
+      ],
+      "url": "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0edc3f703f7bcaf550774b5d43ab727bcd0fe06b"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Third Party Advisory"
+      ],
+      "url": "https://lists.debian.org/debian-lts-announce/2020/01/msg00013.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Third Party Advisory"
+      ],
+      "url": "https://lists.debian.org/debian-lts-announce/2020/03/msg00001.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/U6JNEWGIK7QA24OIUUL67QZNJN52NB7T/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Patch",
+        "Third Party Advisory"
+      ],
+      "url": "https://seclists.org/bugtraq/2019/Nov/11"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4184-1/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4185-1/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4185-2/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4186-1/"
     },
-    "publishedDate" : "2019-10-01T14:15Z",
-    "lastModifiedDate" : "2021-01-04T22:15Z"
-}]
\ No newline at end of file
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4186-2/"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-276"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2020-26116.json b/tests/data/modified_cves/CVE-2020-26116.json
index 720c4454..d01c1db4 100644
--- a/tests/data/modified_cves/CVE-2020-26116.json
+++ b/tests/data/modified_cves/CVE-2020-26116.json
@@ -1,159 +1,332 @@
-[{
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": [{
-                "url": "http://lists.opensuse.org/opensuse-security-announce/2020-11/msg00027.html",
-                "name": "openSUSE-SU-2020:1859",
-                "tags": [],
-                "refsource": "SUSE"
-            }, {
-                "url": "https://bugs.python.org/issue39603",
-                "name": "https://bugs.python.org/issue39603",
-                "tags": ["Exploit", "Issue Tracking", "Patch", "Vendor Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://lists.debian.org/debian-lts-announce/2020/11/msg00032.html",
-                "name": "[debian-lts-announce] 20201119 [SECURITY] [DLA 2456-1] python3.5 security update",
-                "tags": [],
-                "refsource": "MLIST"
-            }, {
-                "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/BW4GCLQISJCOEGQNIMVUZDQMIY6RR6CC/",
-                "name": "FEDORA-2020-221823ebdd",
-                "tags": ["Third Party Advisory"],
-                "refsource": "FEDORA"
-            }, {
-                "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/HDQ2THWU4GPV4Y5H5WW5PFMSWXL2CRFD/",
-                "name": "FEDORA-2020-e33acdea18",
-                "tags": [],
-                "refsource": "FEDORA"
-            }, {
-                "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/JWMAVY4T4257AZHTF2RZJKNJNSJFY24O/",
-                "name": "FEDORA-2020-887d3fa26f",
-                "tags": [],
-                "refsource": "FEDORA"
-            }, {
-                "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/OXI72HIHMXCQFWTULUXDG7VDA2BCYL4Y/",
-                "name": "FEDORA-2020-d30881c970",
-                "tags": [],
-                "refsource": "FEDORA"
-            }, {
-                "url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/QOX7DGMMWWL6POCRYGAUCISOLR2IG3XV/",
-                "name": "FEDORA-2020-d42cb01973",
-                "tags": [],
-                "refsource": "FEDORA"
-            }, {
-                "url": "https://python-security.readthedocs.io/vuln/http-header-injection-method.html",
-                "name": "https://python-security.readthedocs.io/vuln/http-header-injection-method.html",
-                "tags": ["Patch", "Third Party Advisory"],
-                "refsource": "MISC"
-            }, {
-                "url": "https://security.netapp.com/advisory/ntap-20201023-0001/",
-                "name": "https://security.netapp.com/advisory/ntap-20201023-0001/",
-                "tags": [],
-                "refsource": "CONFIRM"
-            }, {
-                "url": "https://usn.ubuntu.com/4581-1/",
-                "name": "USN-4581-1",
-                "tags": [],
-                "refsource": "UBUNTU"
-            }]
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "http.client in Python 3.x before 3.5.10, 3.6.x before 3.6.12, 3.7.x before 3.7.9, and 3.8.x before 3.8.5 allows CRLF injection if the attacker controls the HTTP request method, as demonstrated by inserting CR and LF control characters in the first argument of HTTPConnection.request."
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-116"
-                }]
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2020-26116",
-            "ASSIGNER": "cve@mitre.org"
+{
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "0DCA021D-A322-4442-A030-B723D8F8C7E5",
+              "versionEndExcluding": "3.5.10",
+              "versionStartIncluding": "3.0.0",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "7EB6A6FC-6C82-4543-8DAA-96FF2BACDB5C",
+              "versionEndExcluding": "3.6.12",
+              "versionStartIncluding": "3.6.0",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "045171F0-A76D-4385-B2AE-51479B425C45",
+              "versionEndExcluding": "3.7.9",
+              "versionStartIncluding": "3.7.0",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "9065C407-4FE5-4895-84FC-21B706581C0F",
+              "versionEndExcluding": "3.8.5",
+              "versionStartIncluding": "3.8.0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
     },
-    "impact": {
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "baseScore": 6.4,
-                "accessVector": "NETWORK",
-                "vectorString": "AV:N/AC:L/Au:N/C:P/I:P/A:N",
-                "authentication": "NONE",
-                "integrityImpact": "PARTIAL",
-                "accessComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "confidentialityImpact": "PARTIAL"
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:31:*:*:*:*:*:*:*",
+              "matchCriteriaId": "80F0FA5D-8D3B-4C0E-81E2-87998286AF33",
+              "vulnerable": true
             },
-            "severity": "MEDIUM",
-            "acInsufInfo": false,
-            "impactScore": 4.9,
-            "obtainAllPrivilege": false,
-            "exploitabilityScore": 10.0,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
-        },
-        "baseMetricV3": {
-            "cvssV3": {
-                "scope": "CHANGED",
-                "version": "3.1",
-                "baseScore": 7.2,
-                "attackVector": "NETWORK",
-                "baseSeverity": "HIGH",
-                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N",
-                "integrityImpact": "LOW",
-                "userInteraction": "NONE",
-                "attackComplexity": "LOW",
-                "availabilityImpact": "NONE",
-                "privilegesRequired": "NONE",
-                "confidentialityImpact": "LOW"
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:32:*:*:*:*:*:*:*",
+              "matchCriteriaId": "36D96259-24BD-44E2-96D9-78CE1D41F956",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:fedoraproject:fedora:33:*:*:*:*:*:*:*",
+              "matchCriteriaId": "E460AA51-FCDA-46B9-AE97-E6676AA5E194",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:12.04:*:*:*:-:*:*:*",
+              "matchCriteriaId": "CB66DB75-2B16-4EBF-9B93-CE49D8086E41",
+              "vulnerable": true
             },
-            "impactScore": 2.7,
-            "exploitabilityScore": 3.9
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:14.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "815D70A8-47D3-459C-A32C-9FEACA0659D1",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:16.04:*:*:*:esm:*:*:*",
+              "matchCriteriaId": "7A5301BF-1402-4BE0-A0F8-69FBE79BC6D6",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:o:canonical:ubuntu_linux:18.04:*:*:*:lts:*:*:*",
+              "matchCriteriaId": "23A7C53F-B80F-4E6A-AFA9-58EEA84BE11D",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:netapp:solidfire:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "A6E9EF0C-AFA8-4F7B-9FDC-1E0F7C26E737",
+              "vulnerable": true
+            },
+            {
+              "criteria": "cpe:2.3:h:netapp:hci_compute_node:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "AD7447BC-F315-4298-A822-549942FC118B",
+              "vulnerable": false
+            },
+            {
+              "criteria": "cpe:2.3:h:netapp:hci_storage_node:-:*:*:*:*:*:*:*",
+              "matchCriteriaId": "02DEB4FB-A21D-4CB1-B522-EEE5093E8521",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:debian:debian_linux:9.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "DEECE5FC-CACF-4496-A3E7-164736409252",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:oracle:zfs_storage_appliance_kit:8.8:*:*:*:*:*:*:*",
+              "matchCriteriaId": "D3E503FB-6279-4D4A-91D8-E237ECF9D2B0",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    },
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:o:opensuse:leap:15.1:*:*:*:*:*:*:*",
+              "matchCriteriaId": "B620311B-34A3-48A6-82DF-6F078D7A4493",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "http.client in Python 3.x before 3.5.10, 3.6.x before 3.6.12, 3.7.x before 3.7.9, and 3.8.x before 3.8.5 allows CRLF injection if the attacker controls the HTTP request method, as demonstrated by inserting CR and LF control characters in the first argument of HTTPConnection.request."
+    },
+    {
+      "lang": "es",
+      "value": "http.client en Python 3.x antes de la versi\u00f3n 3.5.10, 3.6.x antes de la versi\u00f3n 3.6.12, 3.7.x antes de la versi\u00f3n 3.7.9, y 3.8.x antes de la versi\u00f3n 3.8.5 permite la inyecci\u00f3n de CRLF si el atacante controla el m\u00e9todo de petici\u00f3n HTTP, como se demuestra insertando caracteres de control CR y LF en el primer argumento de HTTPConnection.request"
+    }
+  ],
+  "id": "CVE-2020-26116",
+  "lastModified": "2023-11-07T03:20:30.150",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 6.4,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "PARTIAL",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:P/A:N",
+          "version": "2.0"
+        },
+        "exploitabilityScore": 10.0,
+        "impactScore": 4.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "NONE",
+          "baseScore": 7.2,
+          "baseSeverity": "HIGH",
+          "confidentialityImpact": "LOW",
+          "integrityImpact": "LOW",
+          "privilegesRequired": "NONE",
+          "scope": "CHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 2.7,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2020-09-27T04:15:11.587",
+  "references": [
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Third Party Advisory"
+      ],
+      "url": "http://lists.opensuse.org/opensuse-security-announce/2020-11/msg00027.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Exploit",
+        "Issue Tracking",
+        "Patch",
+        "Vendor Advisory"
+      ],
+      "url": "https://bugs.python.org/issue39603"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Mailing List",
+        "Third Party Advisory"
+      ],
+      "url": "https://lists.debian.org/debian-lts-announce/2020/11/msg00032.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.debian.org/debian-lts-announce/2023/05/msg00024.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/BW4GCLQISJCOEGQNIMVUZDQMIY6RR6CC/"
     },
-    "publishedDate": "2020-09-27T04:15Z",
-    "configurations": {
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "3.5.10",
-                "versionStartIncluding": "3.0.0"
-            }, {
-                "cpe23Uri": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "3.6.12",
-                "versionStartIncluding": "3.6.0"
-            }, {
-                "cpe23Uri": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "3.7.9",
-                "versionStartIncluding": "3.7.0"
-            }, {
-                "cpe23Uri": "cpe:2.3:a:python:python:*:*:*:*:*:*:*:*",
-                "vulnerable": true,
-                "versionEndExcluding": "3.8.5",
-                "versionStartIncluding": "3.8.0"
-            }]
-        }, {
-            "operator": "OR",
-            "cpe_match": [{
-                "cpe23Uri": "cpe:2.3:o:fedoraproject:fedora:33:*:*:*:*:*:*:*",
-                "vulnerable": true
-            }]
-        }],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2020-11-19T07:15Z"
-}]
\ No newline at end of file
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/HDQ2THWU4GPV4Y5H5WW5PFMSWXL2CRFD/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/JWMAVY4T4257AZHTF2RZJKNJNSJFY24O/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/OXI72HIHMXCQFWTULUXDG7VDA2BCYL4Y/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "url": "https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/QOX7DGMMWWL6POCRYGAUCISOLR2IG3XV/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Patch",
+        "Third Party Advisory"
+      ],
+      "url": "https://python-security.readthedocs.io/vuln/http-header-injection-method.html"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://security.gentoo.org/glsa/202101-18"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://security.netapp.com/advisory/ntap-20201023-0001/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Third Party Advisory"
+      ],
+      "url": "https://usn.ubuntu.com/4581-1/"
+    },
+    {
+      "source": "cve@mitre.org",
+      "tags": [
+        "Patch",
+        "Third Party Advisory"
+      ],
+      "url": "https://www.oracle.com/security-alerts/cpuoct2021.html"
+    }
+  ],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-74"
+        }
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2020-35188_cpes.json b/tests/data/modified_cves/CVE-2020-35188_cpes.json
index ef5b5362..61d0a02b 100644
--- a/tests/data/modified_cves/CVE-2020-35188_cpes.json
+++ b/tests/data/modified_cves/CVE-2020-35188_cpes.json
@@ -1,119 +1,102 @@
-[{
-    "cve": {
-        "data_type": "CVE",
-        "data_format": "MITRE",
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2020-35188",
-            "ASSIGNER": "cve@mitre.org"
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": [{
-                    "lang": "en",
-                    "value": "CWE-306"
-                }]
-            }]
-        },
-        "references": {
-            "reference_data": [{
-                "url": "https://github.com/koharin/koharin2/blob/main/CVE-2020-35188",
-                "name": "https://github.com/koharin/koharin2/blob/main/CVE-2020-35188",
-                "refsource": "MISC",
-                "tags": ["Third Party Advisory"]
-            }]
-        },
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "The official chronograf docker images before 1.7.7-alpine (Alpine specific) contain a blank password for a root user. System using the chronograf docker container deployed by affected versions of the docker image may allow a remote attacker to achieve root access with a blank password."
-            }]
-        }
-    },
-    "configurations": {
-        "CVE_data_version": "4.0",
-        "nodes": [{
-            "operator": "OR",
-            "cpe_match": [{
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.3.9.0-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.4.3.0-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.5.0.0-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.6.0-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.6.1-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.2-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.3-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.4-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.5-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.6-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:influxdata:chronograf:1.7.7-alpine:*:*:*:*:*:*:*"
-            }, {
-                "vulnerable": true,
-                "cpe23Uri": "cpe:2.3:a:opencveio:opencve:*:*:*:*:*:*:*:*"
-            }]
-        }]
-    },
-    "impact": {
-        "baseMetricV3": {
-            "cvssV3": {
-                "version": "3.1",
-                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
-                "attackVector": "NETWORK",
-                "attackComplexity": "LOW",
-                "privilegesRequired": "NONE",
-                "userInteraction": "NONE",
-                "scope": "UNCHANGED",
-                "confidentialityImpact": "HIGH",
-                "integrityImpact": "HIGH",
-                "availabilityImpact": "HIGH",
-                "baseScore": 9.8,
-                "baseSeverity": "CRITICAL"
+{
+  "configurations": [
+    {
+      "nodes": [
+        {
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:influxdata:chronograf:1.3.9.0-alpine:*:*:*:*:*:*:*",
+              "matchCriteriaId": "FBD33137-D4FD-475B-B678-55CFB3591FFE",
+              "vulnerable": true
             },
-            "exploitabilityScore": 3.9,
-            "impactScore": 5.9
+            {
+              "criteria": "cpe:2.3:a:opencveio:opencve:*:*:*:*:*:*:*:*",
+              "matchCriteriaId": "FBD33137-D4FD-475B-B678-55CFB3591FFE",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
+        }
+      ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "The official chronograf docker images before 1.7.7-alpine (Alpine specific) contain a blank password for a root user. System using the chronograf docker container deployed by affected versions of the docker image may allow a remote attacker to achieve root access with a blank password."
+    }
+  ],
+  "id": "CVE-2020-35188",
+  "lastModified": "2024-01-01T00:00:00.000",
+  "metrics": {
+    "cvssMetricV2": [
+      {
+        "acInsufInfo": false,
+        "baseSeverity": "MEDIUM",
+        "cvssData": {
+          "accessComplexity": "LOW",
+          "accessVector": "NETWORK",
+          "authentication": "NONE",
+          "availabilityImpact": "NONE",
+          "baseScore": 10.0,
+          "confidentialityImpact": "PARTIAL",
+          "integrityImpact": "NONE",
+          "vectorString": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
+          "version": "2.0"
         },
-        "baseMetricV2": {
-            "cvssV2": {
-                "version": "2.0",
-                "vectorString": "AV:N/AC:L/Au:N/C:C/I:C/A:C",
-                "accessVector": "NETWORK",
-                "accessComplexity": "LOW",
-                "authentication": "NONE",
-                "confidentialityImpact": "COMPLETE",
-                "integrityImpact": "COMPLETE",
-                "availabilityImpact": "COMPLETE",
-                "baseScore": 10.0
-            },
-            "severity": "HIGH",
-            "exploitabilityScore": 10.0,
-            "impactScore": 10.0,
-            "acInsufInfo": false,
-            "obtainAllPrivilege": false,
-            "obtainUserPrivilege": false,
-            "obtainOtherPrivilege": false,
-            "userInteractionRequired": false
+        "exploitabilityScore": 10.0,
+        "impactScore": 2.9,
+        "obtainAllPrivilege": false,
+        "obtainOtherPrivilege": false,
+        "obtainUserPrivilege": false,
+        "source": "nvd@nist.gov",
+        "type": "Primary",
+        "userInteractionRequired": false
+      }
+    ],
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "HIGH",
+          "baseScore": 9.8,
+          "baseSeverity": "CRITICAL",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "HIGH",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 5.9,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      }
+    ]
+  },
+  "published": "2022-09-05T14:15:08.510",
+  "references": [{
+      "url": "https://github.com/koharin/koharin2/blob/main/CVE-2020-35188",
+      "name": "https://github.com/koharin/koharin2/blob/main/CVE-2020-35188",
+      "source": "MISC",
+      "tags": ["Third Party Advisory"]
+  }],
+  "sourceIdentifier": "cna@vuldb.com",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
+        {
+          "lang": "en",
+          "value": "CWE-306"
         }
-    },
-    "publishedDate": "2020-12-17T02:15Z",
-    "lastModifiedDate": "2021-12-18T16:23Z"
-}]
\ No newline at end of file
+      ],
+      "source": "1af790b2-7ee1-4545-860a-a788eba489b5",
+      "type": "Secondary"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2020-35188_rejected.json b/tests/data/modified_cves/CVE-2020-35188_rejected.json
index cd14bed6..1e5fcbd7 100644
--- a/tests/data/modified_cves/CVE-2020-35188_rejected.json
+++ b/tests/data/modified_cves/CVE-2020-35188_rejected.json
@@ -1,32 +1,15 @@
-[{
-    "cve": {
-        "data_type": "CVE",
-        "references": {
-            "reference_data": []
-        },
-        "data_format": "MITRE",
-        "description": {
-            "description_data": [{
-                "lang": "en",
-                "value": "** REJECT ** DO NOT USE THIS CANDIDATE NUMBER. ConsultIDs: CVE-2019-5021. Reason: This candidate is a reservation duplicate of CVE-2019-5021. Notes: All CVE users should reference CVE-2019-5021 instead of this candidate. All references and descriptions in this candidate have been removed to prevent accidental usage"
-            }]
-        },
-        "problemtype": {
-            "problemtype_data": [{
-                "description": []
-            }]
-        },
-        "data_version": "4.0",
-        "CVE_data_meta": {
-            "ID": "CVE-2020-35188",
-            "ASSIGNER": "cve@mitre.org"
-        }
-    },
-    "impact": {},
-    "publishedDate": "2020-12-17T02:15Z",
-    "configurations": {
-        "nodes": [],
-        "CVE_data_version": "4.0"
-    },
-    "lastModifiedDate": "2021-01-04T17:15Z"
-}]
\ No newline at end of file
+{
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "** REJECT ** DO NOT USE THIS CANDIDATE NUMBER. ConsultIDs: CVE-2019-5021. Reason: This candidate is a reservation duplicate of CVE-2019-5021. Notes: All CVE users should reference CVE-2019-5021 instead of this candidate. All references and descriptions in this candidate have been removed to prevent accidental usage"
+    }
+  ],
+  "id": "CVE-2020-35188",
+  "lastModified": "2024-01-01T00:00:00.000",
+  "metrics": {},
+  "published": "2020-12-17T02:15:13.003",
+  "references": [],
+  "sourceIdentifier": "cve@mitre.org",
+  "vulnStatus": "Rejected"
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/CVE-2022-3122_references.json b/tests/data/modified_cves/CVE-2022-3122_references.json
index fa106bc2..de3775c4 100644
--- a/tests/data/modified_cves/CVE-2022-3122_references.json
+++ b/tests/data/modified_cves/CVE-2022-3122_references.json
@@ -1,49 +1,114 @@
-[{
-  "cve": {
-    "data_type": "CVE",
-    "references": {
-      "reference_data": [
+{
+  "configurations": [
+    {
+      "nodes": [
         {
-          "url": "https://github.com/joinia/webray.com.cn/blob/main/Clinic's-Patient-Management-System/cpmssql.md",
-          "name": "https://github.com/joinia/webray.com.cn/blob/main/Clinic's-Patient-Management-System/cpmssql.md",
-          "tags": ["Exploit", "Third Party Advisory"],
-          "refsource": "MISC"
-        },
-        {
-          "url": "https://vuldb.com/?id.207854",
-          "name": "https://vuldb.com/?id.207854",
-          "tags": [],
-          "refsource": "MISC"
+          "cpeMatch": [
+            {
+              "criteria": "cpe:2.3:a:clinic\\'s_patient_management_system_project:clinic\\'s_patient_management_system:1.0:*:*:*:*:*:*:*",
+              "matchCriteriaId": "FBD33137-D4FD-475B-B678-55CFB3591FFE",
+              "vulnerable": true
+            }
+          ],
+          "negate": false,
+          "operator": "OR"
         }
       ]
+    }
+  ],
+  "descriptions": [
+    {
+      "lang": "en",
+      "value": "A vulnerability was found in SourceCodester Clinics Patient Management System 1.0. It has been rated as critical. Affected by this issue is some unknown functionality of the file medicine_details.php. The manipulation of the argument medicine leads to sql injection. The attack may be launched remotely. The exploit has been disclosed to the public and may be used. VDB-207854 is the identifier assigned to this vulnerability."
+    },
+    {
+      "lang": "es",
+      "value": "Se ha encontrado una vulnerabilidad en SourceCodester Clinics Patient Management System versi\u00f3n 1.0. Ha sido calificada como cr\u00edtica. Este problema afecta a una funcionalidad desconocida del archivo medicine_details.php. La manipulaci\u00f3n del argumento medicine conlleva a una inyecci\u00f3n sql. El ataque puede ser lanzado remotamente. La explotaci\u00f3n ha sido divulgada al p\u00fablico y puede ser usada. VDB-207854 es el identificador asignado a esta vulnerabilidad"
+    }
+  ],
+  "id": "CVE-2022-3122",
+  "lastModified": "2024-01-01T00:00:00.000",
+  "metrics": {
+    "cvssMetricV31": [
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "HIGH",
+          "baseScore": 9.8,
+          "baseSeverity": "CRITICAL",
+          "confidentialityImpact": "HIGH",
+          "integrityImpact": "HIGH",
+          "privilegesRequired": "NONE",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 3.9,
+        "impactScore": 5.9,
+        "source": "nvd@nist.gov",
+        "type": "Primary"
+      },
+      {
+        "cvssData": {
+          "attackComplexity": "LOW",
+          "attackVector": "NETWORK",
+          "availabilityImpact": "LOW",
+          "baseScore": 6.3,
+          "baseSeverity": "MEDIUM",
+          "confidentialityImpact": "LOW",
+          "integrityImpact": "LOW",
+          "privilegesRequired": "LOW",
+          "scope": "UNCHANGED",
+          "userInteraction": "NONE",
+          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L",
+          "version": "3.1"
+        },
+        "exploitabilityScore": 2.8,
+        "impactScore": 3.4,
+        "source": "1af790b2-7ee1-4545-860a-a788eba489b5",
+        "type": "Secondary"
+      }
+    ]
+  },
+  "published": "2022-09-05T14:15:08.510",
+  "references": [
+    {
+      "url": "https://github.com/joinia/webray.com.cn/blob/main/Clinic's-Patient-Management-System/cpmssql.md",
+      "name": "https://github.com/joinia/webray.com.cn/blob/main/Clinic's-Patient-Management-System/cpmssql.md",
+      "tags": ["Exploit", "Third Party Advisory"],
+      "source": "MISC"
     },
-    "data_format": "MITRE",
-    "description": {
-      "description_data": [
+    {
+      "url": "https://vuldb.com/?id.207854",
+      "name": "https://vuldb.com/?id.207854",
+      "tags": [],
+      "source": "MISC"
+    }
+  ],
+  "sourceIdentifier": "cna@vuldb.com",
+  "vulnStatus": "Modified",
+  "weaknesses": [
+    {
+      "description": [
         {
           "lang": "en",
-          "value": "A vulnerability was found in SourceCodester Clinics Patient Management System 1.0. It has been rated as critical. Affected by this issue is some unknown functionality of the file medicine_details.php. The manipulation of the argument medicine leads to sql injection. The attack may be launched remotely. The exploit has been disclosed to the public and may be used. VDB-207854 is the identifier assigned to this vulnerability."
+          "value": "CWE-89"
         }
-      ]
+      ],
+      "source": "nvd@nist.gov",
+      "type": "Primary"
     },
-    "problemtype": {
-      "problemtype_data": [
+    {
+      "description": [
         {
-          "description": []
+          "lang": "en",
+          "value": "CWE-89"
         }
-      ]
-    },
-    "data_version": "4.0",
-    "CVE_data_meta": {
-      "ID": "CVE-2022-3122",
-      "ASSIGNER": "cna@vuldb.com"
+      ],
+      "source": "1af790b2-7ee1-4545-860a-a788eba489b5",
+      "type": "Secondary"
     }
-  },
-  "impact": {},
-  "publishedDate": "2022-09-05T14:15Z",
-  "configurations": {
-    "nodes": [],
-    "CVE_data_version": "4.0"
-  },
-  "lastModifiedDate": "2022-09-06T09:00Z"
-}]
+  ]
+}
\ No newline at end of file
diff --git a/tests/data/modified_cves/nvdcve-1.1-modified.json.gz b/tests/data/modified_cves/nvdcve-1.1-modified.json.gz
deleted file mode 100644
index 3d5ee3f7..00000000
Binary files a/tests/data/modified_cves/nvdcve-1.1-modified.json.gz and /dev/null differ
diff --git a/tests/data/nvdcve-1.1-modified.meta b/tests/data/nvdcve-1.1-modified.meta
deleted file mode 100644
index e42d3963..00000000
--- a/tests/data/nvdcve-1.1-modified.meta
+++ /dev/null
@@ -1,5 +0,0 @@
-lastModifiedDate:2020-12-17T16:01:45-05:00
-size:4245582
-zipSize:294883
-gzSize:294739
-sha256:CE80026155D878F20E49576A1C7D2A52163CF4C52C1CCCC41497CA14E03761D5
diff --git a/tests/tasks/test_alerts.py b/tests/tasks/test_alerts.py
index 96a3c322..6b3887f1 100644
--- a/tests/tasks/test_alerts.py
+++ b/tests/tasks/test_alerts.py
@@ -26,7 +26,7 @@ def test_filter_events(app, create_user, create_cve, open_file, types):
     def create_events(cve):
         for t in ["summary", "cpes", "cwes", "cvss", "references"]:
             CveUtil.create_event(
-                cve, open_file(f"modified_cves/CVE-2018-18074_{t}.json")[0], t, {}
+                cve, open_file(f"modified_cves/CVE-2018-18074_{t}.json"), t, {}
             )
 
     user = create_user()
@@ -52,7 +52,7 @@ def test_filter_events_first_time(create_user, create_cve, create_vendor, open_f
     cve = create_cve("CVE-2018-18074")
     event = CveUtil.create_event(
         cve,
-        open_file(f"modified_cves/CVE-2018-18074_first_time_1.json")[0],
+        open_file(f"modified_cves/CVE-2018-18074_first_time_1.json"),
         "first_time",
         ["opencveio", "opencveio$PRODUCT$opencveio"],
     )
diff --git a/tests/tasks/test_events.py b/tests/tasks/test_events.py
index 561adb01..fedcee2a 100644
--- a/tests/tasks/test_events.py
+++ b/tests/tasks/test_events.py
@@ -6,56 +6,6 @@
 from opencve.models.events import Event
 from opencve.models.tasks import Task
 from opencve.models.cve import Cve
-from opencve.models.metas import Meta
-from opencve.tasks.events import has_changed, download_modified_items
-
-
-@patch("opencve.tasks.events.requests.get")
-def test_has_changed(mock_get, open_raw_file, handle_events):
-    old = "default"
-    new = "CE80026155D878F20E49576A1C7D2A52163CF4C52C1CCCC41497CA14E03761D5"
-    type(mock_get.return_value).content = PropertyMock(
-        return_value=open_raw_file("nvdcve-1.1-modified.meta").encode("utf-8")
-    )
-
-    # Create the initial meta
-    db.session.add(Meta(name="nvd_last_sha256", value=old))
-    db.session.commit()
-
-    # The sha256 has changed
-    meta, sha256 = has_changed()
-    assert meta.value == old
-    assert sha256 == new
-
-
-@patch("opencve.tasks.events.requests.get")
-def test_has_not_changed(mock_get, open_raw_file, handle_events):
-    value = "CE80026155D878F20E49576A1C7D2A52163CF4C52C1CCCC41497CA14E03761D5"
-    type(mock_get.return_value).content = PropertyMock(
-        return_value=open_raw_file("nvdcve-1.1-modified.meta").encode("utf-8")
-    )
-
-    # Create the initial meta
-    db.session.add(Meta(name="nvd_last_sha256", value=value))
-    db.session.commit()
-
-    # The sha256 has changed
-    meta, sha256 = has_changed()
-    assert meta.value == value
-    assert sha256 == None
-
-
-@patch("opencve.tasks.events.requests.get")
-def test_download_modified_items(mock_get, open_raw_file):
-    with open(
-        Path(__file__).parent.parent.resolve()
-        / "data/modified_cves/nvdcve-1.1-modified.json.gz"
-    ) as f:
-        data = f.buffer.read()
-    type(mock_get.return_value).content = PropertyMock(return_value=data)
-    items = download_modified_items()
-    assert len(items) == 1
-    assert items[0]["cve"]["CVE_data_meta"]["ID"] == "CVE-2005-0366"
 
 
 def test_new_cve_detected(handle_events):
@@ -81,7 +31,7 @@ def test_new_cve_detected(handle_events):
     assert len(changes) == 1
     change = changes[0]
     assert change.task.id == task.id
-    assert change.json["cve"]["CVE_data_meta"]["ID"] == "CVE-2018-18074"
+    assert change.json["id"] == "CVE-2018-18074"
 
     # Event has been created
     events = Event.query.all()
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 9729add4..b4f5884c 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -81,28 +81,16 @@ def test_get_cwes():
     assert sorted(get_cwes(problems)) == ["CWE-532", "CWE-732"]
 
 
-def test_get_cwes_details():
+def test_get_cwes_details(open_file):
     db.session.add(
-        Cwe(cwe_id="CWE-1", name="Name of CWE-1", description="Description of CWE-1")
-    )
-    db.session.add(
-        Cwe(cwe_id="CWE-2", name="Name of CWE-2", description="Description of CWE-2")
+        Cwe(
+            cwe_id="CWE-522",
+            name="Name of CWE-522",
+            description="Description of CWE-522",
+        )
     )
     db.session.commit()
 
-    cwes = get_cwes_details(
-        [{"lang": "en", "value": "CWE-1"}, {"lang": "en", "value": "CWE-2"}]
-    )
-    assert cwes == {"CWE-1": "Name of CWE-1", "CWE-2": "Name of CWE-2"}
-
-    cwes = get_cwes_details(
-        [
-            {"lang": "en", "value": "CWE-1"},
-            {"lang": "en", "value": "CWE-1"},
-            {"lang": "en", "value": "CWE-2"},
-        ]
-    )
-    assert cwes == {"CWE-1": "Name of CWE-1", "CWE-2": "Name of CWE-2"}
-
-    cwes = get_cwes_details([{"lang": "en", "value": "CWE-3"}])
-    assert cwes == {"CWE-3": None}
+    data = open_file("cves/CVE-2018-18074.json")
+    cwes = get_cwes_details(data)
+    assert cwes == {"CWE-522": "Name of CWE-522"}
diff --git a/tests/views/test_cves.py b/tests/views/test_cves.py
index 7d793d91..1ba17c25 100644
--- a/tests/views/test_cves.py
+++ b/tests/views/test_cves.py
@@ -87,7 +87,7 @@ def test_get_change(client, create_cve, handle_events, make_soup):
 
     soup = make_soup(response.data)
     assert sorted([s.text for s in soup.find("table").find("tr").find_all("td")]) == [
+        "(en) The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network.",
+        "(en) The summary has been changed.",
         "Summary",
-        "The Requests package before 2.20.0 for Python sends an HTTP Authorization header to an http URI upon receiving a same-hostname https-to-http redirect, which makes it easier for remote attackers to discover credentials by sniffing the network.",
-        "The summary has been changed.",
     ]
diff --git a/tests/views/test_home.py b/tests/views/test_home.py
index 93aeede0..590005e1 100644
--- a/tests/views/test_home.py
+++ b/tests/views/test_home.py
@@ -144,8 +144,8 @@ def test_list_paginated(app, client, login, handle_events, make_soup):
     # Page 1
     soup = make_soup(response.data)
     dates = [s.find("span").text for s in soup.find_all(attrs={"class": "time-label"})]
-    assert "04 Jan 2021" in dates[0]
-    assert "19 Nov 2020" in dates[1]
+    assert "01 Jan 2024" in dates[0]
+    assert "07 Nov 2023" in dates[1]
     dates = [
         s.find("a").text for s in soup.find_all(attrs={"class": "timeline-header"})
     ]
@@ -156,7 +156,7 @@ def test_list_paginated(app, client, login, handle_events, make_soup):
     response = client.get("/?page=2")
     soup = make_soup(response.data)
     dates = [s.find("span").text for s in soup.find_all(attrs={"class": "time-label"})]
-    assert "03 Oct 2019" in dates[0]
+    assert "25 Jul 2022" in dates[0]
     dates = [
         s.find("a").text for s in soup.find_all(attrs={"class": "timeline-header"})
     ]