Fact-checked by Grok 2 weeks ago

Common Platform Enumeration

Common Platform Enumeration (CPE) is a standardized, machine-readable naming scheme for identifying information technology systems, software, and packages, utilizing syntax to encode product names in a structured format. Developed initially by to support consistent references across cybersecurity specifications, CPE enables precise identification of IT assets for and security automation. CPE forms a core component of the U.S. National Institute of Standards and Technology's (NIST) Security Content Automation Protocol (SCAP), providing a formal method for naming operating systems, hardware devices, applications, and their versions. The current specification, CPE 2.3, released in August 2011, defines a layered set of capabilities including a naming scheme, procedures for comparing names, and applicability statements that combine multiple CPE names with logical operators. NIST maintains the official CPE Dictionary, an XML-based repository of approved names that is updated nightly and accepts public contributions since December 2009, ensuring coverage of current and historical product releases. In practice, CPE facilitates automated security processes by allowing tools to match vulnerabilities—such as those in the (CVE) list—to specific platforms, enhancing and patch management across enterprises. By standardizing , it reduces ambiguity in IT inventories, supports among security products, and aids in compliance with frameworks like SCAP-validated tools.

Overview

Definition

Common Platform Enumeration (CPE) is a structured, machine-readable naming scheme developed for identifying products, encompassing hardware, operating systems, applications, and packages. It establishes a standardized that enables consistent and unambiguous references to these entities across diverse systems and databases. By providing a formal format for product names, CPE facilitates automated processing and interoperability in and contexts. Key characteristics of CPE include its uniform vocabulary, which draws from a centrally maintained to ensure consistent for product descriptions, and its extensibility, allowing the incorporation of additional attributes as needed without disrupting existing implementations. Furthermore, CPE names are formatted as Uniform Resource Identifiers (s), leveraging URI syntax to guarantee global uniqueness and ease of by machines. This URI-based structure supports precise matching and comparison of product identifiers in large-scale environments. Unlike Software Identification (SWID) tags, which provide comprehensive for software lifecycle tracking including details and entitlements, CPE emphasizes through concise, standardized naming primarily for cataloging and reference purposes. In practice, CPE plays a critical role in vulnerability identification by enabling tools to map known issues to specific platforms.

Purpose and Applications

Common Platform Enumeration (CPE) serves as a standardized for precisely identifying products, including , operating systems, and applications, to facilitate automated processes in and . Its primary objective is to provide a structured, machine-readable format that enables consistent naming and classification of IT assets, thereby supporting by linking specific platforms to known issues. This approach addresses the challenges of ambiguous product descriptions in traditional inventories, allowing tools to accurately detect and enumerate software and systems across diverse environments. In practical applications, CPE plays a central role in vulnerability management by enabling lookups against databases like the (CVE) list, where identifiers help determine applicable threats to identified platforms. It integrates with the (SCAP) to automate compliance evaluations, such as verifying adherence to security configurations and policies through tagged applicability statements. Additionally, CPE supports by streamlining software inventory processes, ensuring organizations can track and update IT components efficiently without reliance on inconsistent vendor-specific naming. The benefits of CPE include reducing ambiguity in product identification, which minimizes errors in assessments and patch deployment, and promoting among tools from different vendors through a shared vocabulary maintained in the official NIST CPE Dictionary. This standardization aids in patch management by directly associating names with specific vulnerabilities, enabling proactive risk mitigation and scalable automation in large-scale IT operations.

Development

Origins

Common Platform Enumeration (CPE) was developed by the under sponsorship from the U.S. Department of (DHS), with initial efforts beginning in the mid-2000s to establish a standardized method for identifying products and platforms. This work aimed to enable machine-readable naming that could support automated processes, building on the recognition that inconsistent product nomenclature hindered effective across diverse databases. The primary motivation for CPE's creation stemmed from longstanding challenges in vulnerability reporting, particularly the inconsistencies in naming IT products affected by security issues, which traced back to the early Common Vulnerabilities and Exposures (CVE) program's experiences in the late 1990s. At that time, multiple security databases used varying terms for the same vulnerabilities and associated platforms, complicating correlation, duplication detection, and overall interoperability in threat intelligence sharing. By providing a structured, uniform naming scheme, CPE sought to resolve these issues, facilitating better automation in software inventory, configuration assessment, and vulnerability scanning. Key early contributors included MITRE's CVE team, which leveraged its expertise in vulnerability enumeration to drive CPE's design as an . This involved with stakeholders to ensure broad applicability and adoption, emphasizing a community-driven approach to refine the specification for real-world security needs. Over time, oversight of CPE transitioned to the of Standards and Technology (NIST) to further integrate it into broader security automation frameworks.

