Repo-first SAST + Targeted DAST framework for finding real, exploitable execution-risk vulnerabilities fast
FAST is a community-friendly framework concept for building autonomous security testing workflows.
FAST is a high-signal application security testing framework that runs inside a repository to:
- Identify app details and endpoints
- Perform endpoint-driven, reachability-aware SAST
- Verify exploitability before runtime testing
- Prompt for a base URL, then run candidate-driven, non-destructive DAST
- Produce prioritized results grouped by Unauth / Auth / Conditional / Unknown
Unlike broad scanners, FAST stays focused on the vulnerability classes most likely to lead to code execution or severe compromise.
(Optional section) Add demo links here when you have recordings:
Shows FAST identifying the tech stack, discovering endpoints, and mapping authentication surfaces.
Demonstrates how FAST limits analysis to reachable code paths and only flags execution-risk candidates.
Shows FAST asking for a base URL and validating only the candidate paths (no blind crawling).
FAST intentionally limits scope to:
- Remote Code Execution (RCE)
- Server-Side Request Forgery (SSRF)
- XML External Entity (XXE)
- Unsafe Deserialization
- Remote File Inclusion (RFI)
- Server-Side Template Injection (SSTI)
- SQL Injection (SQLi)
- Direct SQL execution functionality (e.g., admin query consoles / raw query endpoints)
- Any vulnerability with a credible path to code execution
Everything else is out of scope by design.
- Extracts routes/endpoints and maps them to handlers
- Builds bounded reachability slices (endpoint β handler β call graph)
- Scans only reachable code, reducing noise dramatically
FAST doesnβt stop at pattern matches:
- Validates controllable input β sink plausibility
- Detects mitigations (allowlists, parameterization, safe modes)
- Scores exploitability + confidence
- Produces a βneeds runtime validationβ shortlist
Findings are grouped into:
- Unauth
- Auth
- Conditional (role/tenant/feature-flag dependent)
- Unknown (insufficient evidence; never guess)
- Prompts for base URL (and optional auth material)
- Generates a minimal plan for candidate endpoints only
- Verifies accessibility, auth gating, and observable risky behavior safely
- Avoids broad crawling / βscan everythingβ behavior
- Machine-readable JSON artifacts per stage
- Final report with evidence pointers and remediation guidance
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FAST Orchestrator β
β (Multi-Skill Coordination Layer) β
βββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Skill 1: repo_inventory β
β - App profiling (languages/frameworks/entrypoints) β
β - Endpoint discovery (HTTP/GraphQL/webhooks/jobs) β
β - Auth surface mapping (unauth/auth/conditional/unknown) β
βββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Skill 2: reachability_slicing β
β - Endpoint-driven reachable code slicing β
β - Bounded call graph + uncertainty tracking β
βββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Skill 3: exec_risk_sast β
β - Targeted SAST on reachable slices β
β - Separate detection for direct SQL execution functionality β
βββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Skill 4: static_verification_and_triage β
β - Exploitability & confidence scoring β
β - Dedup + auth exposure grouping + pre-DAST checklist β
βββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
βΌ
(User Prompt)
Base URL + optional auth + optional sample IDs
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Skill 5: dast_bootstrap_and_plan β
β - Candidate-driven DAST plan (no broad crawling) β
βββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Skill 6: targeted_dast_validation β
β - Non-destructive runtime verification + evidence capture β
βββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Skill 7: unified_reporting β
β - Correlated final report (SAST + DAST) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Repo Discovery β profile app, extract endpoints, map auth
- Reachability Slicing β limit analysis to request-reachable code
- Focused SAST β detect execution-risk candidates only
- Static Verification β score exploitability + confidence, triage
- DAST Handoff β ask for base URL (and optional auth/materials)
- Targeted DAST β validate accessibility + behavior safely
- Reporting β produce final grouped report
- A local repository to analyze
- Python 3.8+ (if you implement helper scripts)
- (Optional) security tooling for runtime validation, depending on your implementation
Place the FAST skills and agents into your Claude Code environment (or your own runner):
# Example layout (adjust to your system)
mkdir -p .claude/skills .claude/agents
# Copy FAST skill suite files into the above directoriesRun FAST against a repo:
Run the FAST skill on this repoFAST will:
- produce repo + SAST artifacts
- prompt: βBase URL?β
- generate a targeted DAST plan and validate candidates
| Skill | Purpose | Outputs |
|---|---|---|
repo_inventory |
App profiling + endpoint discovery + auth mapping | app_profile.json, endpoints.json, endpoint_auth_map.json |
reachability_slicing |
Endpoint-driven reachable code slicing | reachable_code_map.json |
exec_risk_sast |
Focused SAST for execution-risk classes | findings_sast.json, findings_direct_sql.json |
static_verification_and_triage |
Exploitability scoring + grouping + pre-DAST checklist | findings_verified.json, triage sections |
dast_bootstrap_and_plan |
Base URL prompt + candidate-only DAST plan | dast_plan.json |
targeted_dast_validation |
Non-destructive runtime validation + evidence | findings_dast.json, runtime evidence |
unified_reporting |
Final correlated reporting | report_final.md |
| Agent | Purpose | Outputs |
|---|---|---|
RepoProfilerAgent |
Detects language/frameworks/entrypoints/configs | app_profile.json |
EndpointExtractorAgent |
Discovers endpoints and maps to handlers | endpoints.json |
AuthSurfaceMapperAgent |
Classifies endpoints by auth exposure | endpoint_auth_map.json |
| Agent | Purpose | Outputs |
|---|---|---|
ReachabilityAnalysisAgent |
Builds reachable code slices per endpoint | reachable_code_map.json |
ExecRiskCodeReviewAgent |
Finds execution-risk candidates (strict scope) | findings_sast.json |
DirectSQLFunctionalityDetectorAgent |
Detects βrun SQLβ features separately | findings_direct_sql.json |
| Agent | Purpose | Outputs |
|---|---|---|
StaticExploitabilityVerifierAgent |
Scores exploitability + confidence | findings_verified.json |
AccessClassificationTriageAgent |
Buckets results + pre-DAST checklist | pre_dast_summary.json + sections |
DASTCorrelationPlannerAgent |
Builds candidate-only DAST plan | dast_plan.json |
TargetedDASTValidationAgent |
Validates accessibility/behavior safely | findings_dast.json |
ReportingAgent |
Final correlated report | report_final.md |
Run FAST in this repository.
1) Identify the app stack and endpoints
2) Find only execution-risk issues (RCE/SSRF/XXE/deserialization/RFI/SSTI/SQLi/direct-SQL)
3) Verify exploitability statically
4) Bucket findings by unauth/auth/conditional/unknown
Then ask for a base URL to validate candidates at runtime.
Base URL: https://staging.example.com
Auth: Authorization: Bearer <token>
Sample values: { "userId": "12345" }
Validate only the candidate endpoints from the DAST plan.
fast/
βββ .claude/
β βββ agents/ # Agent definitions (markdown)
β βββ skills/ # Skill definitions (markdown)
βββ outputs/ # Generated artifacts
βββ <skill_name>/
βββ <project_name>/
βββ raw/
βββ sections/
βββ reports/
Final Report: outputs/unified_reporting/<project>/reports/report_final.md
Report Sections:
- Executive Summary (high confidence / confirmed)
- Unauth Findings
- Auth Findings
- Conditional Findings
- Unknown (needs clarification)
- Appendix: endpoints inventory + methodology + evidence pointers
FAST avoids full-repo SAST scans and blind DAST crawling by:
- Extracting endpoints and slicing reachable code only
- Limiting scope to execution-risk classes
- Verifying exploitability before runtime testing
- Running DAST only for candidate paths
- Reachability gating (endpoint-driven)
- Sourceβsink plausibility checks
- Mitigation detection (allowlists, parameterization, safe modes)
- Confidence scoring + explicit βUnknownβ bucket
- Non-destructive proof-of-behavior checks only
- Rate limiting and timeouts
- No arbitrary command execution attempts
- Store evidence without secrets
Typical config knobs:
excluded_paths(vendor/build/test)max_depthfor reachability slicingauth_detection_rules(framework-specific)runtime_safety_policy(timeouts, max requests, forbidden payload classes)
Contributions are welcome:
- Extend
EndpointExtractorAgentwith a framework-specific parser - Add tests against small sample projects
- Add better sanitizer/middleware detection
- Improve call-graph slicing heuristics
- Expand source/sink definitions for Java/Node/Python/Go/.NET
This project concept is intended to be MIT licensed (adjust as needed for your implementation).
IMPORTANT: FAST is intended for authorized security testing only.
-
β Legal use: testing applications you own or are authorized to test
-
β Legal use: security research in scoped labs/CTFs/bug bounties (within scope)
-
β Illegal use: testing systems without written authorization
-
β Illegal use: exploiting vulnerabilities for malicious purposes
Users are solely responsible for compliance with laws and policies.
FAST β Focused Application Security Testing