secure-agent-playbook

Play: OWASP Top 10 Web Security Review

Review web applications against the OWASP Top 10 for Web Applications (2021), producing actionable findings with severity ratings and remediation guidance.

Trigger Conditions

Use this play when:

Inputs

Procedure

1. Application Mapping

Before assessing risks, understand the application:

Aspect Questions
Framework What language/framework? (Node.js/Express, Python/Django, Ruby/Rails, Java/Spring, PHP/Laravel, etc.)
Architecture Monolith, microservices, serverless (Lambda/Cloud Functions), SPA vs SSR?
Trust Boundary Internet-facing, internal network, or local-only?
Data Sensitivity Does it handle PII, credentials, financial data, health data (HIPAA)?
Authentication Session-based, JWT, OAuth, SSO, API keys?
Data Stores SQL database, NoSQL, cache (Redis), file storage, external APIs?

Document the attack surface: entry points, data flows, trust boundaries.

2. Assess Each OWASP Top 10 Risk

A01: Broken Access Control

CWE-200, CWE-201, CWE-352, CWE-639

What to Look For:

Testing Approach:

  1. Map all endpoints requiring authentication
  2. Test each without authentication (should fail)
  3. Test cross-user access (User A accessing User B’s resources)
  4. Test privilege escalation paths (user → admin)
  5. Verify authorization on every object access, not just initial authentication

A02: Cryptographic Failures

CWE-261, CWE-296, CWE-310, CWE-319, CWE-326, CWE-327, CWE-916

What to Look For:

Testing Approach:

  1. Search for hardcoded secrets using patterns (see secrets-scan.md)
  2. Verify TLS configuration (certificates, protocol versions, cipher suites)
  3. Check password storage (should use bcrypt, Argon2, or PBKDF2)
  4. Validate encryption implementations (no custom crypto)
  5. Test for sensitive data in URLs, headers, and logs

A03: Injection

CWE-74, CWE-78, CWE-79, CWE-89, CWE-91, CWE-564, CWE-943

What to Look For:

Injection Type Indicators Impact
SQL Injection String concatenation in SQL, cursor.execute(f"SELECT * FROM users WHERE id = {user_id}"), dynamic queries Data exfiltration, authentication bypass, RCE
NoSQL Injection Unsanitized JSON in MongoDB queries, $where clauses with user input Data manipulation, authentication bypass
OS Command Injection exec(), system(), subprocess.call() with user input Remote code execution
LDAP Injection User input in LDAP filters without escaping Authentication bypass, data access
XSS (Cross-Site Scripting) User input rendered without encoding, innerHTML, dangerouslySetInnerHTML, unescaped template output Session hijacking, credential theft, defacement
SSTI (Server-Side Template Injection) User input in Jinja2, ERB, EJS templates RCE, file access
XPath Injection User input in XPath queries XML data access
Log Injection CRLF in log entries (\n\r), log forging Log tampering, data exfiltration
Header Injection CRLF in HTTP headers Response splitting, XSS

Testing Approach:

  1. Search for dangerous functions (concatenation, eval, exec, innerHTML)
  2. Test each input field with injection payloads
  3. Verify output encoding for all user-controlled data
  4. Check prepared statements/parameterized queries usage
  5. Validate Content Security Policy (CSP) headers for XSS mitigation

A04: Insecure Design

CWE-73, CWE-183, CWE-209, CWE-213, CWE-235, CWE-256, CWE-257, CWE-266, CWE-269, CWE-280, CWE-434, CWE-444, CWE-501, CWE-522, CWE-697, CWE-799, CWE-807, CWE-840, CWE-841, CWE-927, CWE-1021, CWE-1173, CWE-1174, CWE-1233

What to Look For:

Testing Approach:

  1. Review architecture documentation for security considerations
  2. Test business logic flows for bypass opportunities
  3. Check for race conditions in multi-step processes
  4. Verify rate limiting on sensitive endpoints
  5. Ensure all validation happens server-side

A05: Security Misconfiguration

CWE-2, CWE-11, CWE-13, CWE-15, CWE-16, CWE-209, CWE-250, CWE-260, CWE-312, CWE-497, CWE-538, CWE-540, CWE-541, CWE-547, CWE-611, CWE-614, CWE-756, CWE-942

What to Look For:

Testing Approach:

  1. Review configuration files (nginx.conf, .htaccess, application.yml)
  2. Check for default credentials and accounts
  3. Verify security headers using tools or manual inspection
  4. Test error handling (trigger errors, check responses)
  5. Scan for unnecessary open ports and services
  6. Check cloud configurations for public exposure

A06: Vulnerable and Outdated Components

