OWASP Top 10
What This Does
Systematically checks an application against the OWASP Top 10 (2021) vulnerability categories. For each category, provides specific tests to run, code patterns to look for, and remediation guidance. Produces a compliance checklist with pass/fail/partial status for each category.
Instructions
Determine the application type. The OWASP Top 10 applies to web applications, but the specific checks vary by:
- Server-rendered vs SPA + API
- Framework (Next.js, Express, Django, Rails, etc.)
- Authentication method (session, JWT, OAuth)
- Database (SQL, NoSQL, ORM)
Check each OWASP category systematically.
A01:2021 — Broken Access Control
Check for:
- Missing authorization checks on API endpoints
- Insecure Direct Object References (IDOR) — can user A access user B's data by changing an ID?
- Missing function-level access control — can a regular user access admin endpoints?
- CORS misconfiguration allowing unauthorized origins
- JWT token manipulation (alg: none, key confusion)
- Path traversal in file operations
Test:
- Try accessing /api/users/{other_user_id} with a regular user token
- Try accessing /admin/* without admin role
- Check if CORS allows * or overly broad origins
- Modify JWT claims and check if they're validated
A02:2021 — Cryptographic Failures
Check for:
- Sensitive data transmitted without TLS
- Weak hashing algorithms (MD5, SHA1) for passwords
- Hardcoded encryption keys
- Sensitive data in logs or error messages
- Missing encryption at rest for PII/financial data
- Weak random number generation for tokens
Test:
- Verify all endpoints use HTTPS
- Check password hashing (should be bcrypt, scrypt, or Argon2)
- Search for console.log/print statements with sensitive data
- Verify token generation uses crypto-secure randomness
A03:2021 — Injection
Check for:
- SQL injection (dynamic query construction)
- NoSQL injection (MongoDB query operators in user input)
- Command injection (shell command execution with user input)
- XSS (user input rendered as HTML without sanitization)
- LDAP injection, XML injection, template injection
Test:
- Input: ' OR 1=1 -- in every text field
- Input: {$gt: ""} in JSON fields (NoSQL)
- Input: ; ls -la in fields that might reach shell
- Input: <script>alert(1)</script> in text fields
- Check if ORM/parameterized queries are used everywhere
A04:2021 — Insecure Design
Check for:
- Missing rate limiting on authentication endpoints
- No account lockout after failed login attempts
- Password reset flow vulnerabilities (token reuse, no expiry)
- Missing CSRF protection on state-changing operations
- Business logic flaws (negative quantities, race conditions)
A05:2021 — Security Misconfiguration
Check for:
- Default credentials on admin panels, databases, services
- Unnecessary features enabled (debug mode, directory listing)
- Missing security headers (CSP, HSTS, X-Frame-Options, X-Content-Type-Options)
- Verbose error messages exposing stack traces
- Unnecessary ports or services exposed
- Outdated software versions
Test:
# Check security headers
curl -I https://example.com | grep -iE "strict-transport|content-security|x-frame|x-content-type"
A06:2021 — Vulnerable and Outdated Components
Check for:
- Known CVEs in dependencies (see
dependency-audit skill)
- Outdated framework versions
- Unsupported or end-of-life components
- Components with known security issues
A07:2021 — Identification and Authentication Failures
Check for:
- Weak password requirements
- Missing MFA option
- Session fixation vulnerabilities
- Session tokens in URL parameters
- No session invalidation on logout
- Credential stuffing protections missing
A08:2021 — Software and Data Integrity Failures
Check for:
- Missing integrity checks on downloaded updates
- Insecure CI/CD pipeline (unsigned artifacts, unverified dependencies)
- Deserialization of untrusted data
- Missing Subresource Integrity (SRI) for CDN scripts
A09:2021 — Security Logging and Monitoring Failures
Check for:
- Authentication events not logged
- Failed access attempts not logged
- Logs missing timestamps, user IDs, or IP addresses
- Sensitive data in logs (passwords, tokens, PII)
- No alerting on suspicious activity
- Log injection vulnerabilities
A10:2021 — Server-Side Request Forgery (SSRF)
Check for:
- User-supplied URLs fetched by the server
- Internal service URLs accessible through user input
- Cloud metadata endpoint access (169.254.169.254)
- DNS rebinding vulnerabilities
- Score each category.
Output Format
# OWASP Top 10 Assessment: {Application}
**Date:** {YYYY-MM-DD}
**OWASP Version:** 2021
## Summary
| # | Category | Status | Findings |
|---|----------|--------|----------|
| A01 | Broken Access Control | {PASS/FAIL/PARTIAL} | {count} |
| A02 | Cryptographic Failures | {PASS/FAIL/PARTIAL} | {count} |
| A03 | Injection | {PASS/FAIL/PARTIAL} | {count} |
| A04 | Insecure Design | {PASS/FAIL/PARTIAL} | {count} |
| A05 | Security Misconfiguration | {PASS/FAIL/PARTIAL} | {count} |
| A06 | Vulnerable Components | {PASS/FAIL/PARTIAL} | {count} |
| A07 | Auth Failures | {PASS/FAIL/PARTIAL} | {count} |
| A08 | Integrity Failures | {PASS/FAIL/PARTIAL} | {count} |
| A09 | Logging Failures | {PASS/FAIL/PARTIAL} | {count} |
| A10 | SSRF | {PASS/FAIL/PARTIAL} | {count} |
## Detailed Findings
{Per-category findings with severity, evidence, and remediation}
## Remediation Priority
1. {Highest priority fix}
2. {Next priority}
...
Tips
- A01 (Broken Access Control) is the most common vulnerability — spend the most time here
- A03 (Injection) is often mitigated by modern frameworks (ORMs, template engines) but verify the edge cases
- Security headers (A05) are quick wins — add them even if no other findings
- Check both happy path and error path — many vulnerabilities hide in error handling
- Test as different user roles: anonymous, regular user, admin, suspended user
- This checklist covers the most common issues but is not exhaustive — use
security-audit for comprehensive coverage
1---2name: owasp-top-103description: Check applications against the OWASP Top 10 vulnerabilities with specific tests, examples, and remediation for each category.4---56# OWASP Top 1078## What This Does910Systematically checks an application against the OWASP Top 10 (2021) vulnerability categories. For each category, provides specific tests to run, code patterns to look for, and remediation guidance. Produces a compliance checklist with pass/fail/partial status for each category.1112## Instructions13141. **Determine the application type.** The OWASP Top 10 applies to web applications, but the specific checks vary by:15 - Server-rendered vs SPA + API16 - Framework (Next.js, Express, Django, Rails, etc.)17 - Authentication method (session, JWT, OAuth)18 - Database (SQL, NoSQL, ORM)19202. **Check each OWASP category systematically.**2122### A01:2021 — Broken Access Control2324**Check for:**25- Missing authorization checks on API endpoints26- Insecure Direct Object References (IDOR) — can user A access user B's data by changing an ID?27- Missing function-level access control — can a regular user access admin endpoints?28- CORS misconfiguration allowing unauthorized origins29- JWT token manipulation (alg: none, key confusion)30- Path traversal in file operations3132**Test:**33```34- Try accessing /api/users/{other_user_id} with a regular user token35- Try accessing /admin/* without admin role36- Check if CORS allows * or overly broad origins37- Modify JWT claims and check if they're validated38```3940### A02:2021 — Cryptographic Failures4142**Check for:**43- Sensitive data transmitted without TLS44- Weak hashing algorithms (MD5, SHA1) for passwords45- Hardcoded encryption keys46- Sensitive data in logs or error messages47- Missing encryption at rest for PII/financial data48- Weak random number generation for tokens4950**Test:**51```52- Verify all endpoints use HTTPS53- Check password hashing (should be bcrypt, scrypt, or Argon2)54- Search for console.log/print statements with sensitive data55- Verify token generation uses crypto-secure randomness56```5758### A03:2021 — Injection5960**Check for:**61- SQL injection (dynamic query construction)62- NoSQL injection (MongoDB query operators in user input)63- Command injection (shell command execution with user input)64- XSS (user input rendered as HTML without sanitization)65- LDAP injection, XML injection, template injection6667**Test:**68```69- Input: ' OR 1=1 -- in every text field70- Input: {$gt: ""} in JSON fields (NoSQL)71- Input: ; ls -la in fields that might reach shell72- Input: <script>alert(1)</script> in text fields73- Check if ORM/parameterized queries are used everywhere74```7576### A04:2021 — Insecure Design7778**Check for:**79- Missing rate limiting on authentication endpoints80- No account lockout after failed login attempts81- Password reset flow vulnerabilities (token reuse, no expiry)82- Missing CSRF protection on state-changing operations83- Business logic flaws (negative quantities, race conditions)8485### A05:2021 — Security Misconfiguration8687**Check for:**88- Default credentials on admin panels, databases, services89- Unnecessary features enabled (debug mode, directory listing)90- Missing security headers (CSP, HSTS, X-Frame-Options, X-Content-Type-Options)91- Verbose error messages exposing stack traces92- Unnecessary ports or services exposed93- Outdated software versions9495**Test:**96```bash97# Check security headers98curl -I https://example.com | grep -iE "strict-transport|content-security|x-frame|x-content-type"99```100101### A06:2021 — Vulnerable and Outdated Components102103**Check for:**104- Known CVEs in dependencies (see `dependency-audit` skill)105- Outdated framework versions106- Unsupported or end-of-life components107- Components with known security issues108109### A07:2021 — Identification and Authentication Failures110111**Check for:**112- Weak password requirements113- Missing MFA option114- Session fixation vulnerabilities115- Session tokens in URL parameters116- No session invalidation on logout117- Credential stuffing protections missing118119### A08:2021 — Software and Data Integrity Failures120121**Check for:**122- Missing integrity checks on downloaded updates123- Insecure CI/CD pipeline (unsigned artifacts, unverified dependencies)124- Deserialization of untrusted data125- Missing Subresource Integrity (SRI) for CDN scripts126127### A09:2021 — Security Logging and Monitoring Failures128129**Check for:**130- Authentication events not logged131- Failed access attempts not logged132- Logs missing timestamps, user IDs, or IP addresses133- Sensitive data in logs (passwords, tokens, PII)134- No alerting on suspicious activity135- Log injection vulnerabilities136137### A10:2021 — Server-Side Request Forgery (SSRF)138139**Check for:**140- User-supplied URLs fetched by the server141- Internal service URLs accessible through user input142- Cloud metadata endpoint access (169.254.169.254)143- DNS rebinding vulnerabilities1441453. **Score each category.**146147## Output Format148149```markdown150# OWASP Top 10 Assessment: {Application}151**Date:** {YYYY-MM-DD}152**OWASP Version:** 2021153154## Summary155| # | Category | Status | Findings |156|---|----------|--------|----------|157| A01 | Broken Access Control | {PASS/FAIL/PARTIAL} | {count} |158| A02 | Cryptographic Failures | {PASS/FAIL/PARTIAL} | {count} |159| A03 | Injection | {PASS/FAIL/PARTIAL} | {count} |160| A04 | Insecure Design | {PASS/FAIL/PARTIAL} | {count} |161| A05 | Security Misconfiguration | {PASS/FAIL/PARTIAL} | {count} |162| A06 | Vulnerable Components | {PASS/FAIL/PARTIAL} | {count} |163| A07 | Auth Failures | {PASS/FAIL/PARTIAL} | {count} |164| A08 | Integrity Failures | {PASS/FAIL/PARTIAL} | {count} |165| A09 | Logging Failures | {PASS/FAIL/PARTIAL} | {count} |166| A10 | SSRF | {PASS/FAIL/PARTIAL} | {count} |167168## Detailed Findings169{Per-category findings with severity, evidence, and remediation}170171## Remediation Priority1721. {Highest priority fix}1732. {Next priority}174...175```176177## Tips178179- A01 (Broken Access Control) is the most common vulnerability — spend the most time here180- A03 (Injection) is often mitigated by modern frameworks (ORMs, template engines) but verify the edge cases181- Security headers (A05) are quick wins — add them even if no other findings182- Check both happy path and error path — many vulnerabilities hide in error handling183- Test as different user roles: anonymous, regular user, admin, suspended user184- This checklist covers the most common issues but is not exhaustive — use `security-audit` for comprehensive coverage