InfraRunBook
    Back to articles

    Understanding CVE Scoring and Why Patch Priority Matters

    Cyber Security for Servers
    Published: Aug 25, 2026
    Updated: Aug 25, 2026

    A practical breakdown of how CVSS scores are built, why a 9.8 doesn't always mean 'patch first,' and how to build a patch priority process that actually reflects your risk.

    Understanding CVE Scoring and Why Patch Priority Matters

    Every few weeks someone on the team forwards a security advisory with the subject line screaming a CVSS score, usually something in the 9-point range, and asks whether we need to drop everything and patch. In my experience, that reflex is understandable but often wrong. The score is one input into a decision that needs a lot more context. I've watched teams burn a weekend patching a 'critical' vulnerability in a service that isn't even exposed to the network, while a 6.5-rated bug sitting on an internet-facing login page went untouched for a month. Understanding how CVE scoring actually works, and where it falls short, is the difference between a patch process that reduces real risk and one that just generates busywork.

    What CVE and CVSS Actually Are

    CVE stands for Common Vulnerabilities and Exposures. It's a naming scheme, not a scoring system. When MITRE or a CVE Numbering Authority assigns something like CVE-2026-31442, they're just giving a unique identifier to a specific, documented vulnerability so that vendors, researchers, and tooling can all refer to the same issue without ambiguity. That's it. The ID itself carries no severity information.

    CVSS, the Common Vulnerability Scoring System, is the separate framework that actually produces the numeric score you see attached to a CVE. The current widely used versions are CVSS 3.1 and the newer CVSS 4.0, and they break a vulnerability down into measurable components rather than letting someone just eyeball a number. The base score is built from two groups of metrics: exploitability metrics and impact metrics.

    Exploitability metrics describe how hard it is to actually pull off the attack. This includes the attack vector (can it be triggered over the network, or does it require local access), attack complexity, the privileges an attacker needs before they start, and whether user interaction is required. Impact metrics describe what happens if the exploit succeeds, measured across confidentiality, integrity, and availability. Each of these gets rated on a scale, and a formula combines them into a base score from 0.0 to 10.0.

    Here's a simplified example of how the vector string looks for a CVE, since you'll see this format in every advisory:

    CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    Base Score: 9.8 (Critical)
    
    AV:N  - Attack Vector: Network
    AC:L  - Attack Complexity: Low
    PR:N  - Privileges Required: None
    UI:N  - User Interaction: None
    S:U   - Scope: Unchanged
    C:H   - Confidentiality Impact: High
    I:H   - Integrity Impact: High
    A:H   - Availability Impact: High

    That string is genuinely useful once you know how to read it. AV:N and PR:N together tell you an attacker doesn't need to be on your network or have any existing credentials, which is exactly the profile of something like an unauthenticated remote code execution bug. That combination is what usually pushes a score into the 9-plus range.

    How the Score Gets Built, Layer by Layer

    The base score is only the first layer, and it's the only one vendors are required to publish, which is why it's the number everyone fixates on. CVSS also defines temporal metrics (later renamed 'threat metrics' in 4.0) that account for things like exploit code maturity and the availability of official remediation. And it defines environmental metrics that let you adjust the score based on your own deployment, things like whether the affected system actually matters to your business and what compensating controls you already have in place.

    Almost nobody publishes temporal or environmental scores. Vendors publish the base score because it's static and doesn't require ongoing maintenance. That means the 9.8 you see in an advisory was calculated assuming the worst-case theoretical deployment, not your deployment. This is the single most misunderstood part of CVE scoring, and it's the root of most bad patch prioritization decisions I've seen.

    Let's walk through a concrete internal example. Say a vulnerability scan against sw-infrarunbook-01 flags a critical CVE in an internal metrics exporter listening only on 10.20.4.15, reachable solely from a private monitoring subnet with no external route and no authentication bypass relevant to your setup because you already require mTLS at the load balancer in front of it. The base score might still read 9.1. But your actual exposure is close to zero because the network-vector attack path assumed by the score doesn't exist in your topology. Compare that to a 7.5-rated CVE in a web application login form running on a public-facing host at 172.16.8.22 with no WAF in front of it. That's a lower base score with materially higher real-world risk.

    Why Patch Priority Isn't the Same as Severity

    This is where a lot of teams get the process backwards. They sort their vulnerability scan results by CVSS score descending and start patching from the top. It feels rigorous because you're following a number, but it ignores exploitability in the wild, which is a completely different axis from theoretical exploitability.

    A useful additional signal here is EPSS, the Exploit Prediction Scoring System, which estimates the probability that a given CVE will actually be exploited in the next 30 days based on observed scanning and exploitation activity. I've started treating EPSS as a tiebreaker and sometimes as an override. A CVE with a CVSS base score of 7.2 but an EPSS score showing it's being actively exploited across the internet right now deserves to jump the queue ahead of a 9.8 that has existed for two years with zero recorded exploitation attempts and no public proof-of-concept.

    A patch priority process that actually reflects risk needs to combine at least four inputs: the CVSS base score as a starting severity signal, EPSS or comparable threat intelligence for real-world exploitation likelihood, asset exposure (is it internet-facing, does it handle sensitive data, is it in scope for compliance), and the presence of a known, weaponized exploit or active campaign targeting the CVE. CISA's Known Exploited Vulnerabilities catalog is one of the better free signals for that last point, since anything landing on that list has documented evidence of active exploitation and typically comes with a mandated remediation timeline for federal systems, which is a reasonable bar to hold yourself to even outside that requirement.

    Priority Score Model (example, not a standard)
    
    Priority = (CVSS_base * 0.3) + (EPSS_percentile * 0.4) + (Exposure_weight * 0.3)
    
    Exposure_weight:
      10 = Internet-facing, no auth
      7  = Internet-facing, authenticated
      4  = Internal network, sensitive data
      1  = Internal, isolated segment, no sensitive data
    
    Result buckets:
      8.0+  -> Patch within 24-48 hours
      5.0-7.9 -> Patch within the current maintenance window
      Below 5.0 -> Track, batch into next monthly cycle

    That's an illustrative model, not something you should copy verbatim. The point is that the formula forces you to actually think about exposure and real exploitation activity instead of reacting purely to the base score. In my experience, once a team adopts something like this, patch fatigue drops noticeably because people stop treating every critical advisory as a fire drill.

    Real-World Examples

    The Log4Shell vulnerability from 2021, CVE-2021-44228, is the textbook case for why the base score alone doesn't tell the whole story, but in the opposite direction from my earlier example. It scored 10.0, the maximum possible, and for once the real-world risk actually matched the number, because it was unauthenticated, remotely triggerable through something as simple as a crafted string in a log message, and Log4j was embedded in an enormous number of Java applications people didn't even realize contained it. That's the case where dropping everything to patch was the correct call, and teams that treated it as 'just another critical' and queued it into the normal monthly cycle got burned.

    Contrast that with a vulnerability class I see constantly in scan reports: a critical-rated CVE in an outdated version of a database client library that's present on a host but never actually invoked because the application uses a different code path. The scanner flags it because the package is installed, the CVSS score reads high because the vulnerability class itself is severe in theory, but there's no reachable attack surface. Teams that patch strictly by score waste real engineering hours here. Teams that ask 'is this code path even reachable from an untrusted input' correctly deprioritize it.

    Another pattern worth mentioning is CVEs affecting SSH or RDP-adjacent services. A misconfigured SSH daemon accepting connections from 0.0.0.0/0 on a host at 192.168.50.10 with password authentication still enabled turns even a moderate-severity CVE into a serious problem, because the compensating control that would have limited exposure, network restriction, doesn't exist. The CVE score never accounts for your firewall rules. You have to layer that in yourself.

    Common Misconceptions

    The first misconception is that CVSS measures risk. It doesn't. It measures theoretical severity under a generic deployment assumption. Risk requires you to multiply that by likelihood and by your specific exposure, which CVSS's base metrics deliberately exclude so the score stays vendor-agnostic and reproducible.

    The second misconception is that a low CVSS score means a vulnerability is safe to ignore indefinitely. Chained vulnerabilities are the counterexample here. A 4.3-rated information disclosure bug that leaks a session token combined with a separate 5.5-rated authorization flaw can together produce full account takeover, even though neither individual CVE looks urgent in isolation. Attackers chain vulnerabilities routinely; scanners and dashboards almost never model that.

    The third misconception, and probably the most common one I run into, is treating CVSS 4.0 as a drop-in replacement for 3.1 with the same score meaning the same thing. CVSS 4.0 removed the Scope metric, restructured how impact is measured across the vulnerable system versus subsequent systems, and added supplemental metrics for things like automatable exploitation and safety impact. A 3.1 score and a 4.0 score for conceptually similar vulnerabilities aren't always directly comparable, and if your tooling mixes both versions in one dashboard without normalizing, you can end up sorting your patch queue on numbers that were never meant to be compared side by side.

    The last one worth naming: assuming vendor-published scores are final. Vendors sometimes get the base score wrong, either overstating impact to be cautious or understating attack complexity because they tested in a lab environment that doesn't reflect real deployments. NIST's National Vulnerability Database occasionally republishes a CVSS score that differs from the vendor's own CNA score for the same CVE. When the two disagree, it's worth reading the actual vulnerability description rather than trusting either number blindly.

    None of this means CVSS is useless, it's a genuinely useful common language for describing severity, and I'd rather have it than not. The mistake is treating the base score as a complete answer to 'how urgently do I need to patch this.' It's an input, and a good patch priority process treats it as exactly that, alongside exploitation intelligence, actual exposure, and an honest look at whether the vulnerable code path is even reachable in your environment. Build that process once, document it, and your team stops reacting to headlines and starts responding to actual risk.

    Frequently Asked Questions

    What's the difference between a CVE and a CVSS score?

    A CVE is just a unique identifier for a specific vulnerability, assigned so everyone can reference the same issue consistently. CVSS is the separate scoring framework that calculates a numeric severity rating for that CVE based on exploitability and impact metrics.

    Should we always patch the highest CVSS score first?

    Not necessarily. The base CVSS score assumes a generic worst-case deployment and doesn't account for your actual network exposure or whether the vulnerability is being actively exploited. Combining CVSS with EPSS data and your own exposure context gives a much more accurate patch priority.

    What is EPSS and how does it relate to CVSS?

    EPSS, the Exploit Prediction Scoring System, estimates the probability that a vulnerability will be exploited in the wild within the next 30 days. Unlike CVSS, which measures theoretical severity, EPSS is based on observed real-world exploitation activity, making it a useful complement for prioritization.

    Can a low-severity CVE still be dangerous?

    Yes. Lower-scored vulnerabilities can be chained together to achieve outcomes as severe as full account takeover, even when neither vulnerability looks urgent in isolation. Automated scanners rarely model these chained attack paths, so manual review still matters.

    Is CVSS 4.0 comparable to CVSS 3.1 scores?

    Not directly. CVSS 4.0 restructured several metrics, including removing the Scope metric and changing how downstream impact is measured, so scores from the two versions shouldn't be sorted together without normalization when prioritizing patches.

    Related Articles