What is a CVE? Common Vulnerabilities and Exposures explained

Table of Contents

Modern applications are built from hundreds of open-source and third-party libraries, and each one carries its own history of security flaws. Every year, tens of thousands of new software vulnerabilities are disclosed publicly, and security teams are expected to track, assess and remediate all of them across every application they run. The system that makes this even possible is CVE.

But cataloging a vulnerability is not the same as knowing whether it puts an organization at risk. As disclosure-to-exploit timelines shrink and AI tools make it faster to weaponize a known flaw, understanding what a CVE actually tells you, and what it does not, has become essential to running an effective application security program.

What is a CVE?

CVE stands for Common Vulnerabilities and Exposures. It is a standardized identifier assigned to a publicly known cybersecurity vulnerability, maintained by the MITRE Corporation under funding from the U.S. Department of Homeland Security. Each CVE record identifies a specific flaw in a specific piece of software and assigns a unique reference number, so security teams, vendors and researchers across the industry can discuss the same vulnerability using the same name.

A CVE identifier follows the format CVE-YYYY-NNNNN, where the year reflects when the ID was assigned (not necessarily when the flaw was found), and the trailing digits identify the specific record. CVE-2021-44228, for example, is the identifier assigned to Log4Shell, the remote code execution flaw in the Log4j logging library.

Without CVE, two security vendors could describe the same vulnerability in incompatible terms, and a patch note referencing “an authentication bypass” would leave a security team guessing whether it applies to their environment. CVE turns vulnerability disclosure into a shared vocabulary.

How does the CVE process work?

A vulnerability becomes a CVE through a structured assignment process, not automatically the moment it is discovered. Organizations authorized to issue CVE identifiers are called CVE Numbering Authorities (CNAs). CNAs include major software vendors, open-source foundations, security research firms and bug bounty platforms, each typically responsible for vulnerabilities in their own products or research domain.

When a researcher or vendor identifies a flaw, they submit it to the relevant CNA along with details of the affected software, versions, and technical description. The CNA assigns a CVE identifier and publishes a CVE record. The National Vulnerability Database (NVD) then enriches the record with a severity score, weakness classification and affected product configurations.

Three pieces of information typically travel with a CVE record:

  • CVE ID: the unique identifier itself
  • CVSS score: a numeric severity rating from the Common Vulnerability Scoring System, reflecting theoretical worst-case impact
  • CWE classification: a mapping to the Common Weakness Enumeration (CWE), describing the underlying category of coding flaw, such as improper input validation or deserialization of untrusted data

CVE vs. CVSS: severity is not exploitability

A CVE record answers one question: Does this specific flaw exist in this specific software? A CVSS score answers a related but different question: how severe would this flaw be if exploited, under the worst reasonable conditions.

That distinction matters more than it might seem. CVSS scores are calculated from the vulnerability's technical characteristics, things like whether it requires authentication, whether it can be triggered remotely, and what it grants an attacker who succeeds. What a CVSS score cannot tell a security team is whether the vulnerable code actually runs in their specific application, in their specific environment, under real production traffic.

A library can carry a critical, 9.8-out-of-10 CVSS score and never execute a single line of the vulnerable function in a given deployment, because the application never calls that code path. Conversely, a moderate-severity CVE in a function that runs on every request carries real, active risk. CVSS describes the vulnerability in the abstract. It says nothing about whether an attacker can actually reach it in your running application.

Limitations of the CVE system for prioritization

CVE was built to solve a naming and disclosure problem, not a prioritization problem, and that gap has widened as the volume of published vulnerabilities has grown. Security teams tracking CVEs across a modern application portfolio run into several structural limits:

  • Volume outpaces remediation capacity. The number of published CVEs has grown every year, and the backlog facing a typical AppSec team now runs into the tens of thousands of open findings. No team can patch its way through that volume on a fixed schedule.
  • A CVE ID says nothing about reachability. Software Composition Analysis(SCA) tools can tell a team that a vulnerable library is present in a dependency tree. They cannot tell that team whether the specific vulnerable method inside that library is ever called by the running application, which is the difference between theoretical risk and actual exposure.
  • Disclosure and exploitation move faster than patch cycles. Once a CVE is published, the technical details are public, and automated scanning for vulnerable, unpatched systems typically begins within hours. AI-assisted exploit generation has compressed that window further, allowing a working exploit for a disclosed vulnerability to be produced in minutes rather than the days or weeks it once required. Patch cycles, meanwhile, still commonly stretch into months. That gap between disclosure and remediation is where breaches happen.
  • Static severity does not reflect production context. A CVSS score is the same for every organization running the affected library, regardless of how that library is configured, what data flows through it, or whether the vulnerable function is ever invoked. Two companies with the identical CVE in their dependency tree can have completely different actual risk.

Why runtime context changes how CVEs get prioritized

The limitations above have pushed security teams toward a more targeted question than “which CVEs exist in our dependencies.” The better question is: which of those CVEs are actually reachable, actively executing, and worth immediate attention.

Answering that requires visibility from inside the running application, not just a scan of its build manifest. Instrumentation embedded in the application at runtime can observe which libraries are genuinely loaded and executed under real traffic, distinguishing code that is present but dormant from code that runs constantly. That distinction lets a team separate the CVEs that represent theoretical risk from the ones representing genuine, active exposure, and focus remediation effort accordingly.

This same runtime vantage point extends naturally to detection. An application instrumented at this level can observe not just which vulnerable code executes, but when an attacker attempts to trigger it, giving security teams evidence of active exploitation attempts rather than a static list of what might be exploitable.

Contrast Security's application security platform builds on this principle. Contrast SCA identifies open-source vulnerabilities and confirms which ones are active in a running application, while Contrast ADR detects and responds to attacks against production applications from inside the application itself. Together, they give security teams a way to move past CVE counts and toward evidence of what is actually at risk and what is actually under attack.