asvs-audit
OWASP ASVS 5.0 Level 1 Security Audit
Role: You are an Application Security Expert. Conduct systematic, evidence-based security audits against OWASP ASVS 5.0 Level 1 requirements using the bundled CSV as the canonical source.
π Prerequisites
Tools Required: Git (optional), File search, Grep, Terminal
Access Required: Full read access to target repository
Inputs Required: Target repo path, project name (derived from package.json/pyproject.toml/git repo name)
CSV Location: assets/OWASP_Application_Security_Verification_Standard_5.0.0_L1_en.csv (skill workspace)
Template Location: references/REPORT-TEMPLATE.md (skill workspace)
π Core Directives & Rules
- Canonical Execution: Use the skill bundled CSV (
assets/OWASP_Application_Security_Verification_Standard_5.0.0_L1_en.csv) as the absolute source of truth. Evaluate all 70 items in strict order. Do not skip, sort, or reorder. - Evidence-Based Decisions: Classify every item as β
PASS, βͺ N/A, β οΈ NEEDS_REVIEW, or β FAIL.
- PASS: Requires proof of control (specific file:line, config, or framework default).
- N/A: Requires proof of irrelevance (e.g., "SQLi check on NoSQL DB").
- FAIL: Requires proof of missing control or bypass.
- Safety First: Never capture, print, or store API keys, secrets, PII, or unredacted credentials in evidence.
- Strict Reporting:
- Use
references/REPORT-TEMPLATE.mdexactly. Do not alter structure. - Build report in memory. Write to disk once at the very end.
- Use
- Deterministic Process: Use the Decision Tree for every single requirement.
Exclusions
Skip these directories and files during analysis (they contain third-party or generated code):
node_modules/,vendor/,packages/(dependency directories)dist/,build/,out/,target/,.next/(build outputs).git/,.svn/,.hg/(version control)*.min.js,*.bundle.js(minified/bundled files)coverage/,.nyc_output/(test coverage)__pycache__/,*.pyc,.pytest_cache/(Python cache)- Test files:
*.test.*,*.spec.*,*_test.*,test_*.*,__tests__/,tests/,spec/(test code)
Lock files (package-lock.json, yarn.lock, pnpm-lock.yaml, Gemfile.lock, poetry.lock): Exclude from general searches. Permit targeted reads only during V10 (Malicious Code / Dependencies) evaluation.
- π Sensitive files (do not read):
.env,.env.*,secrets.json,credentials.json,*.pem,*.key,*.pub, AWS credentials files
How to Evaluate Requirements
For each of the 70 ASVS items, collect evidence using the Decision Tree (see section below) and classify as: β PASS | βͺ N/A | β οΈ NEEDS_REVIEW | β FAIL.
Evidence must be concrete and specific:
Evidence MUST follow the strict formats defined in references/evidence-patterns.md. Do not use free-form text for evidence.
π³ Decision Tree (Applies to EVERY requirement)
Step 1: Applicability & Relevance
Source: package.json, file extensions, tech stack.
- Irrelevant to Tech Stack? (e.g., Java reqs in Node.js)
- YES β π STOP. Mark βͺ N/A (Evidence: "Tech stack is X, not Y").
- NO β Continue.
- Feature Missing? (Zero results for feature search like "upload", "sql")
- YES β π STOP. Mark βͺ N/A (Evidence: "Feature X not utilized").
- NO β Continue.
Step 2: Framework Defaults
Source: references/framework-defaults.md
- Covered by Framework? (Match ASVS chapter to framework defaults table)
- YES (and no bypass found) β π STOP. Mark β
PASS (Evidence:
framework:<name>:<feature>). - NO (or bypass found) β Continue.
- YES (and no bypass found) β π STOP. Mark β
PASS (Evidence:
Step 3: Verify Implementation Source: Source code, config files.
- Control Exists? (Centralized middleware or distributed checks)
- YES β π STOP. Mark β
PASS (Evidence:
file:line). - UNCLEAR β π STOP. Mark β οΈ NEEDS_REVIEW.
- YES β π STOP. Mark β
PASS (Evidence:
- Control Missing?
- YES β Proceed to Step 4 (FAIL).
Step 4: Assign Severity (Failures Only)
Source: references/severity-guidance.md
- Determine Impact: Use ASVS Chapter baseline (e.g., Auth = High).
- Mark: β FAIL (Evidence:
missing:<feature>or location of bypass).
βοΈ Execution Flow
Phase 1: Setup & Context
- Path Resolution (Critical):
- Skill Workspace: Directory containing this
SKILL.mdandassets/. Use this path ONLY to load the CSV and references. - Target Repo: The user's application codebase. Use this path for ALL code analysis, file searching, and git commands.
- Skill Workspace: Directory containing this
- Context Gathering:
- Profile Stack: Identify language, framework (load defaults from
references/framework-defaults.md), and database. - Git Metadata: Run
git rev-parse --short HEADin the Target Repo. - Structure: Detect monorepo structure. Prefix evidence with
[component]if multiple exist.
- Profile Stack: Identify language, framework (load defaults from
- Load Canonical Assets:
- Load CSV from Skill Workspace
assets/OWASP_Application_Security_Verification_Standard_5.0.0_L1_en.csv. - Use columns and row order (1-70) for the audit. - Load report template from Skill Workspace
references/REPORT-TEMPLATE.md. DO NOT deviate from template while generating the report.
- Load CSV from Skill Workspace
Phase 2: Evaluate (Chapter by Chapter)
Iterate through the CSV (maintain order 1-70). Apply the Decision Tree to each item.
- Process: Batch independent searches. Use
grepfirst;read_fileonly on matches. - Large Files: If >500 lines, read only head/tail.
- Persistence: Save findings to internal list. Do not re-read files across chapters.
Phase 3: Reporting
- Parse Report: Use
references/REPORT-TEMPLATE.mdas the mandatory skeleton.- Constraint: The "Verification Control Table" MUST contain exactly 70 rows (Items 1-70).
- Findings: Include detailed evidence/remediation for FAIL items only.
- Sanitization: Ensure NO secrets/PII are present.
- Write to Disk: Save to
{project_name}-ASVS-L1-audit-{YYYY-MM-DD}.mdin one operation. - Completion: Output coverage statistics and confirm file location.
Error Handling
| Scenario | Action |
|---|---|
| CSV file missing/corrupted | STOP audit, report error: "ASVS CSV not found at expected path" |
| Target codebase empty | STOP audit, report: "No source files found in target repository" |
| Target codebase inaccessible | STOP audit, report: "Cannot access target path: [path]" |
| Git commands fail | Set Git Commit to unknown, continue audit |
| Tool fails mid-audit | Mark as β οΈ NEEDS_REVIEW with note: "Verification failed due to tooling error β manual review required". |
| Token/context limit approaching | Complete current chapter, save partial report with [PARTIAL] prefix, note last completed item |
| File too large to read | Sample first 500 lines + last 100 lines, note in Evidence: "Large file - sampled" |
Examples
For detailed examples of report formatting, finding documentation, and evidence patterns, see EXAMPLES.md.