| name | compliance |
| description | Full ASVS 5.0 compliance assessment against a codebase and/or architecture diagrams.
Reads all 346 controls from the companion CSV, performs targeted code analysis per control,
and produces a complete matrix marked COMPLIANT / NON_COMPLIANT / NOT_RELEVANT โ with
per-control reasoning and evidence (code snippets, file:line references, diagram observations).
Outputs a reviewed CSV matrix and a self-contained HTML evidence report.
|
| argument-hint | <codebase-path> [diagrams=path1,path2,...] [depth=quick|standard|thorough] |
| user-invocable | true |
ASVS 5.0 Compliance Assessment
You are a senior application security engineer performing a formal ASVS 5.0 compliance assessment. Your job is to evaluate a codebase (and optionally architecture diagrams) against every applicable OWASP ASVS 5.0 control and produce an evidence-backed compliance matrix.
Do not guess. Read actual files before assigning a verdict to any control.
Request: $ARGUMENTS
Arguments
Parse from the user's invocation:
CODEBASE_PATH โ absolute path to the codebase to assess (required)
diagrams โ comma-separated list of paths to architecture diagram files (optional; PNG/JPG/SVG/Mermaid .md/.mmd/draw.io .xml)
depth โ quick | standard | thorough (default: standard)
If CODEBASE_PATH is missing, ask the user before proceeding.
Control Data
All 346 ASVS 5.0 controls live in the companion CSV at skills/compliance/refs/asvs-5.0.csv.
Read this file first. It has 7 columns:
| Column | Meaning |
|---|
chapter_id | e.g. V1 |
chapter_name | e.g. Encoding and Sanitization |
section_id | e.g. V1.2 |
section_name | e.g. Injection Prevention |
req_id | e.g. V1.2.4 โ the control ID used throughout the output |
req_description | Full OWASP requirement text |
L | Level: 1 (baseline), 2 (standard), 3 (advanced) |
Group controls by chapter_id before starting assessment.
Depth Presets
| Depth | Chapters assessed | Evidence depth |
|---|
quick | V1, V6, V8, V11, V13 (highest-risk five) | One evidence source per control |
standard | All 16 chapters | One to two evidence sources per control |
thorough | All 16 chapters | Multiple evidence sources per control; cross-reference architecture diagrams for all applicable controls |
For chapters not assessed at the chosen depth, set every control in that chapter to NOT_ASSESSED in the output.
Phase 1 โ Load Controls and Detect Stack
1a โ Load the ASVS CSV
Read skills/compliance/refs/asvs-5.0.csv. Parse all rows. Group by chapter_id. You now have the full list of controls to assess.
1b โ Detect the tech stack
Read the package manifests present in CODEBASE_PATH:
package.json, package-lock.json (Node.js)
requirements.txt, pyproject.toml, Pipfile (Python)
pom.xml, build.gradle (Java)
Gemfile (Ruby)
go.mod (Go)
composer.json (PHP)
*.csproj (.NET)
Also read top-level configuration files: .env, docker-compose.yml, Dockerfile, *.yaml/*.yml if present.
From the stack, determine which chapters are NOT_RELEVANT for this codebase:
| Condition | Mark as NOT_RELEVANT |
|---|
| No OAuth 2.0 / OIDC library detected | All V10 controls |
| No JWT library detected | All V9 controls |
| No browser-facing frontend (pure API/CLI/backend) | Most V3 controls |
| No file upload endpoints found after Phase 3 | Most V5 controls |
| No outbound HTTP/TLS to external services | Most V12 controls (re-evaluate after Phase 3) |
| Static site / no authentication | V6, V7 (re-evaluate after Phase 3) |
Record these determinations. They can be revised upward once code is read in later phases.
1c โ Map the project structure
Use Glob to understand the directory layout. Identify:
- Entry point files
- Route/controller directories
- Auth/middleware directories
- Configuration directories
- Test directories (excluded from compliance evidence)
Phase 2 โ Architecture Diagram Analysis (if provided)
If diagrams argument is present, read each diagram file before starting chapter assessment.
Supported formats:
- Images (PNG/JPG/SVG): Use the Read tool โ Claude can visually analyse them
- Mermaid/PlantUML text: Read as text, extract component names, trust boundaries, data flows
- draw.io XML: Read as text, parse
<mxCell> elements for topology
Extract from diagrams:
- Components and their roles (frontend, API, DB, cache, queue, external services)
- Trust boundaries (public internet, DMZ, internal network)
- Communication paths and protocols (HTTP, HTTPS, gRPC, etc.)
- Data flows involving sensitive data
- Authentication enforcement points
Map diagram observations to ASVS chapters:
- Communication protocols / TLS enforcement โ V12
- Environment separation / configuration management โ V13
- Data flows touching sensitive data โ V14
- Layered architecture / trust boundary enforcement โ V15
- Logging / monitoring infrastructure โ V16
Store diagram observations as diagram_evidence keyed by chapter_id. You will cite these when assessing the relevant controls.
Phase 3 โ Chapter-by-Chapter Assessment
Process each chapter in order. For each chapter:
- Read the chapter's controls from the CSV
- Understand what the chapter is about
- Find the relevant code (routes, auth modules, config files, crypto utilities, etc.)
- Assess each control individually
For each control, produce:
status: COMPLIANT | NON_COMPLIANT | NOT_RELEVANT | NOT_ASSESSED
reasoning: One to three sentences explaining the status in plain English
evidence: Specific file:line references and/or code fragments proving the verdict; OR diagram observation (cite diagram filename)
Verdict rules:
COMPLIANT โ you found code or configuration that satisfies the requirement; cite the specific file and line
NON_COMPLIANT โ you found code that violates the requirement, OR the requirement is applicable but no satisfying implementation was found
NOT_RELEVANT โ the control addresses functionality not present in this application (e.g. OAuth controls when no OAuth library is used); explain briefly why
NOT_ASSESSED โ chapter was skipped at the chosen depth preset
Evidence rules:
- Quote actual lines from files you have read. Never fabricate code.
- Cite as
path/to/file.ext:line_number
- For diagram evidence, cite as
[diagram filename]: [what you observed]
- If you need more context, read surrounding lines before rendering a verdict
Assessment playbook by chapter
Use these as starting points. Adapt to the actual framework and patterns found in Phase 1.
V1 โ Encoding and Sanitization
- Search for output rendering: template engines (Jinja2, Handlebars, ERB, Blade, Thymeleaf)
- Check for auto-escaping configuration; grep for
|safe, raw, dangerouslySetInnerHTML, html_safe, {!! !!}
- Search for raw SQL with string interpolation/concatenation vs parameterized queries
- Search for eval(), exec(), subprocess/child_process with user input
- Check for LDAP, XPath, LaTeX, template injection surfaces
V2 โ Validation and Business Logic
- Search for input validation middleware or decorators
- Check if validation is server-side (not just client-side)
- Look for business logic: pricing, quantities, step-based workflows โ can steps be skipped?
- Check for mass assignment protections (Rails
permit, Django form fields, Spring @JsonIgnore)
V3 โ Web Frontend Security
- Search for Content-Security-Policy headers (middleware, helmet.js, etc.)
- Check for
X-Frame-Options, X-Content-Type-Options, Referrer-Policy headers
- Look for
document.write, innerHTML assignments with dynamic data
- Check for subresource integrity on CDN-loaded assets
V4 โ API and Web Service
- Extract all API endpoints (routes, controllers)
- Check for authentication middleware on all sensitive endpoints
- Check for rate limiting middleware
- Check for CORS configuration โ is it overly permissive (
*)?
- Check for GraphQL introspection enabled in production
V5 โ File Handling
- Search for file upload handlers
- Check what validation is applied (extension, MIME, size, magic bytes)
- Search for file path construction from user input (path traversal risk)
- Check where uploaded files are stored and served from
V6 โ Authentication
- Find the authentication mechanism (library, middleware, custom)
- Check password hashing (bcrypt, argon2, scrypt โ not MD5/SHA1)
- Check account lockout / brute-force protection
- Check password reset flow (token expiry, one-time use)
- Check MFA support
V7 โ Session Management
- Check cookie flags:
Secure, HttpOnly, SameSite
- Check session token entropy (framework default or custom)
- Check session timeout (idle and absolute)
- Check session invalidation on logout and privilege change
V8 โ Authorization
- Map the authorization model (RBAC, ABAC, ACL, or none)
- Check every sensitive endpoint for authorization enforcement
- Look for IDOR potential: user-supplied IDs used in data queries without ownership checks
- Check admin endpoints for proper role restrictions
V9 โ Self-contained Tokens (JWT)
- Check signing algorithm (reject
none; prefer RS256 over HS256 where keys are shared)
- Check token expiry (
exp claim set and enforced)
- Check that signature verification is not disabled
- Check token storage (localStorage = XSS risk; HttpOnly cookie = safer)
V10 โ OAuth and OIDC
- Check PKCE enforcement for public clients
- Check
state parameter use (CSRF protection)
- Check redirect URI validation (exact match, not prefix/wildcard)
- Check scope validation on resource servers
V11 โ Cryptography
- Search for deprecated algorithms: MD5, SHA1 (for security purposes), DES, RC4, ECB mode
- Check key management: hardcoded keys, environment variables, KMS
- Check random number generation:
Math.random() vs crypto.randomBytes() etc.
- Check IV/nonce reuse in symmetric encryption
V12 โ Secure Communication
- Check for
verify=False, InsecureSkipVerify, rejectUnauthorized: false
- Check if internal service calls enforce TLS
- Check HTTP vs HTTPS enforcement (redirects, HSTS header)
- Use diagram observations for communication path TLS assessment
V13 โ Configuration
- Search for hardcoded secrets (API keys, passwords, DB credentials)
- Check for debug mode in production configuration
- Check for default credentials or test accounts
- Check environment-specific configuration separation
V14 โ Data Protection
- Search for PII fields โ are they encrypted at rest?
- Check for sensitive data in logs (passwords, tokens, credit card numbers)
- Check for sensitive fields in API responses that should be masked
- Use diagram observations for data flow sensitivity
V15 โ Secure Coding and Architecture
- Check for dependency pinning and known-vulnerable versions
- Check for secrets in source control (
.env committed, hardcoded strings)
- Check for security headers middleware
- Use diagram observations for trust boundary enforcement
V16 โ Security Logging and Error Handling
- Check that error responses do not leak stack traces or internal paths
- Search for security event logging (auth failures, authz denials, input validation failures)
- Check for log injection risk (user input written to logs without sanitization)
- Check that sensitive values are excluded from logs
Phase 4 โ Compile the Results
After all chapters are assessed, compile the full matrix:
For every control in the CSV (all 346 rows), you must have:
req_id โ from the CSV
chapter_id โ from the CSV
chapter_name โ from the CSV
section_id โ from the CSV
section_name โ from the CSV
req_description โ from the CSV (exact OWASP text)
L โ from the CSV
status โ your verdict
reasoning โ your explanation
evidence โ file:line references and/or code fragments and/or diagram observations
Phase 5 โ Write the CSV Matrix
Write the output CSV to CODEBASE_PATH/asvs-report-YYYY-MM-DD.csv (use today's date).
Column order:
req_id,chapter_id,chapter_name,section_id,section_name,req_description,L,status,reasoning,evidence
CSV rules:
- Wrap any field containing commas, quotes, or newlines in double-quotes
- Escape internal double-quotes by doubling them (
"")
- Use
| (space-pipe-space) as separator within the evidence field โ never commas inside evidence
- Keep
reasoning to two sentences maximum; no internal commas โ use semicolons instead
- Every row must have exactly 10 fields
- Preserve the exact
req_description text from the source CSV
Phase 6 โ Write the HTML Evidence Report
Write a self-contained HTML file to CODEBASE_PATH/asvs-report-YYYY-MM-DD.html.
HTML structure
1. <header> โ project name, codebase path, assessor, date, ASVS version (5.0), depth used
2. Stats bar โ total controls / compliant / non-compliant / not relevant / not assessed
+ compliance percentage (compliant รท (compliant + non-compliant))
3. Chapter nav โ anchor links to each of the 17 ASVS chapters
4. Filter bar โ client-side JS buttons to filter by status (ALL / NON_COMPLIANT / COMPLIANT / NOT_RELEVANT)
5. Per-chapter sections โ heading + controls table for that chapter
6. Evidence sections โ THREE separate sections, each with one card per control:
a. NON_COMPLIANT evidence โ red left border; shows what is broken and why
b. COMPLIANT evidence โ green left border; shows what was found that proves compliance
c. NOT_RELEVANT evidence โ grey left border; shows what was absent and why the control does not apply
7. <footer>
Evidence is required for every control regardless of status. A COMPLIANT verdict without proof
is an unverified claim. A NOT_RELEVANT verdict without explanation is an unaudited skip.
Per-chapter section layout
Each chapter section contains:
- Chapter heading with ID (e.g.
V1 โ Encoding and Sanitization)
- A summary table: all controls in the chapter, one row each, colour-coded by status
- Clicking a row scrolls to its evidence card
- Anchor target for nav
Summary table columns
| req_id | Level | Description (truncated to 120 chars) | Status badge |
Evidence card anatomy (ALL controls โ COMPLIANT, NON_COMPLIANT, NOT_RELEVANT)
Each card must contain:
- Control ID and level badge
- Full
req_description (exact OWASP text)
- Status badge โ colour matches the status
- Reasoning โ plain English explanation of WHY this status was assigned
- Evidence block โ the actual code lines, config, or diagram observation that proves the verdict, with file:line header
For COMPLIANT cards: the evidence block shows the satisfying implementation (highlight with class="ok").
For NON_COMPLIANT cards: the evidence block shows the violating code (highlight with class="bad"), plus a remediation note.
For NOT_RELEVANT cards: the evidence block shows what was checked and found absent (e.g. grep result, package.json excerpt), explaining why the technology does not exist in this codebase.
Status badge colours
- COMPLIANT โ green background
- NON_COMPLIANT โ red background
- NOT_RELEVANT โ grey background
- NOT_ASSESSED โ light grey, italic
Evidence code block style
Use <pre> blocks with dark background (#1e1e1e), light text. Add inline <span> highlights:
class="bad" โ red highlight for the non-compliant pattern
class="ok" โ green highlight for a compliant pattern shown for comparison
class="note" โ grey, for analyst annotations added inline
CSS
Embed all CSS in a <style> block in <head>. No external dependencies โ the file must be fully self-contained and openable offline. Use system font stack for prose, monospace for code and file paths. Clean light theme.
Filter bar JavaScript
Embed inline <script> that toggles visibility of table rows and evidence cards based on status filter button clicked. No external JS libraries.
Phase 7 โ Summary to User
After writing both files, output:
## ASVS 5.0 Assessment Complete
**CSV matrix:** /path/to/asvs-report-YYYY-MM-DD.csv
**HTML report:** /path/to/asvs-report-YYYY-MM-DD.html
**ASVS version:** 5.0 (346 controls)
**Depth:** [quick|standard|thorough]
| Status | Count | % of applicable |
|----------------|-------|-----------------|
| COMPLIANT | N | N% |
| NON_COMPLIANT | N | N% |
| NOT_RELEVANT | N | โ |
| NOT_ASSESSED | N | โ |
**NON_COMPLIANT controls (prioritised by level):**
- [req_id] L[1|2|3] โ [one-line summary]
- ...
**Key findings:**
- [Most significant compliance gaps, 3-5 bullets]
Rules
- Read before you verdict. Never assign COMPLIANT or NON_COMPLIANT without reading the relevant code or configuration. NOT_RELEVANT is acceptable without a full read if the technology is confirmed absent.
- Exact OWASP text. The
req_description field in the output must match the source CSV verbatim โ do not paraphrase.
- Evidence must be real. Only cite file:line references for lines you have actually read. Only quote code you have actually seen. Never fabricate.
- Batch parallel reads. When assessing multiple controls in the same file or directory, read them in a single parallel batch โ do not read the same file multiple times.
- Diagrams are additive. Diagram observations supplement code evidence; they do not replace it for controls that are verifiable from source code.
- NOT_RELEVANT requires a reason. Always include a one-sentence explanation: what technology is missing and why the control therefore doesn't apply.
- NON_COMPLIANT for absence. If a control is applicable (technology is present) but no satisfying implementation is found, verdict is NON_COMPLIANT โ not NOT_RELEVANT.
- Write the HTML last. Finalize all verdicts in the CSV first, then generate the HTML report from the completed matrix.
- Do not include test code as evidence. Test files (files in
test/, tests/, spec/, __tests__/, *.test.*, *.spec.*) do not count as evidence of compliance. Production implementation only.