Vulnerability management
Vulnerability management is a closed loop — discover, prioritize, remediate, verify — not a quarterly scan you email to nobody. The senior skill is ranking by exploitability and exposure, then closing findings inside an SLA you can defend.
A scanner flags 4,300 findings across your fleet. 311 are CVSS 9.0 or higher. Your team can realistically patch maybe 40 things this sprint. So which 40? The junior answer is “the highest CVSS scores.” The senior answer is the one that survives a breach review: of those 311 criticals, which are actually reachable from the internet, on a service that’s running, with a known exploit in the wild? That subset is usually a few dozen — and it almost never matches the top of the CVSS-sorted list. Vulnerability management is the discipline that turns 4,300 noise into 40 decisions, and then proves the 40 got closed.
By the end of this lesson you’ll be able to run vulnerability management as a closed loop — discover, prioritize by exploitability and exposure, remediate inside a defensible SLA, and verify the fix — instead of mailing a scan report nobody reads.
The loop, not the scan
The single most common failure in vulnerability management isn’t a missed CVE — it’s treating a scan as the deliverable. A scan is the start of work, not the end of it. NIST SP 800-40r4 frames the whole thing as enterprise patch and vulnerability management, an ongoing process with explicit phases, precisely because a one-shot report rots the moment new CVEs land and new hosts spin up. The state of the world changes daily; a quarterly PDF is stale before the meeting ends.
The loop has four moving parts, and the value lives in the connections between them:
- Discover — know what you have and what’s wrong with it. Asset inventory first (you cannot patch a host you forgot exists), then authenticated scans, agent telemetry, SBOM-driven dependency checks, and external surface discovery.
- Prioritize — turn a flood of findings into a ranked queue using exploitability and exposure, not raw severity.
- Remediate — patch, configure, isolate, or compensate — with a clock attached (the SLA).
- Verify — re-scan and confirm the finding is actually gone, then feed the result back to discovery.
Skip verification and you don’t have a loop — you have an open-ended list where “we patched it” and “it’s fixed” are two different claims you never reconcile. The day an auditor asks “show me this CVE is closed across all 200 hosts,” the team that verified can answer in minutes; the team that just deployed a patch is now scanning under pressure.
Prioritize by exploitability and exposure, not raw CVSS
Here is the number that reorganizes how a senior thinks about this: of all CVEs published in a given year, only a small fraction — studies and CISA’s KEV data put it well under 5% — are ever exploited in the wild. Yet a naive program treats every CVSS 9.8 as equally on fire. That’s how you burn a sprint patching a critical-rated RCE in a library that’s compiled in but never reachable, while a “medium” misconfiguration on your internet-facing login sits open.
CVSS gives you a base severity — a vendor-neutral 0–10 score of how bad the flaw is if exploited. It is genuinely useful, and FIRST (who steward the spec) are explicit that the base score is severity, not risk. To get to risk you layer two things CVSS base alone doesn’t capture:
- Exploitability — is there a working exploit, and is it being used? CVSS v3.1’s temporal metrics and v4.0’s threat metrics encode this, but the sharpest signal is CISA’s Known Exploited Vulnerabilities (KEV) catalog and EPSS (a probability that a CVE will be exploited in the next 30 days). A CVE in KEV jumps to the front of the queue almost regardless of its base score.
- Exposure — is the affected thing actually reachable and running in your environment? Internet-facing beats internal; a loaded, listening service beats dormant code; a host with sensitive data beats a throwaway box. This is your context, and no external feed has it.
The senior reflex: rank = severity × exploitability × exposure, applied in that order as filters. Start from the KEV-and-exposed intersection, and the 311 criticals collapse to a queue you can actually clear.
| Finding | CVSS base | Exploitability | Exposure | Real priority |
|---|---|---|---|---|
| RCE in edge auth proxy | 9.8 | In CISA KEV, active | Internet-facing | P0 — patch now |
| RCE in a bundled lib | 9.8 | No known exploit, low EPSS | Code path never reached | Low — scheduled |
| Auth bypass in login | 6.5 | PoC published | Internet-facing, sensitive | High — this week |
| Info leak in internal tool | 5.3 | No exploit | VPN-only, low value | Backlog / accept |
The two CVSS-9.8 rows are the whole lesson: identical base scores, opposite priorities, because exploitability and exposure pull them apart. Rank by base score alone and you’d work them in a coin-flip order; rank by the full picture and the queue is obvious.
SLAs: the clock that makes “later” accountable
A priority with no deadline is a suggestion. The remediation SLA is the commitment that a finding of a given severity gets closed within a fixed window — and it exists to stop the slow leak where “we’ll get to it” quietly becomes “it’s been open 400 days.” Typical tiers look like: critical / actively exploited → 7–15 days, high → 30 days, medium → 90 days, low → next planned cycle. (CISA’s binding directives for federal agencies use exactly this shape — KEV entries on tight, fixed deadlines — and it’s a sane default to port into a private SLA.)
The number itself is a tradeoff, not a law of physics. Patch too fast and you risk shipping a broken update to production with no testing window; patch too slow and you leave the exploit window open. The senior move is to make the SLA severity-tiered and exception-tracked: most findings ride the standard clock, and anything that can’t make its deadline gets an explicit, owned, time-boxed exception with a compensating control — never a silent slip. An SLA you breach constantly and never measure is worse than none, because it manufactures false assurance.
▸Why this works
Why not just patch everything immediately and skip prioritization entirely? Two reasons. First, capacity: a real fleet generates far more findings than any team can action, so something gets deferred whether you choose it or not — prioritization just makes the choice deliberate instead of accidental. Second, blast radius: every patch is a change, and changes break things. A rushed kernel update that takes a payments cluster offline can cost more than the vulnerability it closed. Prioritization isn’t a way to do less work; it’s how you spend a fixed, scarce remediation budget where it buys the most risk reduction per hour.
Verify, then close the loop
“Patched” is a deploy event. “Fixed” is an observed state. The gap between them is where programs quietly fail: a patch that didn’t apply to 12 of 200 hosts, a config change reverted by the next deploy, a container image rebuilt from a still-vulnerable base. Verification re-scans the affected assets and confirms the finding is actually gone — and only then does the ticket close. The verification result flows back into discovery, which is what makes this a loop rather than a list: the same scan that confirms today’s fix surfaces tomorrow’s new finding.
This feedback is also how you measure the program itself. The metrics that matter aren’t “how many CVEs do we have” — that number is unbounded and demoralizing. They’re mean time to remediate (MTTR) by severity, percentage of findings closed within SLA, and recurrence rate (findings that come back because the fix didn’t stick). A program reporting those can answer “are we getting safer?” with evidence; one reporting raw counts can only answer “is the scanner still running?”
Your scanner returns two CVSS-9.8 findings. (A) An RCE in your internet-facing auth proxy, listed in CISA's KEV catalog as actively exploited. (B) An RCE in a vendored library whose code path is never reached, with no known exploit and a near-zero EPSS. You have time to patch one carefully this sprint. Which goes first, and on what basis?
Why is a CVSS base score, on its own, an insufficient way to prioritize remediation?
A team deploys a patch for a critical CVE across the fleet and immediately closes the ticket. A month later an auditor finds the CVE still present on 12 of 200 hosts. Which phase did they skip, and why does it matter?
Order the vulnerability-management loop from the first phase to the phase that feeds back into the first:
- 1 Discover — inventory assets, then scan for findings
- 2 Prioritize — rank by severity × exploitability × exposure
- 3 Remediate — patch / configure / compensate against an SLA clock
- 4 Verify — re-scan to confirm the fix, then feed back to discovery
- 01Walk through the four phases of the vulnerability-management loop and explain why verification — and the arrow back to discovery — is the part that turns a scan into a program.
- 02You have two CVSS-9.8 findings and time to patch one. How do you decide, and what does that reveal about CVSS, KEV, EPSS, and exposure?
Vulnerability management is a closed loop, not a quarterly scan: discover (inventory then scan), prioritize, remediate against an SLA, verify, and feed the result back into discovery. The senior skill is prioritization — a CVSS base score is severity, not risk, and only a small fraction of CVEs are ever exploited, so you rank by severity × exploitability × exposure, starting from the intersection of CISA’s KEV catalog (actively-exploited CVEs) and what’s genuinely reachable in your environment. That’s how two identical CVSS-9.8 findings end up with opposite priorities. Remediation rides a severity-tiered SLA (critical/exploited in days, high in a month, lower on a cycle) with explicit, owned exceptions instead of silent slips, because every patch is also a change that can break production. And verification is non-negotiable: “patched” is a deploy, “fixed” is a re-scanned, confirmed state — which is why you measure MTTR and percent-within-SLA, not the unbounded count of open CVEs. The next time a scanner hands you 4,300 findings, your first question isn’t “what’s the highest score” — it’s “which of these are exploited and exposed, and can I prove they’re closed.”
Practice
Start at the top. Tasks go easiest → hardest: recall a fact, apply it to a case, then a senior-level stretch. Open one, attempt it, then reveal.
Something unclear?
Ask a question about this lesson. Questions are anonymous and go straight to the author to make the lesson better.