Runtime Exposure Management

CVE Reachability: What Vendors Actually Measure When They Say "Exploitable"

CVE reachability claims are mostly inference. A former CISO grades three vulnerability tool categories, including his own, against one strict standard.

Joe Silva
Joe Silva
CEO & Co-Founder
July 29, 2026
·
— min read

On this page

CVE Reachability: What Vendors Actually Measure When They Say "Exploitable"

I ran multiple large security programs. I had scanners feeding an RBVM platform, layered with exploit intel. I still pushed thousands of priority vulnerabilities to IT and app teams who pushed back, often correctly. So I borrowed my Red Team and asked a simpler question: which of these can actually be exploited in our environment? They answered it, finding by finding. It worked. It did not scale. Every vendor since has promised to answer that question with a word: reachable, runtime present, truly exploitable in your environment.

The pitch is the same every time: stop patching theater; fix what attackers can actually hit.

That promise is directionally right. The problem is semantic inflation. "Internet reachable," "runtime present," and "high risk score" are useful filters. They are not, by themselves, proof that a specific CVE has an open path from a principal you care about to the vulnerable behavior on a laptop or server.

This post examines three approaches to that question:

  1. Classic VM: scanner- and agent-based platforms that find CVEs and rank them with threat-weighted risk scores.
  2. Exposure aggregation platforms (Threat/Continuous Threat Exposure Management, TEM/CTEM): tools that sit above the scanners, unify their output, and re-rank with runtime signals, internet exposure, threat intel, criticality, and controls.
  3. Runtime Exposure Management (REM), Spektion's approach: detect vulnerabilities and observe the runtime conditions that determine whether they matter, from the same sensor.

Full disclosure: I am now the CEO of Spektion, which exists to automate that Red Team assessment continuously across every endpoint. The third approach below is mine and the bias is named up front. The standard this post sets applies to us too. Grade all three the same way.

Key Takeaways

  1. CVE reachability is a provable path from a trust boundary to a specific CVE's vulnerable behavior on a specific host, with evidence. Spektion calls this standard path, sink, proof.
  2. "Internet-facing," "runtime present," and threat-weighted "critical" are useful filters, not reachability proof.
  3. Classic VM and CTEM/TEM both rank findings with data collected elsewhere. Neither instruments the host directly.
  4. Runtime Exposure Management detects the CVE and observes execution, privilege, and network exposure from one on-host sensor.
  5. No tool delivers a full path-sink-proof object today. The real choice is reachability scores versus reachability evidence.

