IAST Explained: Where It Fits Alongside DAST and SAST
IAST instruments the application at runtime to observe security issues during actual execution. This guide explains how it works, where it fits in the AppSec stack, and when to use it.
SAST tools are the default starting point for most application security programs. They integrate early in the development lifecycle, give developers immediate feedback at the IDE or commit stage, and scan every code path in the codebase rather than only the paths exercised during testing.
The problem is that "SAST found no issues" is frequently interpreted as "the application is secure": a conclusion the tool cannot support. SAST finds a specific category of vulnerability reliably. Outside that category, it contributes little. Understanding exactly where the line falls is what allows security teams to build AppSec programs that use SAST for what it does well and layer in the tools that address what it cannot.
Static Application Security Testing analyses source code, bytecode, or binary representations of an application without executing it. The analysis runs at build time, in the IDE, or during code review, producing findings before the application is ever deployed.
The core analysis mechanisms most SAST tools use:
Taint analysis tracks data as it flows from sources (user inputs, external APIs, file reads) through transformation functions to sinks (SQL queries, shell commands, HTML output, file writes). When untrusted data reaches a sensitive sink without passing through appropriate sanitisation, SAST flags a taint vulnerability.
Pattern matching and rule-based detection identifies code patterns that match known vulnerability signatures: functions known to be dangerous, APIs called without required safety parameters, known-insecure cryptographic algorithm usage.
Abstract syntax tree (AST) analysis parses the code into a structural representation and applies rules against the AST to find structural code quality issues and security anti-patterns.
Control flow and data flow analysis maps how execution moves through the code and how data values change across that execution, enabling more sophisticated findings than simple pattern matching.
These mechanisms give SAST its core capabilities, and define the exact boundary of what it can and cannot find.
Taint analysis is SAST's strongest capability. When user-controlled input flows directly into a SQL query, a shell command, an LDAP filter, or an XPath expression without sanitisation, taint analysis reliably identifies it. String concatenation directly into a query at line 847 of DatabaseHelper.java is findable by SAST because the data flow from the input source to the vulnerable sink is visible in the code.
The qualifier "in first-party code" is important. Taint analysis follows data through the code you wrote. When data passes through third-party library calls, SAST follows the flow only to the extent it has models of those library functions. Libraries without taint models (which describes most internal or less popular libraries) break the taint chain.
Hardcoded API keys, passwords, tokens, and private keys in source code are reliably found by SAST pattern matching. This is one of the highest-value SAST findings because hardcoded credentials in source code that reaches version control are a persistent, high-impact vulnerability class that developers regularly introduce.
Modern SAST tools also detect secret-like patterns: high-entropy strings, strings that match API key formats for specific providers, and connection strings with embedded credentials.
SAST pattern matching reliably identifies: deprecated cryptographic algorithms (MD5, SHA-1, DES used for security-sensitive purposes), hardcoded cryptographic keys, insufficient key lengths, insecure random number generation using non-cryptographic PRNGs for security purposes, and cipher modes with known weaknesses (ECB mode for block ciphers).
For C, C++, and Rust code, SAST tools reliably identify buffer overflow patterns, format string vulnerabilities, use-after-free patterns in manual memory management, and integer overflow in unsafe arithmetic.
SAST reliably flags: dangerous functions with known security implications (gets, strcpy, sprintf without bounds checking), known-dangerous API calls without required safety parameters, and framework-specific security anti-patterns like disabling CSRF protection or SQL query construction without parameterisation in frameworks where the safer pattern is available.
Business logic vulnerabilities have no code pattern to match. Finding them requires understanding what the application is supposed to do and testing whether the code enforces that intent. SAST has no model of application intent. It cannot determine that a checkout flow allows duplicate discount application because the validation logic does not check whether a coupon has already been applied in the current session, or that an approval workflow can be bypassed by accessing the final step URL directly.
This is a structural limitation, not an implementation gap. No improvement to taint analysis or pattern matching addresses it, because the vulnerability is in the relationship between what the code does and what the application should do.
Many vulnerability classes are invisible to static analysis because they only manifest during execution:
Authentication and session management flaws often depend on the interaction between code, configuration, and runtime state. Session fixation, token predictability from weak entropy sources, and MFA bypass through race conditions all require runtime execution to observe.
Server-side request forgery (SSRF) in complex applications depends on which internal services are reachable from the application server at runtime, which SAST cannot know.
Deserialization vulnerabilities depend on which gadget chains are available in the runtime classpath: information that changes with dependency versions and deployment configuration.
Prototype pollution and type confusion in JavaScript depend on the runtime object graph, which static analysis can approximate but not fully model.
SAST cannot test whether authorization controls are actually enforced. It can flag missing authorization decorators or the absence of known framework authorization mechanisms. It cannot determine whether user A can access user B's resource by modifying a resource ID parameter, because that requires executing the request as user A and observing whether the authorization check in the server-side code correctly rejects it.
Broken access control is consistently the top category in the OWASP Top 10. It is also one of the categories where SAST contributes least, because access control correctness is a runtime property that depends on the relationship between request parameters, session state, and the authorization logic executed against them.
SAST analyses the code you write. Third-party libraries, framework components, and dependency chains are modelled only where the SAST tool has pre-built models. The interaction between your code and library behavior at runtime, including vulnerabilities introduced by how you configure and use libraries rather than by the library code itself, is frequently invisible to SAST.
Security misconfigurations are deployment-time properties: debug mode enabled in production, permissive CORS headers, missing security headers in HTTP responses, overly permissive cloud storage bucket policies, TLS configuration weaknesses. SAST analyses code. Configuration deployed to an environment is only visible to SAST if it is hardcoded in the codebase, not when it is environment-variable-driven or infrastructure-as-code.
SAST analyses vulnerabilities in isolation. A low-severity information disclosure in one endpoint that enables targeting a separate authentication weakness that together enable privilege escalation is a chain that SAST cannot construct. Each element is analysed independently against the code that produces it. The cross-component reasoning that produces chained attack paths requires runtime context and attacker perspective that static analysis cannot replicate.
The Reddit threads in this SERP (practitioners debating whether SAST is worth the triage overhead) are the market signal that the false positive problem is real and consequential.
SAST false positives arise from pattern matching without runtime context. A SQL query constructed through string concatenation that is actually safe because the concatenated value comes from an enum with fixed values, not from user input, triggers a taint finding. The SAST tool sees concatenation into a SQL context and flags it. The developer investigating the finding determines it is safe. That investigation takes fifteen minutes. Multiplied across dozens of false positives per scan, the triage overhead is real.
Mature SAST programs address false positives through suppression rules, baseline ignore lists, and analyst triage layers. These add operational complexity and delay. A significant portion of SAST program operational cost is false positive management, not vulnerability investigation.
IAST tools have substantially lower false positive rates because findings are confirmed in actual execution rather than inferred from code patterns. IAST explained: where it fits alongside DAST and SAST covers the runtime instrumentation mechanism that produces this property and where IAST fits in the broader AppSec stack.
With OWASP's tool list as the dominant SERP result and multiple "best SAST tools" comparison pages each presenting different rankings, the evaluation criteria that matter more than vendor rankings:
Language and framework coverage. A SAST tool optimised for Java will produce significantly better results on Java than a generalist tool. Match the tool to your primary technology stack. Polyglot codebases may require multiple specialised tools rather than one generalist.
Taint model depth. The quality of a SAST tool's taint analysis is determined by the depth of its taint models for the frameworks and libraries in your stack. A tool with deep taint models for Spring will find more real injection vulnerabilities in Spring applications and produce fewer false positives. Ask vendors for their taint model coverage for your specific frameworks.
IDE integration latency. The earlier a finding surfaces, the lower the remediation cost. A finding surfaced in the IDE as the developer writes the code takes seconds to fix. The same finding surfaced in a CI pipeline build requires a context switch. Tools with IDE plugins that run fast enough to provide real-time feedback change developer behavior more effectively than build-time-only tools.
False positive rate on your codebase. The only reliable way to evaluate false positive rates is to run the tool on representative samples of your actual codebase, not on vendor-provided benchmarks. Vendor benchmark performance and real-codebase performance frequently diverge because vendors tune their tools on their own benchmarks.
Integration with your workflow. SAST tools that integrate with your existing issue trackers, code review platforms, and CI/CD pipelines reduce the activation energy for acting on findings. A finding that creates a GitHub issue automatically has a shorter path to developer action than one that lives in the SAST dashboard.
SAST is a complement to other security testing tools, not a substitute. The AppSec stack that addresses the full vulnerability landscape:
SAST in the IDE and pre-commit hooks for early detection of code-pattern vulnerabilities in first-party code, hardcoded secrets, and dangerous API usage, catching issues at the lowest remediation cost point.
SAST limitations companion: what is SAST and its limitations covers the structural limitations in more depth, including the technical reasons taint analysis cannot address the runtime vulnerability classes.
IAST in the test environment for runtime-confirmed findings with low false positive rates and code-level attribution, covering the runtime gap that SAST cannot reach.
DAST in the CI/CD pipeline for external attack surface regression detection against the deployed application. SAST vs DAST vs agentic pentesting maps the full comparison across all three tools.
Agentic continuous pentesting against the full application surface for the vulnerability classes none of the above tools cover: business logic, multi-role authorization gaps, race conditions, and chained attack paths. Agentic pentesting and continuous security validation covers the model. The security gaps DAST and standard testing misses maps the ten specific categories.
The full AppSec overview (how all four layers fit together and where each sits in the development lifecycle) is in what is application security testing: SAST, DAST, IAST, and autonomous pentesting. What a real web application penetration test should cover maps the twelve coverage dimensions a complete security program requires, including the application-layer surfaces that SAST cannot assess. API vulnerabilities standard penetration tests miss covers the API-specific gap where SAST's third-party library modelling is thinnest.
For penetration testing services and VAPT services that address the runtime exploitation gap SAST cannot close, or agentic penetration testing as the continuous exploitation validation layer, the 10x Pentest platform covers the model. See pricing or get in touch to discuss how the stack fits together for your environment.
Q1. What do SAST tools find?
SAST tools reliably find: injection vulnerability patterns in first-party code where taint analysis can trace data from user-controlled input to sensitive sinks without sanitisation; hardcoded secrets, API keys, and credentials in source code; insecure cryptographic usage including deprecated algorithms, weak key lengths, and insecure random number generation; memory safety vulnerabilities in systems languages; and dangerous function usage and known-insecure API calls. Their effectiveness is highest in these categories when the tool has deep models for the specific language and framework in use.
Q2. What do SAST tools miss?
SAST tools structurally cannot find: business logic vulnerabilities that require understanding application intent; runtime-only vulnerabilities including authentication session management flaws, SSRF dependent on runtime network topology, and deserialization gadget chains dependent on the runtime classpath; authorization enforcement gaps that require executing requests with specific credentials to observe; third-party library behavior not covered by the tool's models; configuration and deployment misconfigurations not hardcoded in source; and chained attack paths requiring cross-component reasoning across multiple endpoints.
Q3. What is the false positive rate of SAST tools?
False positive rates vary significantly by tool, language, framework, and codebase characteristics. Industry benchmarks show SAST false positive rates commonly ranging from 20% to 50% of total findings depending on tool maturity and codebase patterns. Real-world rates in complex enterprise codebases with heavy framework usage are often higher. False positive management is a significant operational cost in SAST programs, frequently consuming more analyst time than genuine vulnerability investigation.
Q4. How do SAST tools integrate with DevSecOps pipelines?
SAST tools typically integrate at two points: IDE plugins that provide real-time feedback as developers write code, surfacing findings before code is committed; and CI/CD pipeline integrations that run scans on pull requests or commits, gating merges on finding severity thresholds. IDE integration catches issues at the lowest cost point. CI/CD integration provides consistent enforcement. Most mature SAST programs use both, with IDE integration for developer feedback and pipeline integration for policy enforcement. Integration with issue trackers (GitHub Issues, Jira) allows findings to flow directly into development workflows.
Q5. Does SAST replace penetration testing?
No. SAST finds a specific category of vulnerability in code patterns at build time. Penetration testing confirms which vulnerabilities are actually exploitable in the deployed application, covers vulnerability classes with no code patterns including business logic flaws and authorization gaps, and tests the authenticated application surface that SAST cannot assess. An application with clean SAST results can still have critical penetration testing findings because the vulnerability classes each tool covers are largely non-overlapping. SAST and penetration testing address different layers of the same security problem and complement rather than substitute for each other.
Schedule a free consultation and see how teams like yours are strengthening their security posture — continuously.