Version History

The development of Common Platform Enumeration (CPE) began with version 1.1, released on March 13, 2007, by MITRE Corporation under sponsorship from the U.S. Department of Homeland Security. This initial specification introduced a basic structured naming scheme for identifying information technology platforms, encompassing hardware, operating systems, and applications. It emphasized simple string formats using a URI-like syntax, such as cpe:/{part}:{vendor}:{product}:{version}, with optional facets separated by slashes to denote hardware, OS, or application components, enabling straightforward enumeration without complex attributes. Version 2.2, published on March 11, 2009, marked a significant refinement by and the . It prescribed a more formalized name format, cpe:/{part}:{vendor}:{product}:{version}:{update}:{edition}:{language}, which expanded attributes for greater precision in describing product variations, including support for language tags per IETF standards and edition details. This version also introduced initial support through an official XML-based collection of standardized CPE names, complete with and submission processes for community contributions, facilitating centralized management and validation. CPE version 2.3, released by the National Institute of Standards and Technology (NIST) in August 2011, represented a major architectural evolution. It shifted to a modular "specification stack" comprising naming, matching, dictionary, and applicability layers, promoting within the (SCAP). While functional changes were minimal—retaining core compatibility—improvements included the well-formed name (WFN) , new attributes like software edition and target hardware, and enhanced bindings for formatted strings, all aimed at better modularity and extensibility. As of 2025, version 2.3 remains the current specification, actively maintained by NIST with no full version 3.0 released. Post-2.3 updates have consisted of maintenance releases, such as minor clarifications and bug fixes to the naming in 2011, alongside ongoing expansions to the official CPE through nightly updates to incorporate new product names and refine existing entries.

Naming Scheme

URI Format

The Common Platform Enumeration (CPE) URI format provides a structured, machine-readable representation of CPE names, adhering to the generic syntax for Uniform Resource Identifiers () as defined in RFC 3986. This format ensures consistent identification of products, platforms, and configurations across tools and databases. The URI binding of a CPE name consists of a scheme identifier followed by attribute values separated by colons, with all components mandatory for well-formedness. The general syntax of a CPE URI is cpe:<version>:<part>:<vendor>:<product>:<version>:<update>:<edition>:<language>:<sw_edition>:<target_sw>:<target_hw>, where each attribute is a string value (potentially empty) and colons delimit the fields. Here, <version> specifies the CPE Naming Specification version, <part> indicates the type of platform, and the remaining nine attributes describe the entity's vendor, product details, version information, edition, language, software edition, target software, and target hardware, respectively. For example, a URI might appear as cpe:2.3:a:ntp:ntp:4.2.8:p3:*:*:*:*:*:*:*, representing a specific NTP application version. The version indicator, such as "2.3", denotes the version of the CPE Naming Specification under which the name is constructed, ensuring compatibility with the corresponding specification rules (e.g., "2.3" aligns with CPE Naming Specification Version 2.3). The part indicator follows immediately and uses one of three values: "a" for applications, "o" for operating systems, or "h" for hardware, which determines the semantic context for the subsequent attributes. Reserved URI characters within attribute values must be escaped using hexadecimal encoding to maintain syntactic validity, as per URI rules. For instance, the (~) is encoded as %7E and the (!) as %21. Only reserved URI characters (per 3986) that appear in attribute values require ; common characters like periods (.) and hyphens (-) in versions are not encoded. This escaping applies specifically to the URI binding, distinct from the logical Well-Formed Name (WFN) representation, which uses quoting for certain characters. A CPE URI is considered well-formed only if all components are present, even when an attribute value is empty or not applicable; unspecified attributes (logical ANY) are represented by empty components (consecutive colons ::), while not applicable (NA) uses a hyphen (-). Asterisks (*) are used in formatted strings for wildcard matching purposes. Attribute strings must consist of printable UTF-8 characters, with non-alphanumeric characters properly quoted or encoded to avoid parsing errors. This rigid structure facilitates automated processing in vulnerability management systems and standardized dictionaries.