What does CVE reachability actually mean (and why most tools don't measure it)?

In plain engineering terms:

CVE reachability means there is a path from a defined trust boundary to the vulnerable condition for this CVE on this asset (under observed or strongly inferred conditions), and you can show the evidence.

Call that standard path, sink, proof: a path from a trust boundary, to this CVE's vulnerable condition, with evidence you can show. Hold every claim in this post to it, including ours.

That is stricter than:

The strict reachability standard vs. weaker vendor claims
Weaker claimWhat it actually is
Package/version matches a CVEInventory
Asset is internet-facingAsset exposure
Component appears to be runningRuntime presence (often coarse)
Exploit code or campaigns existGlobal threat likelihood
Firewall/EDR might block itControl hypothesis
Composite score says "fix first"Prioritization, not path proof

When a UI badge says reachable or copy says truly exploitable, buyers reasonably assume the strict definition. Products often deliver one or more of the weaker claims.

What's the difference between reachability and exploitability?

Reachability is the narrower question: is there an open path from a trust boundary to this CVE's vulnerable condition on this host? Exploitability adds whether that path can be driven to effect: the exploit exists, the conditions hold, controls don't stop it. A finding can be reachable but not yet exploitable. It cannot be exploitable without first being reachable. Most "exploitable" claims skip the reachability proof and jump straight to global likelihood.

Does classic vulnerability management measure CVE reachability?

What Classic VM claims

Classic vulnerability management matured by admitting CVSS is not a work queue. Marketing and product language shifted to:

  • Focus on the small percentage of vulns that matter.
  • Prioritize by exploit likelihood and threat intelligence.
  • Factor asset criticality and sometimes internet-facing tags.
  • "Risk-based vulnerability management" / exposure scores for the enterprise.

Every major scanner now ships a proprietary risk rating built on the same design: combine technical impact (usually aligned with CVSS impact) with a dynamic threat component (recent and predicted exploit activity, weaponization signals, malware kit inclusion) so teams remediate by likelihood of exploit in the near term, not static severity alone. Some blend in asset sensitivity or internet-facing posture from inventory, tagging, or EASM-style discovery.

The EDR-native variants of this category swap the periodic network scan for continuous, agent-visible CVE inventory and AI-flavored exploit-likelihood ranking inside the endpoint agent. Fresher inventory, same data model.

What Classic VM actually measures

Classic VM signals vs. CVE-path reachability
SignalPresent in classic VM?Is it CVE path reachability?
CVE on asset (authenticated/agent/scan)Yes, core productNo, presence only
CVSS / severityYesNo
Exploit available / malware kits / intelYes (threat-weighted ratings)No, global likelihood
Asset criticality / tagsYesNo, business weight
Internet-facing / external exposure tagOften (scan metadata, EASM, CMDB)Partial: asset-level, not CVE-trigger path
Process loaded vulnerable moduleSometimes (agent depth varies)Weak: co-location, not path
Listener → sink exercises this CVERarely as a first-class objectNo
Compensating control proofLimited / manualUsually no

Classic VM is excellent at answering:

"Of everything we found installed, what does the threat landscape say we should fear, on assets we care about?"

It is weak at answering:

"Can someone on the internet (or LAN, or this host) actually drive this CVE's vulnerable behavior here, and what evidence shows that?"

That is not a moral failure of scanners. It is a data model choice: findings are asset × CVE × score, not path × sink × proof.

Where classic VM language overreaches

  1. Threat-weighted "critical" still feels like "exploitable here." It means more likely to be attacked somewhere, often blended with impact, not path open on this host.
  2. Internet-facing asset ≠ reachable CVE. A public web server with a vulnerable offline parser, a dead admin tool, or a library never loaded is not the same risk as a vuln on the accept/request path. Classic tools often lack the coupling data.
  3. Endpoint coverage ≠ path evidence. Agent-based inventory is fresher than unauthenticated scans. Fresh inventory of what's installed still is not a reachability graph.
  4. Laptops break exposure assumptions. Roaming devices, VPN flaps, NAT, and localhost-only dev tooling make "internet-facing" tags noisy or missing. Content-driven vulns (open file → parser) never look like network exposure.

Do CTEM / exposure-aggregation platforms measure reachability?

What CTEM platforms claim

These platforms sit above the scanners. They ingest classic VM output (and often CNAPP, EDR, firewall, CMDB data), then re-rank. Public positioning across the category is blunt:

  • Prove what attackers can exploit in your environment.
  • Know what is actually / truly exploitable.
  • "~90% of your critical vulns aren't exploitable" (the headline noise-reduction claim).
  • Prioritize with environmental context, not CVSS alone.

The recurring factor list is consistent across the category:

  1. Runtime presence: is the vulnerable component running?
  2. Internet reachability: is the asset exposed externally?
  3. Exploitation in the wild: active threat intel.
  4. Asset criticality: business importance.
  5. Existing control mitigations: WAF/NGFW/EDR/etc. may block exploitation.

Differentiation vs classic VM is not "we find CVEs." They don't. It is: unify findings, apply context, prescribe mitigations through controls you already own, automate remediation ops. Deployment is typically agentless via APIs: enrichment from tools already deployed, not a new host sensor.

That deployment model is worth sitting with. An aggregation layer has no data of its own. Every signal it re-ranks with was collected by something else, for some other purpose, at some other granularity.

What CTEM actually measures

This class does add real prioritization power over raw CVSS queues. Be precise about each factor:

What TEM/CTEM factors do and don't prove
FactorUseful meaningWhat it usually is not
Runtime presenceVulnerable software/component associated with a running context (from EDR/CNAPP/scanner runtime signals)Proof the vulnerable function runs, or that network input hits it
Internet reachabilityAsset/service appears externally exposed (ASM, cloud, scanner metadata, integrations)Proof this CVE's trigger is on an external path; weak on NAT/VPN/laptop reality unless data is rich
Exploitation in the wildKEV-like / intel / weaponization signalEnvironment-specific path
Asset criticalityBusiness rankingTechnical reachability
Control mitigationsMapping findings to firewall/WAF/EDR policy that could reduce exploitabilityContinuous proof the control actually blocks this CVE's exploit chain on this host

So the category's "exploitable in your environment" is best read as:

Contextual exploitability score = inventory finding × runtime-ish presence × asset exposure × global threat × criticality × hypothesized control coverage

That is a better queue than CVSS. It is still mostly not CVE-level path reachability with host evidence (listener, peer class, module load, traffic-gated execution).

Where the category's language overreaches

  1. "Truly exploitable" vs "deprioritized by context." Dropping a CVSS 9.x because the asset is not internet-facing and controls look good is rational prioritization. Calling the remainder "proven exploitable" oversells unless the product shows a path object.
  2. Internet reachability is asset-scoped. The category's own materials phrase it clearly: "Is the asset exposed externally?" Asset exposure is not sink coupling. A reachable asset with an unreachable (or unrelated) CVE path is a different problem than marketing implies.
  3. Runtime presence is only as deep as the integrations. Agentless aggregation inherits the shallowest "running?" signal its sources emit. "Product installed and host checked in" is not "vulnerable code loaded and exercised on the accept path."
  4. Controls are often correlated, not verified. Mapping a CVE family to a WAF signature or EDR policy is valuable for mitigation planning. It is not the same as measuring that exploit traffic would be blocked on this asset now.
  5. Inherited blind spots are invisible. The layer can only re-rank what its sources found. A vulnerability the scanner missed, an embedded component with no version string, an exploitable weakness with no CVE: none of these exist in the graph at all. The queue looks complete because nothing signals what's absent.
  6. Laptops and general servers remain awkward. API-unified graphs shine where cloud exposure, central EDR, and scanner coverage are dense. They struggle where exposure is conditional (VPN only, 3% of the week), risk is local (malware → local service, browser → localhost helper), risk is content-driven (no listener), or the CVE is in a binary the graph can't introspect beyond version strings.

If you already run one of these layers, none of this argues for ripping it out. The layer re-ranks whatever findings and context it is fed. The question this post raises is about what sits underneath it: whether the signals are observed on the host or inferred from tags and joins. Prioritization built on inference is not wrong. It is incomplete.

What is Runtime Exposure Management (REM), and what does it show?

This is where I show my hand, so apply the same skepticism the previous two sections earned.

The first two approaches share a dependency that no scoring model can fix: they rank findings with data collected somewhere else. Classic VM ranks its inventory with global threat intel. Aggregation platforms re-rank someone else's findings with someone else's context, joined over APIs. Neither has an instrument pointed at the thing the reachability question is about: software behaving on a host.

Spektion is built in the opposite direction. One sensor on the endpoint does both jobs. It runs in production across enterprise fleets today.

It detects the vulnerabilities. OS and application CVEs are identified directly from the host, with severity, EPSS, and known-exploitation status attached. There is no scanner feed to ingest and no third-party finding to inherit. Every vulnerability it finds enters the picture through the same observation stream that will judge it.

It observes the conditions that determine whether they matter. Per host, per software, continuously:

  • Execution state. Whether software actually runs or only sits on disk. Which executable paths ran, and when. "Installed but never executed" is a recorded fact, tracked per asset, not an inference from an agent check-in. The record carries timestamps, because software that runs quarterly looks unused until it runs. Never executed is a claim with a date range on it, and the date range is on the record.
  • Privilege context. Whether the running software holds admin or SYSTEM privileges. Every runtime risk is scored twice, standard impact and privileged impact, because the same weakness is a different problem at different privilege.
  • Network exposure read at the process. Which software is listening, on which port, on which host, first seen and last seen. Which destinations it connects to and how often. Exposure is attached to the running process, not to an "internet-facing" tag on the asset, so it survives NAT, VPN flaps, roaming laptops, and stale CMDB rows.
  • Behavior that defines blast radius. File system access, memory access, registry writes, process creation, credential and data access patterns. What an attacker inherits if this software is compromised.
  • Embedded components. Vulnerable libraries inside applications that version-string inventory never resolves.
  • Pre-CVE weaknesses. Exploitable behavior patterns in software with no published CVE. A pipeline fed from CVE feeds cannot see this class at all. Runtime observation is where it shows up first.

This is that Red Team assessment, automated and continuous, on every endpoint.

Here is the shape of the record:

process: C:\Program Files\\mgmtsvc.exe · first executed 2026-03-11, last executed 2026-07-18 · privilege: SYSTEM · listener: tcp/8443, first seen 2026-03-11, last seen 2026-07-18 · outbound: 3 destinations, daily

One record, four facts, no score. For what these records look like against a real application, see the WinRAR spotlight: runtime behavior scored the vulnerable versions high before their CVEs existed.

Why detection independence matters for reachability, specifically:

  1. No inherited blind spots. An aggregation layer's reachability verdict is bounded by what its scanners found; a scanner's is bounded by version strings. Spektion's detection surface includes what runs, what's embedded in it, and what's exploitable before a CVE exists. You cannot assess the reachability of a finding you never made. Spektion's blind spots are its own: the sensor covers the Windows, macOS, and Linux hosts it runs on. Network gear, appliances, and the authenticated compliance scans your auditors require stay with the tools built for them. The difference is that an owned blind spot has a known edge; an inherited one hides inside another tool's data model.
  2. Evidence is native, not joined. When detection and context come from the same sensor, every finding carries its runtime evidence from the moment it's created: running or not, privileged or not, listening or not.
  3. The instrument travels with the hard cases. Laptops and general-purpose servers are exactly where tags, scan position, and API joins fail. A host sensor keeps its exposure truth on hotel Wi-Fi.

Yes, this means a sensor on the endpoint. Practitioners are right to push back on one more thing to deploy; the deployment and change-control cost is real, and it is a POC question with a measurable answer. So apply the test from this post: does this data exist anywhere else in usable form? Execution state per executable, privilege at runtime, listeners read at the process, components embedded inside applications, recorded on the same record as the CVE they judge. Upstream tools collect fragments of this for other purposes; I never saw an API join reassemble them without losing freshness and identity on the way. And because the sensor detects the CVEs itself, it is not a layer on top of your scanner. It does the detection job and the evidence job in one place.

Observation is half the job. Each risk also generates its own response: step-by-step preventive controls (application control policies, exploit protection settings, GPO) rated for effectiveness and effort, plus detective controls as ready-to-run SIEM queries in standard formats. That output does not depend on a patch existing. For the vulnerabilities you cannot patch this quarter, and the weaknesses with no CVE at all, there is still a concrete action on the record.

Now run Spektion through this post's own weaker-claims table:

Spektion against this post's own weaker-claims standard
Reachability signal / evidence categoryWhat Spektion hasObserved or inferred?
InventorySoftware, versions, executables per path, and the CVEs against them, detected first-partyObserved on host
Runtime presenceExecution events per executable; unused installs distinguishedObserved
Asset exposureListeners (software, port, host) and connection activityObserved at the process
Global threat likelihoodCVE severity, EPSS, exploit status, KEV on the same recordsExternal, ingested
Control hypothesisGenerated preventive controls (application control, exploit protection, GPO) and detective queries in standard SIEM formats, per riskPrescribed, not verified blocking
Path × sink × proofPieces of each term, per vulnerable software, per asset: component present in what runs (sink), listener observed at the process (path), timestamped records of both (proof); no input-to-function tracePartial: pieces observed, trace not claimed

That last row matters. Held to the strict definition at the top of this post, no product in any of these three categories delivers the full path object, and I won't pretend we do. We don't run exploits, we don't trace input into a specific vulnerable function. What we do hold, per vulnerable software, per asset, is a piece of each term: the sink side, the vulnerable component present in what actually runs, not just on disk; the path side, that software's own listener, observed at the process; and the proof, timestamped host records of both. The unclaimed piece is the coupling, a trace from input through that listener into this CVE's vulnerable function. And a listener record tells you software, port, and host, not whether that bind is loopback-only or reachable from off the box. A listener is an observed fact; which peers can reach it is still a judgment.

Here is the honest comparison instead. Decompose "is this CVE exploitable here" into its parts: Is the software running? With what privileges? Is it accepting connections? Is the vulnerable component actually present in what runs? What can it reach if compromised? The first two approaches answer those questions by inference, from external data and integration metadata. Spektion answers them with facts recorded on the host where the CVE lives. The inference that remains, coupling a specific CVE's sink to that observed exposure, is explicit, and it starts from evidence instead of a tag. Of these three approaches, that is the shortest distance to the strict definition.

Customers typically cut CVE noise by 50 to 80% when prioritization keys on execution state and observed exposure. That is a smaller number than the category's headline, and it should be: a dismissal only happens when an observed fact supports it. Not running, not privileged, not listening. The difference is auditability, and the range is countable in a pilot; tally your own dismissals and read the fact behind each one. Nobody has to trust a composite score; they can read the evidence behind the verdict.

That matters most when the people doing the patching do not report to you. A ticket that says critical, trust the score gets negotiated. A ticket that says running as SYSTEM, listening on 443, connecting out daily gets scheduled. The is-this-real-on-my-box meeting gets short, because the engineer reads the same fact the ranking used. One customer cut emergency patch events by 60% once tickets carried that evidence.

Classic VM vs CTEM vs Runtime Exposure Management: same words, different data

Same phrase, different data across the three approaches
Phrase in the UI / deckClassic VM typically meansAggregation TEM typically meansREM (Spektion) meansStrict CVE reachability would require
"High risk / critical priority"High threat-weighted rating + asset weightHigh contextual score across five factorsObserved behavior grade + privilege-aware impact + CVE threat contextPath + sink + proof method
"Internet reachable / exposed"Asset tag / external scan / EASMAsset external exposure in exposure graphThis software listening on this port on this host, observedPeer path to the process/sink that matters
"Exploitable"Exploit exists or predicted (threat model)Context says attackers could hit you and controls don't fully coverRunning, privileged, and exposed, observed here; includes pre-CVE weakness patternsEnvironment-true path to vulnerable behavior
"Runtime"Sometimes agent last-seen / process hints"Vulnerable component running" from integrationsExecution events per executable path; installed-but-never-run distinguishedLoaded module / executed function / traffic correlation
"Reduced criticals by ~90%"Focus on top score sliceDeprioritize with context filtersDeprioritization where every dismissal is backed by an observed factOnly valid if dismissed items lack real paths, not just internet tags

None of these classes is "lying" in the fraud sense. The first two are selling prioritization using the language of exploitability and reachability: a re-ranking of findings, made from data that cannot settle the question the language raises. Runtime Exposure Management is the one approach of the three where the words and the telemetry mostly point at the same thing, and where the gap that remains is stated instead of scored over.

Why do reachability tools fail on laptops and servers?

Enterprise risk still lives heavily on:

  • Servers: long-lived listeners, mixed trust networks, sticky packages.
  • Laptops: user-driven execution, VPN, local tools, sparse "internet-facing" truth.

Here is where the three approaches diverge on real hosts.

How the three approaches diverge on real hosts
SituationClassic VMAggregation TEMREM (Spektion)
Vuln lib on disk, never loaded; asset "critical"May still ticket on severity/threatMay drop if no runtime presence (good) or keep if runtime signal is coarseRecorded as never executed; deprioritized with evidence
Vuln on accept path; asset not tagged internet-facing (NAT, mis-tag)No exposure signal; ranked on global threat aloneSame if "internet reachability" is the main boostListener observed on the host; no dependence on tags
Localhost-only service, high-priv, browser-reachableLow "exposure"Low "internet reachability"; under-ranked for laptop threat modelsPrivileged execution + listener observed; privileged impact ranks it. Which peers can reach the listener is still a judgment
CVE needs file open, not a listenerNo network storyNo network story; content path invisibleNot network-gated; scored from observed behavior and privilege
Exploit in wild + public asset + wrong code pathHigh priorityHigh contextual score: false confidenceExecution and component evidence narrow it; sink coupling still not proven
Exploitable weakness with no CVE assignedInvisible: no CVE, no findingInvisible: sources are CVE-fedDetected from runtime behavior; invisible to both CVE-fed pipelines

Still not function-level path proof. The difference is that the remaining judgment starts from host evidence instead of tags and scores.

How do you test a vendor's reachability claim? Five evidence questions

Take these into any demo. Before any demo, run the test on what you already own. Pull ten criticals your current stack deprioritized last quarter and ask what observed fact backs each dismissal. If the answer is a score, you have found the gap this post is about.

When any tool in this space says reachable or exploitable, ask for the evidence object:

  1. From where? Internet, VPN, LAN, same-host, user content, not just "asset critical."
  2. What was measured? Version string, process running, module mapped, function executed, inbound peers, control hit?
  3. Observed or inferred?
  4. Does the path hit this CVE's sink, or only share a host with it?
  5. What would falsify the claim? (e.g., module unload, bind to loopback, control verified)

Bottom line

Classic VM professionalized prioritization around threat likelihood + asset importance. Aggregation TEM professionalized prioritization around threat + exposure + runtime-ish presence + controls, on top of those same scanners.

Both improved the industry's refusal to treat CVSS 9.8 as a work order. Neither collects the data the reachability question actually requires. One ranks its own inventory with global signals; the other re-ranks borrowed findings with borrowed context.

If the question is "which of these findings can actually be exploited here," the instrument has to watch the environment: what runs, at what privilege, listening where, touching what. Of the three, only Runtime Exposure Management collects that evidence, and only it detects the vulnerabilities from the same observation instead of inheriting another tool's findings and their blind spots. That makes it the strongest basis of the three for a reachability call: the most terms of the question answered by observation, the fewest by inference, and the remaining inference stated where you can inspect it.

Nobody in any of these categories, us included, hands you the complete path, sink, proof object today. The choice you actually have is between reachability scores and reachability evidence. A score implies a path. Evidence records the conditions for one: running, privileged, listening, observed on the host. The five evidence questions tell you which one a vendor is selling. Buy the evidence.

Keep the prioritization layer if it is shrinking your queue. But if the question is what is reachable, start with the tool that watches the software run.

If you want to test this, test it the way this post tests everyone. Bring the five evidence questions to your next vendor review, ours included. Read your own records: what runs, at what privilege, listening where. If our answers sound like a composite score, hold us to the same verdict this post gives everyone else. And if you want the category-by-category version, see how Spektion compares to classic VM and CTEM tools.

Notes on scope and fairness

  • The author is the CEO of Spektion. The Spektion section describes shipped capability (first-party CVE detection, execution observation, privilege context, listeners and destinations, embedded component detection, pre-CVE risk detection, generated preventive and detective controls) and states plainly where inference remains.
  • This is a category critique based on public product claims and documented scoring models, not a lab evaluation of any single deployment. Vendors are discussed as categories, not by name; the scoring-model and factor-list descriptions reflect publicly documented approaches common across each category.
  • Aggregation platforms can be effective at noise reduction and mitigation routing; classic VM remains the system of record for inventory in many enterprises. Neither fact settles the reachability question.
  • Function-level SCA and deep runtime ADR tools address other slices of "reachability"; they are out of scope here on purpose.
  • Always validate current product docs; positioning evolves faster than fleets.

References and further reading

Spektion is a runtime exposure management company. Our sensor detects vulnerable and exploitable software behavior, including pre-CVE weaknesses, from runtime telemetry across your endpoints.

See what's exploitable in your environment, whether there's a CVE for it or not.

Many exploitable weaknesses never get a CVE. Book a runtime exposure assessment and Spektion will show what's actually exploitable across your endpoints.

Book an assessment →