Detailed breakdown of OWASP Top 10 web vulnerabilities: broken access control, cryptographic failures, injection, insecure design, security misconfig, vulnerable components, auth failures, integrity failures, logging/monitoring gaps, and SSRF—with theory and common locations.
Users can access resources, functions, or data they shouldn't be authorized to view or modify. This includes bypassing authorization checks, manipulating URLs, session identifiers, or API calls.
- Horizontal privilege escalation: User A accesses User B's data (e.g., changing
user_id=123touser_id=456in URL). - Vertical privilege escalation: Regular user gains admin privileges.
- Insecure Direct Object References (IDOR): Predictable references (IDs, filenames) in URLs/parameters without authorization checks.
- Missing function-level access control: Admin functions exposed to non-admins.
- URLs/Query strings:
https://app.com/profile?user_id=456 - POST/PUT/DELETE request parameters (API or form bodies)
- Cookies/session tokens: Manipulating or stealing tokens to impersonate users
- Hidden form fields/API endpoints:
/admin,/api/v1/users/delete - File paths: Direct file access like
/uploads/invoice_123.pdf - Mobile/SPA API calls: Inspect network traffic in browser DevTools or proxy
- Change parameter values (
id,user,account,role) - Access admin panels without proper role check
- Traverse directories:
../../etc/passwd - Replay or forge JWT/session tokens
Failure to properly protect sensitive data at rest or in transit using encryption, leading to exposure of passwords, credit cards, health records, PII, etc.
- Weak or missing encryption: Plain HTTP, weak SSL/TLS (old versions, bad ciphers)
- Hardcoded secrets: API keys/passwords in source code, config files, or client-side JS
- Weak hashing algorithms: MD5, SHA1 for passwords (no salt/iterations)
- Insecure key storage: Keys in code, environment variables visible in errors, or world-readable files
- Data at rest not encrypted: Databases, backups, logs storing passwords/tokens in plaintext
- HTTP traffic (no HTTPS): Intercept login forms, API calls
- Browser DevTools > Network tab: Check if sensitive data sent over HTTP
- Client-side code: View source or JS for embedded secrets/API keys
- Configuration files:
.env,config.php,web.configexposed via misconfig or GitHub - Cookie attributes: Missing
Secure,HttpOnly,SameSite - Database dumps, backups, or logs accessible via misconfig
- Error messages/stack traces revealing secrets or internal paths
- Man-in-the-middle (MITM) attacks on HTTP
- Steal API keys from JS bundles or public repos
- Crack weakly hashed passwords (MD5/SHA1 rainbow tables)
- Access plaintext database backups
Untrusted user input is sent to an interpreter (SQL, OS shell, LDAP, XML, etc.) as part of a command or query, allowing attackers to execute arbitrary code or access unauthorized data.
- Application concatenates user input directly into queries/commands without validation or parameterization.
- Special characters (quotes, semicolons, pipes) are interpreted as control characters.
- SQL Injection (SQLi): Manipulate database queries
- Command Injection (OS): Execute shell commands
- LDAP Injection: Manipulate directory queries
- XPath/XML Injection: Alter XML queries
- NoSQL Injection: Exploit JSON/MongoDB queries
- Template Injection (SSTI): Inject code into template engines
- Login forms: Username/password fields
- Search boxes: Any user-supplied search term
- URL parameters:
?id=1,?sort=name,?filter=admin - Form inputs: All text, textarea, hidden fields
- HTTP headers: User-Agent, Referer, X-Forwarded-For (less common but possible)
- File upload fields: Filename parameter
- API JSON/XML bodies: POST/PUT request payloads
- Cookie values
- SQL Injection:
' OR 1=1--,'; DROP TABLE users--,UNION SELECTto extract data - Command Injection:
; ls -la,| whoami, backticks or$()in inputs - LDAP Injection:
*)(uid=*))(|(uid=* - Template Injection:
{{7*7}},<%= system('id') %>
Flaws in the architecture, threat model, and design phase—not implementation bugs. Missing or ineffective security controls by design.
- Failure to model threats during design (no "shift-left security")
- Business logic flaws that allow unintended workflows
- Lack of input validation at design level
- No rate limiting, fraud controls, or abuse prevention
- Business logic workflows: Password reset, coupon codes, multi-step checkout
- State transitions: Order processing, account status changes
- Race conditions: Simultaneous requests exploiting time-of-check vs time-of-use
- Missing rate limits: APIs, login, registration, promo code redemption
- Trust boundaries: Client-side validation only, trusting user roles from cookies
- Architecture diagrams: Look for single points of failure, missing authentication gates
- Redeem the same coupon multiple times
- Bypass multi-factor by skipping a step in the flow
- Race two requests to withdraw money twice from one balance
- Submit negative quantity to get refunds
- Register unlimited accounts (no CAPTCHA or rate limit)
Insecure default configurations, incomplete/ad-hoc configs, open cloud storage, verbose error messages, missing patches, unused features enabled.
- Defaults are insecure (default passwords, sample accounts)
- Unnecessary services/features enabled (debug mode, directory listing)
- Missing security headers
- Unpatched systems/libraries
- Overly permissive cloud IAM or storage ACLs
- Default credentials:
admin:admin,root:root - Directory listing enabled: Browse
/uploads/,/backup/,/config/ - Error pages: Stack traces, framework version, database connection strings
- HTTP headers missing: No
X-Content-Type-Options,X-Frame-Options,Content-Security-Policy,Strict-Transport-Security - Cloud buckets: Public S3, Azure Blobs, Google Storage
- Management interfaces exposed: phpMyAdmin, Jenkins, admin panels on public IPs
- Sample/test files left in production:
test.php,phpinfo.php,.git,.env - Outdated software versions: Check response headers, error pages, or
/readme.html
- Access
/adminwith default password - Download
.gitfolder and reconstruct source code - Read
phpinfo.phpfor internal config/secrets - Enumerate cloud buckets:
https://bucketname.s3.amazonaws.com/ - Exploit known CVEs in outdated frameworks
Using libraries, frameworks, or dependencies with known vulnerabilities (often unpatched or end-of-life).
- Developers rely on third-party code (npm, PyPI, Maven, NuGet)
- Many don't track versions or CVEs
- Transitive dependencies can also be vulnerable
- Client-side libraries: Check JS files for jQuery, Bootstrap, Angular versions
- Server response headers:
X-Powered-By: PHP/5.6.40,Server: Apache/2.2.15 - Error messages/stack traces: Framework and library names/versions
/package.json,/composer.json,/requirements.txt(if exposed)- Software Composition Analysis (SCA) tools: Snyk, Dependabot, OWASP Dependency-Check
- Known CVE databases: Check versions against NVD, Exploit-DB
- Exploit known CVEs: Struts RCE, Log4Shell, old jQuery XSS
- Dependency confusion attacks (private package names hijacked on public repos)
- Supply chain attacks via compromised packages
Flaws that allow attackers to compromise passwords, keys, session tokens, or exploit implementation bugs to assume another user's identity.
- Weak password policies (no complexity/length requirements)
- Credential stuffing (reused passwords from breaches)
- Session fixation or predictable session IDs
- Missing or bypassable MFA
- Insecure password recovery (security questions, token in URL)
- Login/registration forms: Password policy, account lockout, rate limiting
- Session cookies: Predictable values, missing
HttpOnly/Secureflags - Password reset flows: Token in URL/email, no expiration, reusable tokens
- "Remember me" functionality: Weak or long-lived tokens
- Multi-factor authentication: SMS (SIM swap risk), TOTP bypass via backup codes
- API authentication: Weak API keys, OAuth misconfigurations
- Logout functionality: Session not invalidated server-side
- Brute force login (if no rate limit/CAPTCHA)
- Credential stuffing with leaked password lists
- Session hijacking via XSS or network sniffing (HTTP)
- Fixate session ID before login
- Bypass MFA by directly accessing post-login page
- Reuse password reset tokens
Code and infrastructure that rely on plugins, libraries, or modules from untrusted sources or insecure CI/CD pipelines, and applications that don't verify integrity (e.g., unsigned updates, no checksums).
- Insecure deserialization: Untrusted data reconstructed as objects (can lead to RCE)
- No integrity checks on updates/packages
- Compromised CI/CD pipeline injects malicious code
- Auto-update mechanisms fetch over HTTP or without signature verification
- Serialized data in cookies/parameters: Java serialized objects, Python pickle, PHP
unserialize() - CI/CD configs:
.gitlab-ci.yml,Jenkinsfile, GitHub Actions workflows exposed or writable - Third-party CDN scripts:
<script src="https://untrusted-cdn.com/lib.js"> - Update mechanisms: Software update URLs, package managers fetching over HTTP
- Plugins/extensions: CMS plugins (WordPress, Joomla) installed from unofficial sources
- Insecure deserialization RCE: Java ysoserial, PHP object injection
- Supply chain compromise: Inject malicious commit into CI/CD
- Man-in-the-middle auto-update (HTTP, no signature)
- Malicious NPM/PyPI package with similar name (typosquatting)
Insufficient logging, detection, monitoring, and incident response allow attackers to remain undetected, pivot to other systems, tamper with data, or extract/destroy data.
- Critical events not logged (login failures, access to sensitive data, privilege changes)
- Logs not monitored or reviewed
- Logs stored insecurely or tampered with
- No alerting on suspicious activity
- Inadequate incident response plan
- Application logs: Check if login attempts, errors, admin actions are logged
- Web server logs: Access logs (
access.log), error logs - Database logs: Query logs, failed authentication
- SIEM/centralized logging: Splunk, ELK, CloudWatch—are they configured?
- Audit trails: User actions, configuration changes, data access
- Alerting rules: Do alerts fire on repeated 401s, privilege escalation, data exfiltration?
- No logs for failed login attempts
- Successful attack goes unnoticed for weeks/months
- Logs not reviewed (no SOC/monitoring team)
- Logs stored locally and easily deleted by attacker
- No integrity protection (attacker can modify logs)
- Attacker can brute force slowly without detection
- Privilege escalation not noticed
- Data exfiltration happens silently
- Forensics impossible post-breach
A web application fetches a remote resource without validating the user-supplied URL, allowing an attacker to make the server send requests to internal systems, cloud metadata APIs, or external services.
- Application accepts a URL parameter and fetches it server-side
- No validation/whitelist of allowed hosts
- Internal network/localhost accessible from the server
- Cloud metadata endpoints (169.254.169.254) exposed
- URL parameters:
?url=,?page=,?file=,?image=,?fetch= - Webhook/callback URLs: Integrations, payment gateways, notifications
- Import/export features: Import data from URL, fetch remote config
- PDF generators: HTML-to-PDF services that fetch external resources
- Image processing: Avatar upload via URL, thumbnail generators
- API proxies or aggregators: Features that fetch data from third-party APIs
- Access internal services:
http://localhost:8080/admin - Read cloud metadata:
http://169.254.169.254/latest/meta-data/iam/security-credentials/ - Port scan internal network: Try various internal IPs/ports
- Bypass IP whitelists (app's server IP is trusted)
- Access file:// URIs:
file:///etc/passwd(if not filtered) - Exploit internal services (Redis, Memcached) with crafted payloads
| Vulnerability | Primary Locations |
|---|---|
| Broken Access Control | URLs, API endpoints, session tokens, hidden fields, direct file references |
| Cryptographic Failures | HTTP traffic, cookies, JS source, config files, error messages, DB backups |
| Injection | Forms, URL params, search boxes, HTTP headers, JSON/XML bodies, file uploads |
| Insecure Design | Business logic flows, checkout/payment, password reset, race-prone workflows |
| Security Misconfiguration | Default creds, directory listing, error pages, missing headers, exposed admin panels, cloud storage |
| Vulnerable Components | Response headers, JS libraries, stack traces, dependency files, outdated frameworks |
| Auth Failures | Login/registration, session cookies, password reset, MFA flows, "remember me" |
| Integrity Failures | Serialized data (cookies/params), CI/CD pipelines, update mechanisms, third-party CDNs |
| Logging/Monitoring Failures | Absence in logs, no SIEM, no alerting, log tampering, no audit trail |
| SSRF | URL parameters, webhooks, import/export, PDF generators, image fetchers, API proxies |