Reachability is a filter that preserves relevant findings. It reduces finding fatigue by scoping thousands of raw results down to the ones exposed to the assumed attack surface, without discarding data through naive allow/deny filtering.
Definitions
The reachability hierarchy
Binarly answers three progressively broader questions about a finding, then combines the answers in ASAP:1
Intra-component reachability
Is this vulnerable location reachable from a well-known entry-point of the binary it lives in?
2
Inter-component reachability
Is this vulnerable library function actually called by another component?
3
Environment-aware reachability
Is this vulnerable component actually executed or loaded under the package’s assumed configuration?
4
ASAP
Combine the levels above to approximate the relevant attack surface: any component and code that runs or loads and is reachable with respect to the assumed runtime environment and inter-component reachability.
Intra-component reachability
A component does not run all at once. A vulnerability sits at some location in its code, and that location is only a concern if execution can actually reach it. Binarly statically analyses each component to determine whether a vulnerable location is reachable from an entry-point, resolving indirect control flow where it can and reporting conservatively where it cannot. Entry-points depend on the component and platform:- A shared library’s exported functions.
- An executable’s
startormainfunction. - For UEFI, a driver or module’s protocol interfaces, PPIs, registered event handlers, and identified SMI handlers.
- For firmware with an Interrupt Vector Table, the defined Interrupt Service Routines.
Classifying reachability
Reported from high to low risk:
Alongside the class, Binarly provides trace evidence: one or more paths showing that the location is reachable, and a measure of how hard it is to reach.
In the platform, these classes appear in the Code Reachability column. Findings with no analysable code show N/A. See Filtering findings by reachability.
Improving reachability accuracy is an ongoing research effort in the Binarly research team. Intra-component reachability is reported for platforms where Binarly performs in-depth code analysis.
Inter-component reachability
A component does not run in isolation. Binarly determines how components call each other’s exported functions, so an exported function counts as a viable entry-point when another component calls it. This shows how a vulnerable component affects the components that depend on it: ifApplicationX links to LibraryY and calls vuln_fcn1, and LibraryY links to LibraryZ and calls vuln_fcn2, then ApplicationX is affected by {vuln_fcn1, vuln_fcn2}.
Libraries loaded at runtime are included where that use can be identified statically.
Environment-aware reachability
An execution environment holds both software components and artifacts. Artifacts may be regular files, but some configure the runtime. In an embedded Linux environment, boot scripts determine which components load and run during initialisation. That list, together with later component-specific configuration files, determines the set of components that can run. Binarly may not determine this set exactly, but it approximates it and uses the result to mark which component entry-points are viable. Binarly approximates which components run from the package configuration:- Containers, from the OCI image configuration: the
Entrypoint,Cmd, andEnvproperties determine what launches when the container starts. - Linux-like firmware and system images, from standard start-up scripts such as those under
/etc/init.d/. - System firmware, from the firmware image structure, for example the modules present in a UEFI firmware image.
ASAP: approximating the attack surface
ASAP combines the levels above into a single question: given the components that will run or load, and how they reach each other, which findings sit on the relevant attack surface? Everything else can be filtered out or de-prioritised. The relevant attack surface is any component and code that runs or loads and is reachable with respect to the assumed runtime environment and inter-component reachability.ASAP keeps the components reachable from real entry points in scope and pushes the ones that never execute out of the way.
On real containers and images, scoping findings to the ASAP attack surface reduces the count of findings to assess by roughly an order of magnitude, depending on container or image size. The same computation supports a fast-scan configuration: analyse in depth only the components assumed to be reachable.
How ASAP discovers reachable components
ASAP determines which components are likely to execute under a given configuration. Each supported package type has a default policy for which components are assumed to execute first. From there, ASAP follows each component’s runtime dependencies and the components it invokes, adds the newly discovered components, and repeats until no new components are found.The environment reachability metric
For each component that may execute under ASAP’s assumptions, the reachability is attached to every finding on that component. Each result records the environment it was derived from, the reachability kind, and a confidence value. The environment classes are:
A component reachable from more than one other component carries more than one result, each naming the referent component it is reachable from. Components outside the assumed attack surface are reported as undetermined. In the findings grid and finding detail these appear as the Environment Reachability values and their from Component(s) list.
The reachability kinds are:
Where reachability is used
Reachability is a reweighting factor for existing severity and exploitability metrics. Binarly applies it to:- Triage prioritisation: the order in which vulnerabilities should be assessed, highest risk first.
- Remediation prioritisation: the order in which vulnerabilities should be patched.
- Third-party component risk: how much additional risk a component with a known vulnerability introduces in the context of a larger product, given its reachability profile.
- Risk reweighting: when reachability is computed at the environment or inter-component level, it can rescore the impact or severity of a known vulnerability considered in the context of where it exists within a wider product.
ASAP combines code, component, and environment reachability; the Exploitation Maturity Score adds real-world exploitation signal on top.
Reachability in the platform
Reachability appears throughout the Binarly Transparency Platform:- On the finding details page, the Code Reachability and Environment Reachability results sit alongside CVSS, EPSS, EMS, and confidence to indicate exploitability.
- In the Findings grid, the Code Reachability and Environment Reachability columns each have a filter, so you can scope a view to reachable findings and combine the two. See Filtering findings by reachability.
- Reachability feeds the Binarly Risk Score: the reachability kind and confidence, for both code and environment reachability, reweight a finding’s score, so reachable findings rank higher.
- Reachability data is included in exports: VEX, CBOM, and PQC reports.
Reference
Reachability Analysis for Binary Executables. Matrosov, Thomas, Vasilenko. US Patent 12,287,885 B1, April 2025.Related
Binarly Risk Score
How reachability reweights a finding’s risk score.
Exploitation Maturity Score
Real-world exploitation evidence that complements reachability.
Finding types
The classes of finding reachability is computed for.
Accuracy and confidence
How Binarly reports confidence in its results.