skills/web-app-security-audit/SKILL.md
Use when testing a web application for security vulnerabilities, before deployment or during security review — guides through a structured 10-phase penetration testing methodology covering mapping, authentication, session management, access controls, injection, logic flaws, and server configuration.
npx skillsauth add ahmedhamadto/software-forge web-app-security-auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A structured penetration testing methodology based on The Web Application Hacker's Handbook. Guides you through 10 sequential phases to systematically identify vulnerabilities in any web application you're building or reviewing.
Work through each phase sequentially. At each phase:
cybersecurity/web-application-hackers-handbook/ for detailed guidanceCRITICAL / HIGH / MEDIUM / LOW / INFOIf the application doesn't have a relevant surface for a phase (e.g., no file uploads), acknowledge and skip with rationale.
digraph audit_phases {
rankdir=TB;
node [shape=box, style=rounded];
p1 [label="Phase 1\nMap the Application"];
p2 [label="Phase 2\nAnalyze the Application"];
p3 [label="Phase 3\nClient-Side Controls"];
p4 [label="Phase 4\nAuthentication"];
p5 [label="Phase 5\nSession Management"];
p6 [label="Phase 6\nAccess Controls"];
p7 [label="Phase 7\nInjection Vulnerabilities"];
p8 [label="Phase 8\nApplication Logic"];
p9 [label="Phase 9\nApplication Server"];
p10 [label="Phase 10\nReview & Report"];
report [label="Security Audit\nReport", shape=note];
p1 -> p2 -> p3 -> p4 -> p5 -> p6 -> p7 -> p8 -> p9 -> p10 -> report;
}
Reference: cybersecurity/web-application-hackers-handbook/ch04-mapping-the-application.md
Goal: Discover the full attack surface before testing anything.
Questions to ask:
Tests to run:
# Express.js
grep -rn "app\.\(get\|post\|put\|delete\|patch\)" --include="*.ts" --include="*.js"
# Django
grep -rn "path\|url(" --include="*.py" urls.py
# Rails
grep -rn "get\|post\|put\|delete\|patch\|resources\|resource" config/routes.rb
# Next.js — check app/ and pages/ directory structure
robots.txt, sitemap.xml, .env, .git/, package.jsongrep -rni "password\|secret\|api_key\|token\|private_key" --include="*.ts" --include="*.js" --include="*.py" --include="*.env*"
Deliverable: Complete attack surface map — routes, parameters, technologies, entry points.
Reference: cybersecurity/web-application-hackers-handbook/ch03-web-application-technologies.md
Goal: Understand what the application does and identify high-risk areas.
Questions to ask:
Prioritize testing areas (highest risk first):
Deliverable: Functional map with risk-prioritized areas of interest.
Reference: cybersecurity/web-application-hackers-handbook/ch05-bypassing-client-side-controls.md
Goal: Verify the server never trusts client-side validation or state.
Questions to ask:
Tests to run:
grep -rn 'type="hidden"\|type=.hidden.' --include="*.html" --include="*.tsx" --include="*.jsx"
grep -rn "maxlength\|pattern=\|required\b" --include="*.html" --include="*.tsx" --include="*.jsx"
grep -rn "validate\|sanitize\|zod\|yup\|joi\|class-validator" --include="*.ts" --include="*.js" --include="*.py"
Finding template:
[SEVERITY] Client-Side Control Bypass: [description]
Affected: [endpoint/parameter]
Test: [what you did]
Result: [what happened]
Impact: [what an attacker could achieve]
Fix: [server-side validation recommendation]
Reference: cybersecurity/web-application-hackers-handbook/ch06-attacking-authentication.md
Goal: Verify authentication cannot be bypassed, brute-forced, or abused.
Tests to run:
Username enumeration:
grep -rn "invalid.*username\|user.*not found\|no.*account\|incorrect.*password" --include="*.ts" --include="*.js" --include="*.py"
Brute-force resilience:
grep -rn "rate.limit\|throttle\|brute\|lockout\|max.*attempts" --include="*.ts" --include="*.js" --include="*.py"
Password policy:
grep -rn "bcrypt\|argon2\|scrypt\|pbkdf2\|sha256\|sha1\|md5\|plaintext" --include="*.ts" --include="*.js" --include="*.py"
CRITICAL if passwords stored as plaintext, MD5, or SHA1 without saltPassword reset:
Multi-factor authentication:
Remember me:
Reference: cybersecurity/web-application-hackers-handbook/ch07-attacking-session-management.md
Goal: Verify sessions cannot be hijacked, fixated, or predicted.
Tests to run:
Token generation:
# For JWTs
grep -rn "jwt\|jsonwebtoken\|jose" --include="*.ts" --include="*.js" --include="*.py"
Cookie flags:
Secure, HttpOnly, SameSite, Domain, Path
grep -rn "Set-Cookie\|cookie\|setCookie\|httpOnly\|secure\|sameSite" --include="*.ts" --include="*.js" --include="*.py"
HIGH if session cookie missing HttpOnly (XSS can steal it)HIGH if session cookie missing Secure (transmitted over HTTP)MEDIUM if session cookie missing SameSite (CSRF vector)Session lifecycle:
CSRF protection:
grep -rn "csrf\|xsrf\|_token\|csrfmiddleware" --include="*.ts" --include="*.js" --include="*.py" --include="*.html"
Reference: cybersecurity/web-application-hackers-handbook/ch08-attacking-access-controls.md
Goal: Verify users cannot access unauthorized data or functionality.
Questions to ask:
Tests to run:
IDOR (Insecure Direct Object Reference):
grep -rn "/users/\|/orders/\|/documents/\|/api/.*/:id\|/api/.*/<.*>" --include="*.ts" --include="*.js" --include="*.py"
CRITICAL if successfulVertical privilege escalation:
grep -rn "isAdmin\|requireAdmin\|role.*admin\|authorize\|permission\|@Roles\|@RequiresRole" --include="*.ts" --include="*.js" --include="*.py"
Horizontal privilege escalation:
user_id, account_id, email) in requestsMulti-step process controls:
Reference: cybersecurity/web-application-hackers-handbook/ch09-attacking-data-stores.md, ch10-attacking-back-end-components.md, ch12-attacking-users-xss.md
Goal: Verify all input is safely handled across every context.
SQL Injection:
# Find raw query construction (CRITICAL pattern)
grep -rn "query.*+\|execute.*+\|raw.*+\|\\.format.*SELECT\|f\".*SELECT\|f'.*SELECT" --include="*.ts" --include="*.js" --include="*.py"
# Verify parameterized queries are used
grep -rn "prepare\|parameterized\|\$[0-9]\|placeholder\|\?" --include="*.ts" --include="*.js" --include="*.py"
CRITICAL if string concatenation/interpolation used in SQL queriesXSS (Cross-Site Scripting):
# Find dangerous DOM operations
grep -rn "innerHTML\|outerHTML\|document\.write\|\.html(\|dangerouslySetInnerHTML\|v-html\|\{!! " --include="*.ts" --include="*.js" --include="*.tsx" --include="*.jsx" --include="*.vue" --include="*.blade.php"
# Find eval usage
grep -rn "eval(\|Function(\|setTimeout.*string\|setInterval.*string" --include="*.ts" --include="*.js"
HIGH for stored XSS, MEDIUM for reflected XSS, MEDIUM for DOM-based XSSOS Command Injection:
grep -rn "exec(\|execSync\|spawn(\|system(\|popen\|subprocess\|child_process\|shell_exec\|passthru\|backtick" --include="*.ts" --include="*.js" --include="*.py" --include="*.php"
CRITICAL if user input flows into command executionPath Traversal:
grep -rn "readFile\|writeFile\|createReadStream\|open(\|path\.join.*req\|path\.resolve.*req\|fs\." --include="*.ts" --include="*.js" --include="*.py"
XXE (XML External Entity):
grep -rn "parseXML\|DOMParser\|SAXParser\|XMLReader\|etree\.parse\|xml2js\|libxml" --include="*.ts" --include="*.js" --include="*.py"
SSRF (Server-Side Request Forgery):
grep -rn "fetch(\|axios\|request(\|urllib\|http\.get\|https\.get\|curl\|wget" --include="*.ts" --include="*.js" --include="*.py"
CRITICAL if user input flows directly into server-side HTTP requests without validationServer-Side Template Injection (SSTI):
grep -rn "render_template_string\|Template(\|Jinja2\|nunjucks.*render\|handlebars.*compile\|ejs.*render" --include="*.ts" --include="*.js" --include="*.py"
Reference: cybersecurity/web-application-hackers-handbook/ch11-attacking-application-logic.md
Goal: Identify flaws in business logic that automated scanners cannot find.
Questions to ask:
Tests to run:
Race conditions:
grep -rn "balance\|credits\|quantity\|stock\|inventory\|coupon\|redeem\|transfer\|withdraw" --include="*.ts" --include="*.js" --include="*.py"
HIGH if double-spending or double-redemption is possibleMulti-step process abuse:
Transaction logic:
Input normalization conflicts:
Reference: cybersecurity/web-application-hackers-handbook/ch18-attacking-the-application-server.md
Goal: Verify the server platform itself is hardened.
Tests to run:
Default credentials:
/admin, /wp-admin, /phpmyadmin, /console, /managerDangerous HTTP methods:
curl -X OPTIONS <target-url> -i
MEDIUM if PUT, DELETE, or TRACE are enabled unnecessarilySecurity headers:
curl -s -I <target-url>
Check for:
Content-Security-Policy — HIGH if missing (XSS mitigation)Strict-Transport-Security — HIGH if missing (HTTPS enforcement)X-Frame-Options or CSP frame-ancestors — MEDIUM if missing (clickjacking)X-Content-Type-Options: nosniff — LOW if missing (MIME sniffing)Referrer-Policy — LOW if missing (information leakage)Permissions-Policy — INFO if missingServer / X-Powered-By — INFO if present (version disclosure)Debug mode:
grep -rn "DEBUG.*=.*True\|debug.*:.*true\|NODE_ENV.*development\|FLASK_DEBUG\|DJANGO_DEBUG" --include="*.py" --include="*.js" --include="*.ts" --include="*.env*" --include="*.yaml" --include="*.yml"
HIGH if debug mode enabled in production configDependency vulnerabilities:
# Node.js
npm audit
# Python
pip-audit # or safety check
# Ruby
bundle audit
Known CVEs:
CRITICAL for RCE CVEs, HIGH for auth bypass CVEsReference: cybersecurity/web-application-hackers-handbook/ch15-exploiting-information-disclosure.md, ch21-web-application-hackers-methodology.md
Final checks:
Information disclosure:
grep -rn "console\.log\|print(\|logger\.\(debug\|info\)\|TODO\|FIXME\|HACK\|XXX" --include="*.ts" --include="*.js" --include="*.py"
.git/, .env, source maps, backup filesSSL/TLS:
# If accessible externally
nmap --script ssl-enum-ciphers -p 443 <target>
# Or use testssl.sh
Generate the audit report:
# Security Audit Report: [Application Name]
**Date:** [date]
**Auditor:** [name]
**Scope:** [what was tested]
## Executive Summary
[1-2 paragraph summary of overall security posture and critical findings]
## Findings Summary
| # | Severity | Finding | Phase |
|---|----------|---------|-------|
| 1 | CRITICAL | [title] | [phase] |
| 2 | HIGH | [title] | [phase] |
| ... | ... | ... | ... |
## Detailed Findings
### Finding 1: [Title]
**Severity:** CRITICAL / HIGH / MEDIUM / LOW / INFO
**Phase:** [which phase found it]
**Affected Component:** [endpoint, file, function]
**Description:**
[What the vulnerability is and why it exists]
**Reproduction Steps:**
1. [Step-by-step to reproduce]
**Impact:**
[What an attacker could achieve — data access, account takeover, RCE, etc.]
**Remediation:**
[Specific, actionable fix with code example if possible]
**Reference:**
[OWASP, CWE, or WAHH chapter reference]
---
[Repeat for each finding]
## Recommendations Priority
1. [Fix critical/high findings immediately]
2. [Fix medium findings before next release]
3. [Fix low/info findings as part of regular maintenance]
## Out of Scope / Not Tested
[What was explicitly excluded and why]
| Severity | Criteria | Examples | |----------|----------|---------| | CRITICAL | Immediate exploitation, RCE, full data breach, auth bypass | SQL injection with data access, RCE via command injection, hardcoded admin credentials, unauthenticated admin access | | HIGH | Significant data exposure, account takeover, privilege escalation | Stored XSS, IDOR on sensitive data, broken access controls, session fixation, missing HTTPS enforcement | | MEDIUM | Limited exploitation, requires user interaction, partial data exposure | Reflected XSS, CSRF on non-critical functions, missing SameSite cookies, verbose error messages with internal paths | | LOW | Minor information disclosure, best practice violation | Version disclosure in headers, missing X-Content-Type-Options, autocomplete on sensitive fields | | INFO | Observation, no direct security impact | Missing Permissions-Policy, minor configuration notes, suggestions for defense-in-depth |
| Mistake | Fix | |---------|-----| | Testing only the happy path | Test every parameter with malicious input — injection lives in the edge cases | | Skipping access control testing | IDOR is consistently a top vulnerability — test every resource endpoint with different user contexts | | Only testing through the UI | The UI hides parameters, endpoints, and capabilities — test the API directly | | Assuming the framework handles security | Frameworks provide tools, not guarantees — verify each mechanism is correctly configured and used | | Testing in isolation | Chain findings — info disclosure + IDOR + XSS can escalate from LOW to CRITICAL | | Stopping at first finding per category | One SQL injection doesn't mean all queries are vulnerable — test each endpoint independently |
testing
Craft stunning macOS desktop experiences with SwiftUI — cinematic animations, particle systems, glass materials, and wallpaper-grade visual design. Use like `/apple-craftsman A minimalist weather widget with aurora particle effects`.
development
Use when you have a spec or requirements for a multi-step task, before touching code
data-ai
Engineer system prompts for LiveKit voice agents with multilingual support. Use when creating or optimizing AI agent conversation flows.
data-ai
Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always