CWE-937, CWE-1035, CWE-1104

What to Look For:

Testing Approach:

  1. Run SCA scanner (osv-scanner, npm audit, pip-audit)
  2. Review dependency files (package.json, requirements.txt, etc.)
  3. Check for end-of-life components
  4. Verify dependency update processes
  5. Review lockfiles for reproducible builds

A07: Identification and Authentication Failures

CWE-287, CWE-288, CWE-290, CWE-294, CWE-295, CWE-297, CWE-300, CWE-302, CWE-304, CWE-306, CWE-307, CWE-346, CWE-384, CWE-521, CWE-613, CWE-620, CWE-640, CWE-798, CWE-940, CWE-1216

What to Look For:

Testing Approach:

  1. Test password requirements and complexity
  2. Attempt credential stuffing with known breached credentials
  3. Test for brute force protection (rate limiting, CAPTCHA, lockout)
  4. Analyze session handling (cookies, tokens, expiration)
  5. Test password reset flows for security
  6. Verify MFA implementation and bypass opportunities

A08: Software and Data Integrity Failures

CWE-345, CWE-353, CWE-426, CWE-494, CWE-502, CWE-565, CWE-784, CWE-829, CWE-830, CWE-915

What to Look For:

Testing Approach:

  1. Search for deserialization functions with user-controlled input
  2. Verify update mechanisms include signature verification
  3. Review CI/CD configurations for security controls
  4. Check for XXE vulnerabilities in XML parsing
  5. Verify integrity checks on critical data

A09: Security Logging and Monitoring Failures

CWE-117, CWE-223, CWE-532, CWE-778, CWE-1175

What to Look For:

Testing Approach:

  1. Review what events are logged (authentication, authorization, data access)
  2. Check log format and content for sufficiency
  3. Search for sensitive data in log statements
  4. Verify log storage security and retention
  5. Assess monitoring and alerting capabilities

A10: Server-Side Request Forgery (SSRF)

CWE-918

What to Look For:

Testing Approach:

  1. Identify all endpoints accepting URLs from users
  2. Test for internal service access (localhost, private IPs)
  3. Attempt cloud metadata endpoint access
  4. Test alternative protocols (file://, gopher://, dict://)
  5. Test for URL parsing bypasses (unicode, encoding, case variations)

3. Framework-Specific Checks

Apply additional checks based on detected framework:

Framework Key Security Checks
React/Next.js XSS via dangerouslySetInnerHTML, SSRF in getServerSideProps, API routes without auth
Angular XSS protection bypasses, unsafe bypassSecurityTrustHtml, HTTP client interceptors
Vue.js v-html XSS risks, server-side rendering vulnerabilities
Express.js Missing Helmet middleware, no rate limiting, prototype pollution
Django DEBUG=True, SECRET_KEY exposure, raw SQL, CSRF exemptions
Flask Jinja2 autoescape disabled, unsafe session handling, debug mode
Ruby on Rails Mass assignment, render with user input, SQL fragments, weak parameters
Spring Boot SpEL injection, actuator endpoints exposed, mass assignment, CORS issues
Laravel Mass assignment, raw queries, debug mode, configuration exposure
ASP.NET Core Razor XSS, insecure deserialization, missing anti-forgery tokens

4. Configuration Review

Examine these configuration areas:

Web Server Configuration

Application Configuration

Deployment Configuration


5. Produce Findings

For each identified vulnerability:


Output Format

## Web Security Review: [Application Name]

### Application Overview
- **Framework**: [React/Express, Django, Rails, etc.]
- **Deployment**: [Internet-facing, internal, cloud platform]
- **Architecture**: [Monolith, microservices, serverless]
- **Authentication**: [Session-based, JWT, OAuth]

### Risk Matrix
| OWASP Ref | Risk | Severity | Status |
|-----------|------|----------|--------|
| A01 | Broken Access Control | HIGH | Finding |
| A02 | Cryptographic Failures | MEDIUM | Finding |
| A03 | Injection | CRITICAL | Finding |
| A04 | Insecure Design | LOW | Finding |
| A05 | Security Misconfiguration | MEDIUM | Finding |
| A06 | Vulnerable Components | HIGH | Finding |
| A07 | Auth Failures | HIGH | Finding |
| A08 | Integrity Failures | N/A | N/A |
| A09 | Logging Failures | MEDIUM | Finding |
| A10 | SSRF | N/A | N/A |

### Findings
[Standard finding template for each identified risk]

### Positive Controls Observed
[Security controls already in place — acknowledge good practices]

### Recommendations
[Prioritized remediation roadmap]

OWASP References