Component Attributes

The component attributes in a Common Platform Enumeration (CPE) name provide structured fields to identify specific aspects of an IT product, such as its producer, release details, and target environment. These attributes form the core of the Well-Formed Name (WFN) , where each is represented as a key-value pair, and unspecified attributes default to the logical value "ANY" to allow for flexible matching. Specified attribute values must be non-empty strings encoded in , consisting of printable ASCII characters (hex 00-7F), with alphanumeric characters, underscores, and hyphens permitted; spaces are prohibited, and multi-word names use hyphens or underscores for separation. Special characters like asterisks (*) or question marks (?) are reserved for wildcard usage at the start or end of strings, while other non-alphanumeric characters require escaping. The vendor attribute identifies the organization or individual responsible for producing the product, such as "" for software developed by Corporation; it is required in formatted CPE names to ensure unambiguous identification and must be specified in lowercase letters without spaces. For example, in a CPE name for Windows, the vendor would be "". This attribute supports precise vulnerability mapping by distinguishing products from different vendors with similar names. The product attribute denotes the specific name of the product being enumerated, such as "windows" for the operating system or "internet_explorer" for the ; like vendor, it is required in formatted names and rendered in lowercase, using hyphens to connect multi-word terms (e.g., "adobe_reader"). An example is "product='windows'" in a WFN, which allows enumeration of all variants under that product line. This field is essential for categorizing software, hardware, or in security databases. The attribute specifies the release version of the product, such as "10" for or "8.0.6001" for a release; it is optional and can incorporate wildcards like "*" to match any version or "?" for single-character substitutions. Dots in version numbers must be escaped as ".", as in "version='8.0.6001'". This attribute enables targeted identification of version-specific vulnerabilities without enumerating every minor update. The attribute captures patch levels, service packs, or incremental updates, such as "sp1" for Service Pack 1; it is optional and follows the same formatting rules as version, allowing values like "beta" for pre-release builds. For instance, "update='sp1'" refines a CPE name to include only patched instances of a product version. This helps in tracking security fixes applied post-release. The edition attribute describes major variants of a product, such as "pro" or "enterprise"; though deprecated in CPE 2.3 in favor of other fields for new names, it remains supported for backward compatibility with version 2.2 and is optional. An example usage is "edition='enterprise'" for professional editions of software. It provides granularity for editions that affect functionality or security profiles. The attribute indicates the localized version using RFC 5646 language tags, such as "en-US" for English (); it is optional and limited to valid tags without subtags exceeding standard lengths. For example, "language='en-US'" distinguishes region-specific builds that may have unique vulnerabilities. This field is particularly relevant for software with features. The sw_edition attribute specifies software-specific editions or tailoring for market segments, such as "basic" or "online"; it is optional and used when the edition field is insufficient, as in "sw_edition='online'" for web-based variants of diagnostic tools. This allows enumeration of application-specific sub-variants not captured by broader edition types. The target_sw attribute identifies the targeted software or operating system on which the product depends or runs, such as "windows_7"; it is optional and formatted with underscores or hyphens for multi-word targets, enabling dependency-aware enumeration like "target_sw='windows_2003'". This is crucial for products like plugins that require a . The target_hw attribute denotes the targeted or , such as "x86" or "x64"; it is optional and supports values indicating sets, as in "target_hw='x64'" for 64-bit systems. This attribute facilitates hardware-specific enumerations, such as tied to particular processors. Attribute strings in CPE names have practical constraints derived from URI binding, though individual attributes lack stricter per-field limits beyond general string rules; vendor and product fields, being foundational, should prioritize brevity for effective use in security tools. Special characters in attribute values require URI percent-encoding when forming the complete CPE URI, such as "%2E" for dots only if reserved.

Specification Stack

Matching Specification

