Provide a description of the API vulnerability class. Common categories include:
- Broken Object Level Authorization (BOLA/IDOR) - Accessing other users' resources by manipulating IDs
- Broken Authentication - Flaws in authentication mechanisms
- Broken Object Property Level Authorization - Mass assignment, excessive data exposure
- Unrestricted Resource Consumption - Missing rate limiting, resource exhaustion
- Broken Function Level Authorization - Accessing admin functions as regular user
- Server-Side Request Forgery - API making requests to attacker-controlled destinations
- Security Misconfiguration - Verbose errors, missing security headers, default credentials
Describe the specific vulnerability:
- Which API endpoint is affected
- What the expected vs actual behavior is
- What authorization/authentication bypass was achieved
- Risk: Critical / High / Medium / Low
- Difficulty to Exploit: Low / Medium / High
- Authentication Required: Yes / No
- User Interaction Required: Yes / No
- CVSS 3.1 Score: X.X
| Vulnerability Type | Typical Severity | Key Impact |
|---|---|---|
| BOLA/IDOR (data access) | High-Critical | Access to other users' data |
| Broken Authentication | Critical | Account takeover, session hijacking |
| Mass Assignment | Medium-High | Privilege escalation, data modification |
| Excessive Data Exposure | Medium-High | PII/sensitive data leakage |
| Rate Limiting (auth endpoints) | Medium-High | Brute force, credential stuffing |
| Rate Limiting (other) | Low-Medium | DoS, resource abuse |
| Security Misconfiguration | Low-High | Varies by exposure |
Base URL: https://api.target.com/v1
Affected Endpoints:
- GET /users/{id}
- POST /users/{id}/update
- DELETE /users/{id}
- BOLA/IDOR - Broken Object Level Authorization
- Broken Authentication - Auth mechanism bypass
- Broken Authorization - Function level access control
- Mass Assignment - Unexpected property modification
- Excessive Data Exposure - API returns too much data
- Rate Limiting - Missing or bypassable limits
- Injection - SQL, NoSQL, Command injection via API
- Other: ___
- Auth Type: Bearer Token / API Key / Session Cookie / OAuth / None
- User Role Tested: Regular User / Admin / Unauthenticated
- Token/Key Location: Header / Query Parameter / Body
POST /auth/login HTTP/1.1
Host: api.target.com
Content-Type: application/json
{"email": "usera@example.com", "password": "password123"}Response:
HTTP/1.1 200 OK
Content-Type: application/json
{"token": "eyJhbGciOiJIUzI1NiIs...", "user_id": 1001}GET /users/1002/profile HTTP/1.1
Host: api.target.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1002,
"email": "userb@example.com",
"phone": "+1-555-0123",
"address": "123 Private St",
"ssn": "XXX-XX-1234"
}If IDOR/BOLA, document the enumeration:
| Original Value | Modified Value | Result |
|---|---|---|
| user_id=1001 | user_id=1002 | Access granted (VULN) |
| user_id=1001 | user_id=1003 | Access granted (VULN) |
| order_id=ABC123 | order_id=ABC124 | Access granted (VULN) |
- Sequential integers (easy to enumerate)
- UUIDs (harder but may be leaked elsewhere)
- Encoded values (Base64, etc.)
- Predictable patterns
List sensitive data accessible through this vulnerability:
| Field | Sensitivity | Example |
|---|---|---|
| PII | userb@example.com | |
| Phone | PII | +1-555-0123 |
| Address | PII | 123 Private St |
| Payment Info | Financial | Last 4 digits visible |
| Internal IDs | Technical | database_id, internal refs |
- Number of users potentially affected: [estimate]
- Types of data at risk: PII, financial, authentication
- Scale: Can enumerate [X] records per [time period]
- Business impact: Compliance (GDPR, PCI), reputation, legal
- Implement proper authorization checks on all endpoints
- Verify user owns/has access to requested resource
- Add rate limiting to prevent mass enumeration
- Log and alert on suspicious access patterns
@app.route('/users/<user_id>/profile')
@require_auth
def get_profile(user_id):
current_user = get_current_user()
# Authorization check - user can only access own profile
if str(current_user.id) != user_id:
if not current_user.is_admin:
return error(403, "Access denied")
return get_user_profile(user_id)- Implement attribute-based access control (ABAC)
- Use non-enumerable identifiers (UUIDs)
- API gateway with built-in authorization
- Regular API security testing
- Implement API versioning and deprecation policy
- Add response filtering based on user permissions
- Burp Suite / OWASP ZAP
- Postman / Insomnia
- Custom scripts: [describe]
- Autorize (Burp extension for auth testing)