June 5, 2026
The Attacker Lives Between Your Tools
Why your SAST, DAST, and SCA each see a clean report — and you still get breached
Eldor Zufarov
8 min read
Every tool passed.
The SAST scan completed without critical findings. The SCA report showed no exploitable CVEs in production dependencies. The DAST run flagged three medium-severity issues, all triaged and accepted. The security dashboard was green. The compliance checkbox was ticked.
Then the breach happened anyway.
Not through a vulnerability any of the tools were looking for. Through the space between them.
The Architecture of Blindness
The modern application security stack was not designed as a system. It was assembled as a collection of independent instruments, each optimized for a specific layer, each reporting findings in isolation, each defining its own perimeter — and stopping at the edge of it.
SAST analyzes source code before it runs. It sees what developers wrote. It does not see what the application becomes at runtime — how components interact under load, how configuration transforms behavior, how infrastructure shapes the attack surface of code that looked clean in review.
DAST tests a running application from the outside. It sees how the application responds to crafted inputs. It does not see the source code that produced those responses, the dependency chain that assembled the runtime, or the infrastructure layer that routes requests before they reach the application.
SCA catalogs third-party components and maps them against known vulnerability databases. It sees what libraries are present. It does not see whether the vulnerable function in a flagged library is actually reachable from the application's execution path — which is why the average SCA report generates enough noise that teams learn to filter it rather than act on it.
Each instrument is technically accurate within its domain. The problem is that attackers do not operate within domains. They operate in the space between them — the gaps that no single tool owns, the transitions that no single tool watches, the moments where one layer hands off to another and assumes the other layer has checked what it needs to check.
That assumption is the attack surface.
Five Dead Zones
The gaps are not theoretical. They are structural properties of how the tools are built. Understanding them precisely is the first step to building coverage that does not stop at instrument boundaries.
Dead Zone 1: The Source-to-Runtime Gap
A developer writes a function that handles file uploads. SAST analyzes it, finds no injection flaws, reports it clean. The function is deployed. At runtime, the application runs inside a container with a misconfigured temporary directory mounted world-writable. The clean function, in a misconfigured environment, becomes an arbitrary file write primitive.
SAST saw clean code. DAST, if it runs against the right endpoint with the right payload, might catch the runtime behavior — but only if it knows to look there, and only if the misconfiguration is visible from the outside. The infrastructure layer that created the condition is visible to neither.
This is not an edge case. The 2025 Verizon DBIR found that vulnerability exploitation surged 34% as an initial access vector, overtaking phishing as the second most common entry point. A significant portion of those exploited vulnerabilities were not unknown zero-days — they were known conditions that existed in the gap between what code review saw and what production looked like.
Dead Zone 2: The Dependency Reachability Gap
SCA reports a critical CVE in a logging library. The security team triages it: the vulnerable deserialization function exists in the library, but — based on a manual review of the codebase — it does not appear to be called. The finding is accepted as low priority. The patch is deferred.
What the manual review missed: a middleware component added three sprints ago calls the logging library's initialization routine, which under specific error conditions invokes the deserialization path. The call chain is four hops long and only activates on malformed input that the application receives from a specific API endpoint.
The attacker does not need to read the code. He needs to send the right malformed input to the right endpoint. The reachability was always there. The SCA tool reported the CVE. Nobody traced the path.
This gap is systemic. The OWASP Top 10 2025 ranks Software Supply Chain Failures at number three. The Verizon 2025 DBIR reports that third-party breaches doubled year-over-year, now accounting for 30% of all incidents. Both data points reflect the same structural problem: teams know their dependencies have vulnerabilities. They do not know which ones are actually reachable from their specific execution context. The tools report presence. They do not report exposure.
Dead Zone 3: The Configuration Inheritance Gap
DAST tests the application in the staging environment. Staging is configured to mirror production, but with one difference the team made six months ago and has since forgotten: a Content Security Policy header that blocks inline script execution in production is relaxed in staging to simplify debugging. The DAST scan runs against the staging endpoint. The CSP is absent. The scan does not flag a CSP bypass vulnerability because, in staging, the CSP is not there to bypass.
The production application has a CSP bypass. The DAST scan reported clean.
Configuration divergence between environments is one of the most reliable sources of security debt that no tool in the standard stack is positioned to detect. SAST does not see configuration. DAST sees the environment it is pointed at. Infrastructure scanners check configuration against baselines — but only if someone defines the baseline, maintains it, and scans both environments consistently.
The 2025 breach of Blue Shield of California illustrates the scale of this problem at its quietest: misconfigured advertising tracking pixels silently transmitted 4.7 million members' health information to third parties for three years. No application vulnerability. No malicious code. A configuration decision — tracking pixels enabled in a context where protected health information was present — that no SAST, DAST, or SCA tool was positioned to catch, because none of them owned the layer where the decision lived.
Dead Zone 4: The Patch Window Gap
A critical CVE is published for an edge device component — a VPN gateway, a load balancer, a WAF appliance. The security team is notified. The patch is prioritized. The remediation process begins: change management review, maintenance window scheduling, testing in non-production, rollback planning, communication to stakeholders.
The median time to remediate a critical vulnerability in enterprise environments now exceeds 60 days. The median time to exploitation for critical vulnerabilities affecting internet-facing infrastructure — as documented in the 2025 DBIR — is measured in hours, not days. For the most severe edge device vulnerabilities disclosed in 2025, the time between public disclosure and mass exploitation was effectively zero: attackers had weaponized the findings before the disclosure was published.
The gap between publication and patch is not a gap in any tool's detection capability. Every scanner will flag the CVE within hours of NVD publication. The gap is between detection and remediation — and it is a gap that grows wider every year as the disclosure-to-exploitation window compresses and the remediation process does not.
Dead Zone 5: The Inter-Tool Correlation Gap
SAST flags an input validation issue in a data processing service — medium severity, accepted with a note to fix in the next sprint. SCA flags an outdated XML parsing library in the same service — low severity, the vulnerable function appears unused. DAST, running against a different endpoint of the same service, flags an information disclosure issue in error responses — low severity, no sensitive data visible in the test payload.
Three findings. Three separate reports. Three separate triage decisions. No single analyst sees all three in context.
An attacker sees the combination: unvalidated input, reaching an XML parser with a known deserialization flaw, in a service that leaks error details about its internal processing. Each finding individually is noise. Together they are an exploit chain. The SAST tool does not talk to the SCA tool. The SCA tool does not know what DAST found. The analyst who triaged the SAST finding has never seen the DAST report.
This is the gap that the ManageEngine post-mortem of 2025's major breaches described most precisely: "Security was siloed — with patching in one tool, endpoint protection in another, and identity management in yet another — leaving behind blind spots for attackers to prey on." The blindness is not in any instrument. It is in the absence of a layer that reads all the instruments together.
Why the Standard Response Fails
The industry's answer to the inter-tool gap is, predictably, more tools.
Add an IAST agent to the runtime. Add a CSPM scanner for cloud configuration. Add an API security gateway. Add an ASPM platform to correlate findings across sources.
Each addition extends coverage in one dimension. Each addition also adds another boundary, another handoff, another assumption that the adjacent layer has checked what it needs to check. The stack grows. The dead zones migrate. The architecture of blindness is preserved at a higher level of complexity.
The more fundamental issue is that tool-centric security measures attack surfaces as a collection of domains, each with its own scanner, each reporting independently. The attacker does not see domains. He sees a system. He maps the transitions between layers because he knows that is where the assumptions live — and assumptions are not checked by any scanner.
Eighty-one percent of developers knowingly ship code with vulnerabilities, according to survey data from 2025. This is not recklessness. It is a rational response to tooling that generates more findings than teams can act on, in formats that do not communicate risk in terms of actual exploitability. When every tool reports in isolation and every finding competes for the same remediation backlog, the signal that matters — the chain, not the individual finding — disappears into the noise.
What Coverage Without Dead Zones Requires
Closing the gaps does not require more tools. It requires a different organizing principle.
Coverage must be defined by attack paths, not by tool domains. The question is not "does SAST cover this code path" or "does DAST test this endpoint." The question is: "can an attacker reach a sensitive operation by chaining findings from different tool domains?" If the answer to that question cannot be determined from the tooling in place, the coverage is incomplete regardless of how many tools are running.
This means attack path analysis cannot be reconstructed after the fact from individual tool reports. It has to be built into the analysis layer — a layer that ingests findings from SAST, DAST, SCA, infrastructure scanners, and configuration baselines simultaneously and looks for combinations that create reachable exploit chains, not just individual findings that exceed a severity threshold.
The patch window gap requires a different operational model than the vulnerability detection gap. Detection is a tooling problem. Remediation velocity is an organizational problem. The 55-day average gap between critical CVE publication and enterprise patch deployment is not closed by a better scanner. It is closed by separating the question of "what is vulnerable" from the question of "what is exploitable right now given current configuration" — and prioritizing the latter with a different urgency threshold than the former.
A vulnerability that exists in a library but is unreachable from any production execution path is a different risk than a vulnerability in a component that handles unauthenticated external input. The tools that report both as "critical" are not wrong. They are solving the wrong problem. The operational question is not "what is the CVSS score" but "what is the blast radius if this fires in production, given what I know about the call graph, the configuration, and the network topology."
Configuration must be treated as part of the attack surface, not as a precondition to security testing. The Blue Shield breach did not require a vulnerability. The SAP NetWeaver zero-day in 2025, which was exploited across 450+ instances before most organizations could respond, succeeded partly because of how those instances were configured at the perimeter. Configuration divergence between environments, missing security headers in production but not in staging, overpermissioned service accounts that DAST never touches — these are first-class attack surface elements that require first-class coverage.
The Structural Observation
Every dead zone in the standard security stack shares the same root cause: each tool owns its domain and assumes the adjacent tool owns its own domain, and nobody owns the boundary between them.
This is not a technology problem. It is an architectural problem — the same architectural problem that produces the alert-list-to-exploit-graph gap in runtime security, the same problem that produces compliance theater in awareness training. The instruments are optimized for their individual functions. The system has no function that is responsible for the space between instruments.
The attacker's advantage is not sophistication. It is coherence. He does not analyze SAST findings, DAST findings, and SCA findings separately and decide which tool's output to trust. He analyzes the system as a system — and finds the transitions that the system's defenders have assigned to nobody.
The 2025 data is consistent on this point across every source: the breaches that defined the year were not breaches through novel techniques or unknown vulnerabilities. They were breaches through known gaps in known configurations, exploited through finding the single soft spot that nobody was watching — then pivoting quietly from there.
That soft spot is always in a dead zone.
The question is not whether your tools are good. They probably are, within their domains.
The question is who is responsible for the space between them — and whether that responsibility has a tool, a process, and an owner, or whether it is the one thing on the security team's map that is simply marked assumed covered.
The attacker has already checked whether that assumption is correct.
He is counting on the fact that you have not.