The Common Platform Enumeration (CPE) Name Matching Specification defines the procedures for determining whether a source CPE name matches a target CPE name, enabling precise comparisons in vulnerability management and security automation. This one-to-one matching process operates on well-formed names (WFNs), which are structured as attribute-value pairs representing components such as part, vendor, and product. All string comparisons are performed in a case-insensitive manner after normalization, ensuring consistency regardless of capitalization in the original names. Matching begins with normalization of the source name, which involves unescaping any quoted or escaped values to interpret special characters correctly. For instance, a () precedes characters like asterisks (*) or question marks (?) to treat them as literal data rather than wildcards; unescaping reverses this for comparison. The normalized source is then compared component-by-component to the target WFN, where each attribute-value pair yields one of four relations: EQUAL (=), SUPERSET (⊃, source is broader), SUBSET (⊂, source is narrower), or DISJOINT (∅, no overlap). Undefined components in the source, such as omitted attributes, are treated as "ANY" values, functioning as implicit wildcards that match any corresponding target value. The specification supports three primary matching types: exact, case-insensitive, and wildcard. Exact matching requires full string equality for each component after , resulting in an EQUAL across all pairs for a successful . Case-insensitive matching is inherent to all comparisons, converting strings to lowercase equivalents before evaluation. Wildcard matching allows flexible patterns in source values using unquoted * (matching zero or more characters) or ? (matching a single character), enabling regex-like expressions such as "cpe:2.3:a::product:9.*:::::::*" to any starting with "9.". These wildcards only to the well-formed string representation of the source, expanding the SUPERSET for partial matches. Within a single WFN, matching is conjunctive (AND), requiring all component pairs to satisfy the relation for the overall name to match. For sets of CPE names, the specification supports disjunctive (OR) operations by applying sequential one-to-one matches, where a target matches the set if it matches any individual name; conjunctive sets require matches against all names in the set. This enables compound queries in broader CPE contexts. Version 2.3 formalized string matching patterns by introducing explicit support for * and ? wildcards, replacing less flexible mechanisms from prior versions like implicit prefixes. This update enhances query flexibility while maintaining through defined escaping rules, allowing more precise applicability in tools.

Dictionary and Applicability Specifications

The Common Platform Enumeration (CPE) Dictionary Specification defines an XML-based repository hosted by the National Institute of Standards and Technology (NIST) that serves as the authoritative source for standardized CPE names identifying products. The dictionary's structure uses a <cpe_dict:cpe-list> to organize entries, with each <cpe_dict:cpe-item> containing a well-formed name (WFN), human-readable titles in multiple languages, references to external , notes for clarification, and optional check elements for verification methods. It also accommodates deprecated and legacy names through dedicated <cpe_dict_ext:deprecation> elements that link to replacement entries, ensuring historical continuity while marking obsolete identifiers. As of November 2025, the official dictionary contains over 1,500,000 entries, reflecting ongoing additions and updates. The CPE Applicability Language Specification provides an for expressing sets of CPE names through logical combinations, enabling the description of complex platform applicability statements. The schema's root element <cpe:platform-specification> encapsulates one or more <cpe:platform> elements, each featuring a unique @id, titles, remarks, and a <cpe:logical-test> that applies operators such as AND and OR (via @operator attribute) or NOT (via @negate attribute). Nested logical tests allow for intricate queries, such as identifying all versions of a software product excluding a specific patch level, by referencing bound CPE names through <cpe:fact-ref> elements and evaluating results according to defined truth tables. Management of the CPE follows NIST-defined processes that incorporate community input for additions and updates while maintaining integrity. New entries are submitted by or users via a formal process requiring complete details (, product, ) without wildcards, subject to acceptance criteria for uniqueness and conformance; approved submissions are integrated into the official repository. occurs for obsolete products through immutable updates that link to successors, with removal limited to corrections of errors, ensuring no loss of . In CPE version 2.3, the acts as the primary reference for generating well-formed names, while the applicability language supports authoring of (SCAP) content by defining platform sets for vulnerability assessments and compliance checks. This integration ensures that SCAP-validated products can reference dictionary entries and logical expressions for precise platform targeting.

Examples and Usage

Illustrative Examples

