dast-workflow — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited dast-workflow (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
DAST tests a running application from the outside. Where sast-orchestrator reads code, DAST sends HTTP requests and looks at response patterns. That covers runtime behaviour SAST doesn't see (auth flows, session handling, header config, reverse-proxy misconfig, DoS sensitivity).
Activates on:
security-review where runtime behaviour needs to be verified (e.g. are the security headers actually present in the response?).sast-orchestrator. DAST doesn't see source.iac-security / k8s-security / container-hardening.threat-modeler.api-security. DAST tools cover API scans; this skill orchestrates, that one provides the substantive checklist.web-exploit-triage + payload-crafter + recon-agent. DAST flags; pentest exploits.cve-triage.Seven phases. Phase 1 (scope + environment) and phase 3 (auth-state) are the heart. Both are where DAST projects fail.
DAST scans have real blast-radius: they fire thousands to millions of requests, hit side-effects (emails sent, payments triggered, notifications), and can DoS the target app. Setting scope is not a formality.
*.staging.example.com is better than the example.com wildcard). DAST tools will otherwise spider out to external hosts that aren't yours.DELETE /users/{id}, POST /admin/wipe-data), third-party-embedded content, rate-limited auth endpoints (unless you're testing them deliberately).A written scope spec with these fields is required before scan start, comparable to a pentest RoE. For internal scans this can be a commit comment; for shared staging, prefer explicit sign-off.
Two dominant tools for web DAST; choose by context.
zap-cli or the Automation Framework, fully scriptable. Three scan modes: baseline (passive only, ~2 min), full (passive + active, ~30–60 min), API (driven by an OpenAPI/Swagger import).Heuristic: start with ZAP in CI for a baseline-passive per PR. Schedule ZAP full-scan against staging. Burp Professional for in-depth work by a security engineer on specific features. The Enterprise variant when you have 20+ apps to scan.
The biggest DAST failure mode: the scanner only hits unauthenticated surface and misses everything behind the login. Setting up auth-state is per-app specific but follows patterns.
ZAP auth modes (in order of usefulness):
Logged-in indicator — how does the scanner know the session is still active? Regex on a header (X-User-ID), on body content (Logout), or a probe URL that returns 200 when authenticated and 401 otherwise. Without an indicator the scanner runs with an expired session and produces nonsense.
Logged-out indicator — redirect to /login, 401, or body text. Trigger for auto-reauth.
Token refresh — OAuth2/JWT sessions expire. A script that exchanges a refresh token for a new access token. ZAP's auth script can do this; Burp via session-handling rules.
Extend the exclude set — if logout stays in scope your session gets destroyed mid-scan. Mark explicitly: /logout, /signout, anything with logout in the path.
Test your auth setup manually with a single request before starting the scan. Scanner logs that say "2000 URLs scanned" mean nothing if they're all 302 redirects to login.
Not every scan is the same scan. Choose deliberately.
Calibrate payloads upfront:
postgresql and mysql injection package can unintentionally modify data when the app lacks prepared statements. Disable against environments you cannot restore.DAST scans produce many findings, most of them false positives.
--report-file then -z "-config json.report.file=<file>", or Burp equivalent). Subsequent runs: diff against baseline, surface only new findings.Content-Type: application/json — the browser doesn't render it as HTML. SQLi claims on endpoints that 500 on every input, not just SQL syntax. Server-header-based version disclosure on endpoints that deliberately return a version header.High: SQL Injection without a working payload is speculation.security-review phase 6). DAST tools usually do this automatically; verify the mapping is correct. # GitHub Actions example
- uses: zaproxy/[email protected]
with:
target: ${{ env.PREVIEW_URL }}
rules_file_name: .zap/rules.tsv
cmd_options: '-a'.zap/rules.tsv) for suppressing false-positive rule IDs with a rationale per entry.cicd-hardening phase 3). Rotation on incident, not on schedule.cve-triage-style triage matrix — a new High in a production-relevant endpoint is fix-sprint; baseline-hygiene (e.g. missing HSTS) is fix-quarter.Layer 1: scope (every in-scope host scanned, no out-of-scope hosts hit accidentally, auth-state worked during the scan?), assumptions ("we are authenticated" only when the logged-in indicator actually matches), gaps (which pages were not crawled and why; are there unmet assumptions there?), consistency (do finding severities match between DAST report and security-review taxonomy?).
Layer 2: no fabricated CVE-IDs from scan output, payloads at pattern-level in the report (no ready-to-fire exploits for production targets), false-positive claims backed by a concrete repro test (the "we verified by hand" claim has to be true).
DAST scan — <app>, <environment>
Tool: <ZAP x.y | Burp Pro | Burp Enterprise | Nuclei>
Scan type: <baseline | full | API | targeted>
Duration: <HH:MM>, requests sent: <N>
Scope:
In: <host(s)>
Out: <paths, e.g. /logout, /admin/wipe-*>
Auth: <mode, test user, logged-in indicator verified>
Findings (pre-triage total):
High: N (confirmed: X, FP: Y, verify pending: Z)
Medium: N
Low: N
Informational: N (don't report unless notable)
Confirmed for delivery (manually verified):
## [HIGH] <short title>
Location: <URL + method>
Classification: CWE-<N> | OWASP A0<x>
Reproduction: <curl or Burp Repeater request>
Impact: <what can the attacker do>
Fix: <concrete direction; handoff to framework skill or secure-coding>
## [MEDIUM] ...
Baseline hygiene (security headers, etc.):
HSTS: <present/absent>
CSP: <present + strictness>
etc.
Handoffs:
Dep-vulns detected via runtime: <cve-triage>
Suspected design issue: <threat-modeler>
Exploitation depth needed: <web-exploit-triage>
Verification-loop: ...Raw tool report (ZAP HTML, Burp XML) as an attachment, not inline. The reviewer reads the summary and clicks through for detail.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.