SAST parsed the code and never sent a request. That white-box view lets it flag the string-built query in search.py on a branch no test ever reaches, and it runs at commit or build time, before anything is deployed. What it cannot see is anything that only exists at runtime: server configuration, response headers, how the app behaves behind a proxy.
DAST worked against a live staging instance. It is a black-box method: send requests, judge the responses. It caught the missing header and the cookie flag, which no source file shows, but it cannot name the file to fix, and it only tests the paths its crawler finds. Fuzzing, which feeds malformed input to running code, is a dynamic technique; the CS0-003 objectives named it and the CS0-004 objectives do not.
SCA never looked at your team's code. It read the manifest, listed every component and version, and matched them against published Common Vulnerabilities and Exposures (CVE) entries. The list it writes out is the SBOM. That inventory is what lets you answer, the day a new library flaw is announced, whether you ship the library at all; the OWASP Top 10:2025 lists Software Supply Chain Failures as A03 for that reason. What happens to the finding next is covered under prioritizing and mitigating vulnerabilities.
Where SAMM fits
Objective 2.4 lists the Software Assurance Maturity Model (SAMM) next to SAST and DAST, but OWASP SAMM scans nothing. It is a framework for measuring how mature an organization's software security program is. An option that offers SAMM as the thing that finds a flaw is pointing at the wrong layer.