A simple example of a CPE name for software is cpe:2.3:a:[adobe](/page/Adobe):flash_player:11.2.202.235:-:-:-:-:-:-:-, which identifies a specific of application, where "a" denotes the application part, "adobe" is the vendor, "flash_player" is the product, "11.2.202.235" specifies the version, and hyphens ("-") indicate unspecified values for , edition, , and other attributes. For hardware platforms, consider cpe:2.3:h:apple:iphone_6s:-:-:-:-:-:-:-, representing the Apple device, with "h" indicating the hardware part, "apple" as the vendor, "iphone_6s" as the product, and hyphens for unspecified subsequent attributes including version. Wildcard characters allow for broader matching; for instance, cpe:2.3:a:microsoft:office:-:*:pro:eng:-:-:- denotes any update version of Professional in English, where the hyphen after the product signifies any version, the asterisk ("*") matches any update, "pro" specifies the edition, "eng" the language, and hyphens for remaining attributes. To handle special characters in attribute values, such as a tilde (""), escaping is required in the URI representation; an example is cpe:2.3:a:vendor_with~product:product_name:-:-:-:-:-:-:-, where the vendor name "vendor_withproduct" would be encoded as "vendor_with%7Eproduct" to comply with URI syntax, demonstrating proper handling of non-alphanumeric literals.

Integration in Security Protocols

Common Platform Enumeration (CPE) plays a pivotal role in the Common Vulnerabilities and Exposures (CVE) ecosystem by providing standardized identifiers that link specific vulnerabilities to affected products within the National Vulnerability Database (NVD) entries. This integration allows security tools and analysts to precisely map CVEs to IT assets, facilitating automated queries for vulnerabilities impacting particular platforms, such as searching for all CVEs affecting a given operating system version. In the Security Content Automation Protocol (SCAP), CPE is embedded within the Extensible Configuration Checklist Description Format (XCCDF) to define platform applicability statements, which use logical expressions of well-formed names (WFNs) to determine whether security benchmarks or checks apply to a target system. This enables automated compliance scanning by ensuring that configuration rules are only evaluated on matching platforms, such as applying a checklist solely to instances of Firefox 3.6 on . Vulnerability assessment tools extensively leverage CPE for asset discovery and mapping. For instance, Nessus employs a dedicated plugin to enumerate CPE names for detected hardware and software on scanned hosts, computing approximate matches when official entries are unavailable to enhance vulnerability correlation. Similarly, OpenVAS integrates CPE data from the NVD to identify platforms and associate them with relevant CVEs, supporting real-time vulnerability detection during scans. The NVD API further utilizes CPE through dedicated endpoints for querying the Official CPE Dictionary, allowing developers to retrieve product details and applicability statements for vulnerability filtering. Best practices for custom extensions include submitting contributions to NIST's dictionary via email for validation and integration, ensuring consistency without duplicating official entries. Despite these advancements, challenges persist in handling version sprawl within large enterprises, where the proliferation of software variants complicates comprehensive CPE coverage and accurate . NIST addresses this through ongoing of the Official CPE Dictionary, with nightly updates incorporating new or modified names as of August 2025, and system enhancements deployed in July 2025 to improve search capabilities. Coverage gaps remain notable, with NIST assigning CPE to only about 41% of 2024 CVEs, underscoring the need for supplementary tools and community contributions. In 2025, a guide was published for including CPE applicability statements directly in CVE records to improve precision in assignments.

