Join our Newsletter — 33% off our NHI Course

What do teams get wrong when they rely on static application security testing to find all important application vulnerabilities?

The main mistake is treating SAST as a complete answer. SAST can identify code paths and many common vulnerability patterns, but it cannot understand business context or authorisation intent on its own. That means it may miss flaws where the code looks valid but the user should not have access. Teams also need to manage false positives and choose which rules run at each delivery gate.

Why SAST Is Useful, and Why It Stops Short of “Finding Everything”

SAST is strong at what it is designed to do: scan source or compiled code for known insecure patterns, unsafe APIs, and rule-based findings before deployment. It becomes much less reliable when teams expect it to reason about intent, business rules, or whether a technically valid code path should be allowed for a given user, role, or workflow.

That gap matters because many important application failures are not simple syntax or pattern problems. The code may look safe to a scanner while the application still permits an action that violates authorisation intent, crosses a tenant boundary, or exposes data through a logic flaw.

For teams running modern web and API estates, this is why code scanning should be treated as one source of evidence, not the final verdict on application security. A static tool can flag likely weaknesses, but it cannot prove that every control is present, every access rule is correct, or every business path is safe.

What SAST Commonly Misses in Practice

The most common miss is business logic weakness. SAST can see that a request is authenticated and that input is handled safely, yet still miss that the application lets a regular user perform an action intended only for an admin, finance approver, or tenant owner.

It also struggles with context-sensitive authorisation. If access depends on the relationship between records, workflow state, or a chain of prior actions, the vulnerability may only appear when the application is exercised as a whole. That is why object-level and function-level authorisation problems often need dynamic testing, code review, and design review in addition to static analysis.

Teams should also expect false positives and tuning overhead. Static tools are only useful when their rules are scoped to the delivery gate, the codebase, and the control objective being checked. Overly broad rule sets create alert fatigue, while overly narrow rule sets give a false sense of coverage.

What Good Coverage Looks Like Across the Delivery Chain

SAST works best as part of a layered testing strategy. It is valuable early, where it can stop obvious defects before merge, but it needs complementary controls for runtime behaviour, authorisation checks, dependency risk, and user-path validation.

For application teams, a stronger model is to map test methods to the question being asked. Static analysis can validate code patterns, secrets handling, and some insecure functions. Interactive testing, API testing, and manual review are needed when the risk depends on data ownership, role boundaries, or whether a workflow can be abused in a way the source code alone does not reveal.

That is the right mental model for secure delivery: use SAST to find what can be inferred from code, then use other controls to test what can only be proved by executing the system.

Risk and Threat Considerations

Overreliance on SAST creates coverage gaps that matter most when an application’s real weakness is not a bad pattern but a bad decision boundary. An attacker, or even an ordinary user following an unintended path, can exploit that gap to reach records, functions, or state transitions that the code technically allows but the business should not.

Failure mechanism: The scanner validates code syntax and common vulnerability signatures, but it cannot reliably infer authorisation intent, business rules, or cross-object relationships. As a result, logical access flaws and workflow abuse can remain undetected until runtime or manual testing.

Impact: Teams may ship applications that pass security gates while still exposing sensitive actions, mis-scoping permissions, or permitting unauthorised data access. The operational consequence is a false sense of assurance, followed by expensive rework when testing, incidents, or customer complaints reveal the gap.

Standards & Framework Alignment

This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.

OWASP API Security Top 10 addresses the attack and risk surface, while OWASP ASVS sets the governance and control requirements practitioners need to meet.

Framework Control / Reference Relevance
OWASP ASVS V8 — Authorization SAST misses business-logic access flaws that ASVS treats as a core auth requirement.
V4 — API and Web Service The question centers on application and API findings that SAST often cannot prove end to end.
V16 — Security Logging and Error Handling SAST can miss runtime failures that only show up through logging, monitoring, and error paths.
Recommendation — Verify authorization rules with ASVS V8 and do not rely on static scanning alone. Test API behavior explicitly under V4 instead of assuming code scanning proves access safety. Validate logging and error handling so runtime misuse is visible beyond static rules.
OWASP API Security Top 10 API1 — Broken Object Level Authorization Object-level access flaws are a classic blind spot when SAST cannot infer ownership or tenant intent.
API5 — Broken Function Level Authorization Function-level abuse often survives static analysis when the code path looks syntactically valid.
Recommendation — Check object access rules directly for API1 rather than trusting static pattern checks. Test privileged functions explicitly to catch API5 cases that SAST can miss.

Practitioner Guidance

What to prioritise: Treat SAST as a defect-finding control, not a complete assurance control. If the application handles money movement, record ownership, tenant isolation, or privileged workflows, make authorisation and business-rule testing a separate gate.

What to verify: Confirm that the ruleset is tuned to the codebase and that every high-risk finding class has an owner, a severity threshold, and a clear exception path. If the scanner is producing large numbers of low-value alerts, the control is not yet trustworthy enough to carry the delivery decision.

Practitioner takeaway: The key judgement is to ask whether the risk lives in the code pattern or in the application’s decision logic, because SAST is only dependable for the first case.