Résumé
- The difference between SAST and DAST lies in how they analyze applications for security vulnerabilities.
- Static Application Security Testing (SAST) inspects source code without execution early in the development lifecycle.
- Dynamic Application Security Testing (DAST) tests running applications from an outside attacker's perspective during runtime.
- Combining both methods secures modern development pipelines against vulnerabilities introduced by rapid AI coding agents.
Both methods look for security vulnerabilities. But they ask different questions, at different times, from different vantage points. Understanding the distinction is the foundation of any serious AppSec program and a stronger overall security posture.
Analyzes source code without running it
SAST reads your source code the way a reviewer who never gets tired would—tracing every variable, every data flow, every dependency, before the application ever executes. It runs during development, in the IDE, at pull request, and in CI/CD pipelines. Developers see findings in real time, in context, at the moment of introduction.
Attacks a running application from the outside
DAST tests a deployed application the way an external attacker would—probing live endpoints, manipulating sessions, and analyzing server responses for exploitable conditions. It requires a running environment and finds issues that only emerge at runtime: authentication flaws, header misconfigurations, business logic gaps, and third-party service behavior.
The core differences
Same goal. Fundamentally different methods, timing, and scope.
What vulnerabilities does SAST find that DAST cannot, and vice versa?
The methods have different blind spots by design. Neither one covers everything on its own.
Code-level vulnerabilities before execution
- SQL, XSS, LDAP, and command injection via taint analysis across files and methods, including patterns that can lead to SQL injections
- Hardcoded credentials, API keys, and secrets in source files and configuration
- Insecure cryptography: weak algorithms, improper key management
- Code quality issues that create security risk: null dereferences, resource leaks, dead code
- Security issues: sensitive patterns that require human review
- Architectural drift and logic errors introduced by AI-generated code
Runtime vulnerabilities visible only to an attacker
- Confirmed injection vulnerabilities exploitable in the live environment
- Authentication and session management flaws: broken auth, session fixation
- Misconfigured HTTP headers, CORS policies, and server responses
- Business logic flaws that only appear when the full application stack runs in DAST tools
- API security gaps: exposed endpoints, improper authorization
- Third-party component behavior that cannot be predicted from source alone
- Infrastructure and server misconfigurations invisible to code analysis
What SAST cannot do
- Find vulnerabilities that only emerge when code runs in a real environment
- Detect authentication flaws in a deployed application session handling
- Identify server misconfiguration below the application layer
- Test business logic that depends on live user flows and state
- Catch third-party service behavior unpredictable from source
What DAST cannot do
- Analyze code that has not been deployed—no shift-left capability
- Find hardcoded secrets before they reach a running environment
- Trace taint flows across source files and method calls
- Catch vulnerable dependencies at the manifest level
- Provide fix guidance tied to specific lines of code
Do I need both SAST and DAST or is one enough?
SAST and DAST are not redundant. They cover different parts of the attack surface at different points in the lifecycle. A program that relies on only one is accepting a known gap.
Fix cost scales with time
A vulnerability caught during development costs a fraction of one caught in production. SAST closes the gap early. DAST validates that the gap stays closed after deployment. Together they minimize the window in which a flaw exists and is undetected.
Different attack surfaces
SAST sees the code. DAST sees what an attacker sees. Some vulnerabilities—session fixation, header misconfiguration, third-party runtime behavior—are invisible to source code analysis. Others—logic errors, taint flows, hardcoded secrets—are invisible to a scanner that only sees HTTP traffic.
Compliance requires coverage
PCI DSS, OWASP, and most enterprise security frameworks explicitly require both static and dynamic testing. A single-method approach is unlikely to satisfy an external audit, regardless of how thorough the tooling is.
How AI coding agents are changing what SAST and DAST need to do
AI agents are the fastest-moving variable in modern software delivery. They generate code at machine speed, read local files before any commit is made, pull in dependencies without human review, and transmit context to LLM providers before any security control fires. Both SAST and DAST must adapt—and the combination of both becomes more important, not less.
The new threat surface AI agents introduce
Traditional AppSec models assume a human developer writes code, commits it, and pushes to a pipeline. AI coding agents break that model in three ways:
- Agents read local files—including credentials and config—before any commit is made and before any existing security control fires.
- Agents transmit file contents and prompts to external LLM providers, creating a data exfiltration risk that exists entirely outside the traditional SDLC.
- Agents generate code at a pace that makes per-file human review impractical—a 3,000-line pull request today may be a 300,000-line pull request tomorrow.
- Agents hallucinate packages, APIs, and functions that appear valid but are incorrect or unsafe, exposing teams to dependency confusion and slopsquatting attacks.
- In agentic workflows, a single agent pass may change code, configurations, tests, and dependencies simultaneously—making issues significantly harder to trace and remediate.
The core problem
Velocity has outpaced the system designed to control it. Traditional CI/CD pipelines were built for incremental human changes—not large bursts of machine-generated code arriving at agent speed. By the time a pipeline fires, an agent may have already read your credentials, written insecure code, and pulled in vulnerable dependencies.
How AI agents change the requirements for SAST tools
SAST was always the right tool for code-level issues. AI agents make it both more important and more demanding:
SAST must move earlier—inside the agent loop
Traditional SAST runs in CI/CD—after code is committed, pushed, and built. For agent-generated code, that is too late. Secrets, insecure patterns, and vulnerable dependencies can leave the software developer environment before any pipeline fires.
Modern SAST must run as a pre-capture hook—intercepting files before an agent reads them and scanning prompts before they reach an LLM provider. This is the inner loop of verification: catching issues at their earliest possible point.
SAST must verify AI output, not just human output
AI-generated code introduces specific patterns that SAST tools must be tuned to detect:
- Verbose, over-engineered code that reproduces insecure patterns from training data
- Hallucinated package names that enable dependency confusion and supply chain attacks
- Weakened input validation: agents often omit sanitization steps that human developers include by habit
- Insecure defaults pulled from outdated training examples: deprecated APIs, weak crypto algorithms
- Architectural drift: agent-generated code that is functionally correct but inconsistent with the existing system design
SAST must be fast enough for agents
An agent generating dozens of files per session cannot wait seconds per file for analysis. Low latency per file is required for SAST to function as a practical inner-loop control. With high latency, it becomes a friction point that teams disable or bypass.
SAST must be independent of the generating model
Asking an AI agent to review its own output for security issues creates a fundamental flaw: the same system that introduced a vulnerability is evaluating whether that vulnerability exists. This is known as self-assessment bias. Effective SAST for agentic workflows must come from a dedicated engine that is entirely independent of the model that wrote the code.
What good SAST looks like in an agentic workflow
Pre-capture hooks fire before the agent reads a file or sends a prompt. Results are injected back into the agent context so the agent can self-correct. Quality gates block merges if agent-generated code introduces new issues.
Why the combination becomes more important, not less
In a traditional SDLC, SAST and DAST together provide comprehensive coverage. In a world with AI agents, the stakes are higher:
- Secrets and insecure patterns generated by agents must be intercepted before they leave the developer machine. That is a SAST problem.
- Agent-generated code entering production at machine speed must be validated against real runtime conditions. That is a DAST problem.
- The window between code generation and deployment is shrinking. Both controls must be faster, more automated, and more deeply integrated into the development workflow.
- Neither method alone is sufficient. SAST without DAST leaves runtime conditions unvalidated. DAST without SAST allows issues to reach production that could have been caught in seconds
How does SonarQube fit into a SAST and DAST security program?
SonarQube is fundamentally a SAST platform. It brings code-centric security analysis into the IDE, the pull request, the CI/CD pipeline and into the agentic loop, where the verification gap is most acute.
Cross-file taint analysis
Tracks data flows across method boundaries and files to find injection vulnerabilities that pattern matching misses. SQL, XSS, LDAP, command injection all traced to their source and sink.
Secrets detection (pre-capture)
450+ patterns across 248 cloud services. Pre-capture hooks intercept secrets before an agent reads a file or a prompt reaches an LLM provider. The earliest possible control point in the agentic workflow.
Software composition analysis
Dependency risk scanning for CVEs, malware, and license violations at the terminal before a pipeline runs, before an agent generates code that depends on a vulnerable package.
Quality gates that block bad merges
Configurable conditions such as new issues, security ratings, and coverage thresholds that must pass before a pull request can merge. Not a report to review. A gate that holds.
AI agent verification (independent layer)
Runs as an independent static analysis layer inside Claude Code and GitHub Copilot workflows. PostToolUse hooks fire after every file an a
gent writes. PreToolUse hooks fire before an agent reads a file. UserPromptSubmit hooks scan prompts before they reach the LLM.
# SonarQube SAST inside the agentic loop
# Secrets intercepted before agent reads file
$ sonar integrate claude -p my-api
✓ PreToolUse hook installed -- scans files before agent reads them
✓ UserPromptSubmit hook installed -- scans prompts before LLM receives them
✓ PostToolUse hook installed -- runs Agentic Analysis after agent writes
# Agent generates code -- SonarQube catches issues immediately
✗ CRITICAL src/api/auth.ts:34
SQL Injection -- tainted input from request.query reaches raw query
Source: UserController:23 Sink: DatabaseService:112
✗ HIGH src/api/auth.ts:12
Hardcoded credential: JWT_SECRET = 'dev-secret-do-not-ship'
⚠ src/package.json lodash@4.17.20 · CVE-2021-23337 · CVSS 7.2
# These never reach your DAST scanner.
# They are fixed before the app ships.
✓ Quality gate passed. Merge approved.SonarQube + your DAST tool
SonarQube handles the shift-left layer: code quality, secrets, dependencies, and injection vulnerabilities caught during development and inside the agent loop. Your DAST tool handles runtime validation. SonarQube reduces the number of findings your DAST tool needs to process and DAST confirms that nothing slipped through to the running application. Together they provide coverage across the SDLC, including the new pre-CI surface that AI agents create.