References

  1. [1]
    Official Common Platform Enumeration (CPE) Dictionary - NVD
    Official Common Platform Enumeration (CPE) Dictionary. CPE is a structured naming scheme for information technology systems, software, and packages.
  2. [2]
    Common Platform Enumeration: About CPE
    Mar 22, 2013 · CPE provides a standard machine-readable format for encoding names of IT products and platforms, a set of procedures for comparing names.
  3. [3]
    common platform enumeration (CPE) - Glossary | CSRC
    A SCAP specification that provides a standard naming convention for operating systems, hardware, and applications.<|control11|><|separator|>
  4. [4]
    Common Platform Enumeration: CPE Specifications
    Mar 22, 2013 · CPE Version 2.3 was released by the U.S. National Institute of Standards and Technology (NIST) in August 2011. CPE v2.3 is also included in ...
  5. [5]
    Common Platform Enumeration (CPE) - Security Content ... - CSRC
    Dec 7, 2016 · CPE is a standardized method of describing and identifying classes of applications, operating systems, and hardware devices present among an enterprise's ...
  6. [6]
    Security Content Automation Protocol SCAP
    Dec 7, 2016 · Common Platform Enumeration (CPE) is a standardized method of describing and identifying classes of applications, operating systems, and ...
  7. [7]
    IR 8085, Forming Common Platform Enumeration (CPE) Names ...
    This report describes the association between the use of Software Identification (SWID) Tags and the Common Platform Enumeration (CPE) specifications.
  8. [8]
    [PDF] Towards a Common Enumeration of Vulnerabilities - CVE
    Jan 8, 1999 · Towards a Common Enumeration of Vulnerabilities. David E. Mann, Steven M. Christey. The MITRE Corporation. 202 Burlington Rd., Bedford MA 01730.
  9. [9]
    Common Platform Enumeration (CPE): Name Format and Description
    Feb 1, 2007 · This note describes a structured naming scheme for IT systems, platforms, and packages: the Common Platform Enumeration (CPE).Missing: development inconsistencies
  10. [10]
    [PDF] Common Platform Enumeration (CPE) - Name Format and Description
    Jan 30, 2007 · Version 1.1 - 13 March 2007. Contents. 1. Introduction......................................................................................
  11. [11]
    [PDF] CPE Specification 2.2 release candidate
    Specification. Andrew Buttner, The MITRE Corporation. Neal Ziring, National Security Agency. Version 2.2 - 11 March 2009. 1. Introduction .
  12. [12]
    None
    Summary of each segment:
  13. [13]
    [PDF] NISTIR 7695, Common Platform Enumeration: Naming Specification ...
    Aug 4, 2011 · This report defines the Common Platform Enumeration (CPE) Naming version 2.3 specification. The. CPE Naming specification is a part of a stack ...
  14. [14]
  15. [15]
    None
    ### Summary of CPE Name Matching Specification Version 2.3 (NISTIR 7696)
  16. [16]
    [PDF] Common Platform Enumeration: Dictionary Specification Version 2.3
    Aug 3, 2011 · This report defines the Common Platform Enumeration (CPE) Dictionary version 2.3 specification. The CPE Dictionary Specification is a part of a ...
  17. [17]
    Official Common Platform Enumeration (CPE) Dictionary Statistics
    2025 ; January, 12,548, 14,820 ; February, 12,817, 13,621 ; March, 10,699, 14,506 ; April, 16,009, 17,335 ...
  18. [18]
    [PDF] Applicability Language Specification Version 2.3
    Aug 1, 2011 · This report defines the Common Platform Enumeration (CPE) Applicability Language version 2.3 specification. The CPE Applicability Language ...
  19. [19]
    Common Platform Enumeration: CPE Dictionary - MITRE Corporation
    Mar 22, 2013 · Community members who require a new CPE Name should create a CPE-conformant name and submit it to the CPE Team for inclusion in the CPE ...Missing: input | Show results with:input
  20. [20]
  21. [21]
  22. [22]
  23. [23]
    Understanding Vulnerability Detail Pages - NVD
    Applicability statements are made to withstand changes to the Official CPE Dictionary without requiring consistent maintenance. CPE Match criteria comes in two ...Missing: input | Show results with:input
  24. [24]
    The Importance of CPE for CVE Vulnerability Management and ...
    May 21, 2025 · CPE stands for Common Platform Enumeration. A CPE string tells us exactly which vendor, product, and version a CVE affects.<|control11|><|separator|>
  25. [25]
    Extensible Configuration Checklist Description Format (XCCDF)
    XCCDF is a specification language for writing security checklists, benchmarks, and related kinds of documents.
  26. [26]
    Common Platform Enumeration (CPE) | Tenable®
    Apr 21, 2010 · This plugin reports CPE (Common Platform Enumeration) matches for various hardware and software products found on a host.
  27. [27]
    13 Managing SecInfo - OPENVAS SCAN – GOS 24.10.6 - Greenbone
    OPENVAS SCAN uses CVE, CPE and CVSS. By utilizing these standards, the ... The availability of a CPE on the appliance depends on its availability in the NVD.
  28. [28]
    Product APIs - NVD - National Institute of Standards and Technology
    The CPE API is used to easily retrieve information on a single CPE record or a collection of CPE records from the Official CPE Dictionary.
  29. [29]
    National Vulnerability Database | NIST
    We plan to deploy updates to NVD systems on July 24th 2025. This deployment includes the following relevant changes: Vulnerability Search: The NVD Vulnerability ...Missing: maintenance sprawl
  30. [30]
    Outpacing NIST NVD with VulnCheck NVD++ | Blog
    14 Nov 2024 · VulnCheck NVD++ provides CPE for 76.95% of CVEs published in 2024 while NIST NVD only provides CPE for 41.35% of CVEs.