Template and formatting guidelines for security audit reports. Provides consistent structure for findings, severity classification, ASVS mapping, and remediation recommendations.
This skill inherits all available tools. When active, it can use any tool Claude has access to.
Standardized format for security audit reports to ensure consistency, completeness, and actionability.
# Security Audit Report
**Project**: [Project Name]
**Date**: [YYYY-MM-DD]
**Auditor**: Claude Security Plugin
**Version**: [Plugin Version]
---
## Executive Summary
### Overview
[2-3 sentence summary of the audit scope and overall findings]
### Risk Level
**Overall Risk**: [Critical | High | Medium | Low | Minimal]
### Key Metrics
| Metric | Value |
|--------|-------|
| Total Findings | [N] |
| Critical | [N] |
| High | [N] |
| Medium | [N] |
| Low | [N] |
| Info | [N] |
### Top Concerns
1. [Most critical finding - one line summary]
2. [Second most critical]
3. [Third most critical]
---
## Audit Scope
### Target
- **Project Type**: [web-api | web-app | cli | library | mobile]
- **Languages**: [List]
- **Frameworks**: [List]
### Coverage
- **ASVS Level**: [L1 | L2 | L3]
- **Chapters Audited**: [List of V1-V17]
- **Auditors Run**: [List of domain auditors]
### Exclusions
[Any directories, files, or areas explicitly excluded]
---
## Findings
### Critical Findings
#### [FINDING-001] [Title]
| Attribute | Value |
|-----------|-------|
| **Severity** | Critical |
| **ASVS** | V[X].[Y].[Z] |
| **CWE** | CWE-[ID] |
| **Location** | `path/to/file.ext:line` |
| **Status** | Open |
**Description**
[Clear explanation of the vulnerability]
**Evidence**
```[language]
[Code snippet showing the issue]
Impact [What could happen if exploited]
Remediation [Specific steps to fix]
[Fixed code example]
References
[Repeat for each finding, grouped by severity]
| Chapter | Requirements | Checked | Passed | Failed | N/A |
|---|---|---|---|---|---|
| V1 | 28 | [N] | [N] | [N] | [N] |
| V2 | 15 | [N] | [N] | [N] | [N] |
| [... continue for all chapters ...] |
Approach: Automated static analysis with manual verification
Limitations:
---
## Severity Classification
### Criteria
| Severity | CVSS Range | Criteria |
|----------|------------|----------|
| **Critical** | 9.0-10.0 | Remote code execution, authentication bypass, complete data breach |
| **High** | 7.0-8.9 | Privilege escalation, significant data exposure, account takeover |
| **Medium** | 4.0-6.9 | Information disclosure, business logic bypass, limited data exposure |
| **Low** | 0.1-3.9 | Best practice violations, theoretical issues, minor information leak |
| **Info** | 0.0 | Observations, recommendations, hardening suggestions |
### Severity Decision Tree
Is it exploitable without authentication? ├── Yes → Is it remotely exploitable? │ ├── Yes → Can it lead to RCE or full compromise? │ │ ├── Yes → CRITICAL │ │ └── No → HIGH │ └── No → Can it lead to data breach? │ ├── Yes → HIGH │ └── No → MEDIUM └── No → Can authenticated users escalate privileges? ├── Yes → HIGH └── No → Does it expose sensitive data? ├── Yes → MEDIUM └── No → LOW or INFO
---
## Finding Format
### Individual Finding Template
```markdown
#### [ID] [Short descriptive title]
| Attribute | Value |
|-----------|-------|
| **Severity** | [Critical/High/Medium/Low/Info] |
| **ASVS** | V[chapter].[section].[requirement] |
| **CWE** | CWE-[id] ([name]) |
| **OWASP** | [Top 10 category if applicable] |
| **Location** | `file:line` |
| **Confidence** | [High/Medium/Low] |
| **Status** | [Open/Verified/Fixed/False Positive] |
**Description**
[What is the issue? Be specific and technical.]
**Evidence**
[Code snippet, configuration, or proof]
**Impact**
[What could an attacker do? What's the business impact?]
**Remediation**
[How to fix it. Include code examples when possible.]
**References**
[Links to relevant documentation, CVEs, or standards]
- **[Severity]** [Title] - `file:line` (ASVS V[X].[Y].[Z])
| Chapter | Common Finding Types |
|---|---|
| V1 | SQL injection, command injection, XSS, deserialization |
| V2 | Missing validation, business logic bypass, mass assignment |
| V3 | Missing CSP, insecure cookies, missing HSTS |
| V4 | API rate limiting, GraphQL introspection, content-type issues |
| V5 | Unrestricted upload, path traversal, insecure storage |
| V6 | Weak passwords, insecure hashing, no lockout |
| V7 | Predictable sessions, no timeout, insecure cookies |
| V8 | IDOR, missing access control, privilege escalation |
| V9 | JWT algorithm confusion, no expiration, weak secrets |
| V10 | Missing PKCE, open redirect, token leakage |
| V11 | Weak crypto, hardcoded keys, insecure random |
| V12 | TLS misconfiguration, certificate issues |
| V13 | Debug enabled, secrets in code, outdated dependencies |
| V14 | Unencrypted PII, data retention issues |
| V15 | Buffer overflow, dependency vulnerabilities |
| V16 | Missing logging, PII in logs, verbose errors |
| V17 | WebRTC security issues |
For machine-readable output alongside the markdown report:
{
"audit": {
"project": "project-name",
"date": "2024-12-15T10:30:00Z",
"duration_seconds": 120,
"plugin_version": "1.0.0",
"asvs_version": "5.0"
},
"scope": {
"level": "L2",
"chapters": ["V1", "V2", "V4", "V6", "V7", "V8"],
"auditors": ["encoding-auditor", "validation-auditor", "api-auditor"]
},
"summary": {
"total": 15,
"critical": 1,
"high": 3,
"medium": 5,
"low": 4,
"info": 2,
"risk_level": "high"
},
"findings": [
{
"id": "FINDING-001",
"title": "SQL Injection in User Query",
"severity": "critical",
"asvs": "V1.2.1",
"cwe": "CWE-89",
"location": {
"file": "src/api/users.js",
"line": 42,
"column": 15
},
"confidence": "high",
"description": "...",
"evidence": "...",
"impact": "...",
"remediation": "...",
"references": ["..."]
}
],
"coverage": {
"V1": {"total": 28, "checked": 28, "passed": 25, "failed": 2, "na": 1}
}
}
Good:
The
getUserByIdfunction at line 42 constructs a SQL query using string concatenation with user-supplied input (userId), allowing an attacker to inject arbitrary SQL commands.
Bad:
SQL injection vulnerability found.
Good:
Replace the string concatenation with parameterized queries:
// Before (vulnerable) const query = `SELECT * FROM users WHERE id = '${userId}'`; // After (secure) const query = 'SELECT * FROM users WHERE id = $1'; const result = await db.query(query, [userId]);
Bad:
Fix the SQL injection.
Skill: asvs-requirements - ASVS chapter detailsSkill: remediation-library - Fix patterns (future)Agent: audit-orchestrator - Report generation workflow