SAST vs DAST vs SCA: Application Security Testing
The Breach That Three Scanners Missed
In May 2023, a MOVEit Transfer zero-day (CVE-2023-34362) compromised 2,500+ organizations. The SQL injection vulnerability existed in application code that SAST tools should have flagged -- but many organizations running SAST had it configured only for their custom code, not for commercial-off-the-shelf products. DAST tools could have found it with authenticated scanning against the management interface, but most deployments excluded vendor appliances from dynamic scan scope. SCA tools tracked MOVEit as a dependency but could not flag a zero-day with no published CVE.
Each testing approach covered part of the attack surface. None covered all of it. The organizations that caught it fastest were running all three with overlapping scope -- and still needed a vendor patch they could not write themselves.
That is the reality of application security testing in 2026: no single approach is sufficient, combining them requires deliberate architecture, and even full coverage has blind spots.
Why Now: Application Layer Attacks Dominate
Application-layer attacks -- exploited vulnerabilities in web applications and their components -- rank among the leading initial access vectors in confirmed breaches (Verizon DBIR), and vulnerability exploitation as an entry point has grown sharply year over year. The shift is structural: as network perimeters harden and endpoint detection improves, attackers follow the path of least resistance into custom code, third-party libraries, and runtime misconfigurations.
Three developments make the SAST/DAST/SCA triad more critical than ever:
- Software supply chain as attack vector. The xz backdoor (CVE-2024-3094) proved that even core system libraries can be compromised through social engineering of maintainers. SCA is no longer optional -- it is a national security requirement for any DoD or federal system.
- CISA Secure Software Development Attestation. Federal suppliers must now attest to automated security testing in their SDLC. "We do code reviews" no longer satisfies the requirement.
- AI-generated code velocity. Development teams shipping 2-3x more code per sprint through AI pair programming are also shipping 2-3x more potential vulnerabilities per sprint. Testing automation must scale with development velocity.
The contrarian take: most teams over-invest in SAST and under-invest in SCA. Your custom code is ~20% of your application. The other 80% is third-party libraries that SCA covers and SAST ignores entirely.
SAST (Static Application Security Testing)
SAST analyzes source code, bytecode, or compiled binaries to identify security vulnerabilities without executing the application. It traces data flow through your code looking for patterns where untrusted input reaches sensitive operations (sinks) without proper validation or sanitization.
What SAST Finds
- SQL injection and NoSQL injection
- Cross-site scripting (XSS) -- reflected, stored, and DOM-based
- Buffer overflows and memory corruption (C/C++)
- Hard-coded credentials and API keys
- Insecure cryptographic usage (weak algorithms, static IVs)
- Path traversal and local file inclusion
- Race conditions and TOCTOU vulnerabilities
- Deserialization of untrusted data
Strengths
- Finds vulnerabilities at the earliest possible stage -- before code compiles or deploys.
- Identifies the exact file, line, and data flow causing the vulnerability.
- Covers all code paths, including error handlers and rarely executed branches that DAST cannot reach.
- Integrates into IDEs for real-time developer feedback.
Limitations
- False positive rate of 15-40% is typical. Developers learn to ignore findings when half are wrong, creating dangerous habituation.
- Cannot detect runtime configuration issues, authentication logic flaws, or business logic vulnerabilities.
- Language-specific -- each tool supports a limited set of languages, and polyglot applications require multiple scanners.
- Cannot evaluate whether a vulnerability is actually reachable from an external attack surface.
Practical deployment
Run SAST in CI on every pull request. Configure it to block on High-confidence Critical/High findings only. Route Medium findings as non-blocking PR comments. Suppress informational findings entirely -- they train developers to ignore all scanner output.
DAST (Dynamic Application Security Testing)
DAST tests running applications by sending crafted HTTP requests and analyzing responses. It operates as an automated attacker: it crawls the application, identifies input points, injects payloads, and observes whether the application responds in ways that indicate vulnerability.
What DAST Finds
- Server and middleware misconfigurations (directory listing, verbose errors, debug endpoints)
- Authentication weaknesses (credential stuffing susceptibility, session fixation)
- Session management flaws (predictable tokens, missing secure flags)
- Input validation failures visible in HTTP responses
- SSL/TLS misconfigurations (weak ciphers, expired certificates, missing HSTS)
- CORS misconfiguration allowing credential theft
- Information disclosure (stack traces, version headers, internal IPs)
- API security issues (broken object-level authorization, mass assignment)
Strengths
- Tests the application exactly as an attacker would encounter it -- no source code access required.
- Language-agnostic. Tests the running application regardless of implementation language.
- Lower false positive rate than SAST for injection and configuration findings (if the application actually returns a SQL error, it is vulnerable).
- Discovers issues that only manifest at runtime: middleware misconfigurations, header policies, deployment-specific flaws.
Limitations
- Cannot identify the specific code causing the vulnerability -- only the URL and parameter where it manifests.
- Only tests reachable code paths. Functionality behind complex authentication flows, multi-step workflows, or feature flags may be missed.
- Requires a running environment, adding infrastructure cost and pipeline time.
- Slower than SAST -- each test requires HTTP round-trips. Full scans of large applications take hours.
Practical deployment
Run DAST against staging after every deployment. Use authenticated scanning (provide the scanner with valid credentials for each user role). For APIs, feed the DAST tool your OpenAPI/Swagger spec so it knows all endpoints without crawling. Schedule weekly full scans against production with non-destructive payloads.
SCA (Software Composition Analysis)
SCA analyzes your application's dependency tree -- direct and transitive -- to identify known vulnerabilities, license risks, and supply chain threats in third-party components.
What SCA Finds
- Known CVEs in direct and transitive dependencies (the Log4Shell class: CVE-2021-44228 sat in dependency trees for years before disclosure)
- Outdated dependencies with available security patches
- Dependencies with restrictive or incompatible licenses (GPL in proprietary code, AGPL in SaaS)
- Abandoned or unmaintained dependencies (no commits in 2+ years)
- Dependencies with known malicious versions (typosquatting, maintainer account compromise)
- Reachability analysis: is the vulnerable function actually called by your code?
Strengths
- Covers the 70-90% of your application that you did not write. Modern applications import hundreds of transitive dependencies.
- Cross-references against CVE databases, CISA KEV, and exploit maturity data.
- Generates SBOM artifacts required by Executive Order 14028 and CISA attestation.
- Identifies license compliance issues before legal exposure materializes.
- Fast -- dependency tree resolution takes seconds, not the hours that DAST requires.
Limitations
- Only finds known vulnerabilities. Zero-days in dependencies (like xz before disclosure) are invisible until a CVE is assigned.
- May flag vulnerabilities in functions your code never calls. VEX (Vulnerability Exploitability eXchange) and reachability analysis address this but are not universally supported.
- Cannot find flaws in your custom code -- only in imported components.
- Dependency confusion and internal package namespace attacks require additional tooling beyond basic SCA.
Practical deployment
Run SCA in CI on every build. Block on Critical findings that appear in CISA KEV or have EPSS > 0.7. Generate SBOM on every release. Set up continuous monitoring (not just build-time) -- new CVEs are published against existing dependencies daily.
Combining All Three in CI/CD
The most effective application security programs run all three approaches with stage-appropriate gating:
| Pipeline Stage | Tool(s) | Gate Behavior | Rationale |
|---|---|---|---|
| IDE / pre-commit | SAST (lightweight) | Advisory only | Fastest feedback; blocking here frustrates developers |
| PR / build | SAST + SCA | Block on Critical/High (high-confidence) | Prevents known-bad code and vulnerable deps from merging |
| Staging deploy | DAST (authenticated) | Block on Critical | Catches runtime and configuration issues post-build |
| Production | DAST (scheduled weekly) | Alert + auto-ticket | Detects drift and newly discovered runtime issues |
| Continuous | SCA (monitoring mode) | Alert on new CVEs in existing deps | Catches post-deploy disclosure of vulnerabilities |
The Coverage Matrix
| Vulnerability Class | SAST | DAST | SCA |
|---|---|---|---|
| SQL injection in custom code | Yes | Yes | No |
| XSS in custom code | Yes | Yes | No |
| Known CVE in dependency | No | No | Yes |
| Server misconfiguration | No | Yes | No |
| Hard-coded credentials | Yes | No | No |
| Authentication bypass | Partial | Yes | No |
| Supply chain compromise | No | No | Yes |
| Business logic flaw | No | Partial | No |
| API authorization issues | No | Yes | No |
No single column covers all rows. That is why all three are required.
Consolidating Findings
Running three tools produces three separate finding streams with different formats, severity scales, and false positive rates. Without consolidation, you get three backlogs that nobody prioritizes across. The consolidation requirements:
- Deduplicate: SAST and DAST both find the same SQL injection via different paths. Count it once.
- Normalize severity: a SAST "High" and a DAST "High" may not represent equal risk.
- Correlate with asset context: a finding in a payment processing service outweighs the same finding in an internal wiki.
- Track remediation status across tools: when the developer fixes the code (SAST finding resolves), verify the runtime is no longer exploitable (DAST finding resolves).
Key Takeaways
- No single tool covers the full application attack surface. SAST sees your code. DAST sees your runtime. SCA sees your dependencies. Gaps between them are where breaches happen.
- SCA is the most under-invested of the three despite covering 70-90% of application code by volume. If you can only fund one tool, fund SCA.
- Gate appropriately by stage. Block on high-confidence Critical findings. Advisory on everything else. Developers who are blocked by false positives will find ways to bypass the gate entirely.
- Consolidate findings across tools into a single prioritized queue. Three separate backlogs means nothing gets prioritized against everything else.
- SBOM generation is now a federal requirement, not a nice-to-have. SCA produces it as a byproduct. If you are in the federal supply chain, you need SCA regardless of vulnerability findings.
Frequently Asked Questions
Which tool should we implement first if we have none?
Start with SCA. It covers the largest portion of your codebase (third-party dependencies), has the lowest false positive rate, produces SBOM artifacts required for federal compliance, and is the fastest to implement (no source code integration required -- just point it at your manifest files). Add SAST second for custom code coverage, then DAST for runtime validation.
How do we handle the false positive problem with SAST?
Three approaches, used together: (1) Configure severity thresholds aggressively -- only block on High-confidence findings, not everything the tool reports. (2) Invest in tuning -- suppress known false positive patterns specific to your codebase and framework. (3) Use confirmed-exploitable correlation: if DAST confirms a finding that SAST reports, promote its priority; if DAST cannot reproduce it after authenticated scanning of that endpoint, demote it. False positive management is ongoing operational work, not a one-time configuration.
Does DAST work for APIs (not just web UIs)?
Yes, but it requires API-aware configuration. Feed the DAST tool your OpenAPI/Swagger specification or Postman collection so it knows all endpoints, parameters, and expected request formats. Without this, DAST can only discover endpoints through crawling links in HTML -- which finds nothing in a headless API. Modern DAST tools support REST, GraphQL, gRPC, and WebSocket protocols with appropriate configuration.
How does SCA handle transitive dependencies?
SCA tools resolve the full dependency tree -- not just your direct imports but everything those imports pull in. A typical Node.js application with 50 direct dependencies may have 800+ transitive dependencies. SCA scans all of them. The challenge is signal: a Critical CVE in a transitive dependency that your code never actually calls is lower risk than a Medium CVE in a function you invoke directly. Reachability analysis (supported by newer SCA tools) addresses this by tracing whether the vulnerable function is actually in your call graph.
What evidence do these tools produce for compliance audits?
Each tool produces distinct compliance artifacts: SAST provides code analysis reports demonstrating secure development practices (NIST 800-53 SA-11, FedRAMP SA-11). DAST provides runtime security assessment evidence (NIST 800-53 CA-8, RA-5). SCA provides SBOM documents and dependency vulnerability reports (EO 14028, CISA attestation requirements). Together, they satisfy the "automated security testing" attestation requirement. Scan results with timestamps, finding counts, and remediation tracking form continuous compliance evidence, not point-in-time snapshots.
How Advisedly Helps
Advisedly ingests findings from SAST, DAST, and SCA tools alongside infrastructure vulnerability scans and IaC scanning results into a unified view across 500+ compliance frameworks. The platform deduplicates cross-tool findings, normalizes severity using TRACE Score risk-based prioritization, and produces a single remediation queue ranked by actual organizational risk -- not raw scanner severity. The pipeline engine gates deployments on configurable application security thresholds, and scan artifacts flow automatically into auditor packets as continuous compliance evidence. Contact begin@advisedly.ai to consolidate your application security testing into a unified compliance-aware program.
<!-- LI hook: Three AppSec backlogs. Zero unified prioritization. Fix that. -->