Broken Access Control
Broken access control occurs when applications fail to properly enforce what authenticated users are allowed to do, enabling privilege escalation and unauthorized data access. You will learn horizontal and vertical privilege escalation, insecure direct object references (IDOR), and how to systematically test access control throughout a web application. IDOR vulnerabilities are among the highest-paid findings in bug bounty programs.
Learning Objectives — Deep Dive
Each objective below is broken down into plain English so you know exactly what you are learning, why it matters, and what you will be able to do when you are done. Mark each one complete as you work through the lesson.
Create two test accounts
In DVWA or a test application that supports user accounts, register two separate accounts: user_a@test.com and user_b@test.com, each with their own password. Create a resource (such as a profile, document, or order) while logged in as user A and note the URL or ID of that resource. The goal is to test whether user B can access or modify user A's resource by manipulating the identifier in the request — this is the core of an Insecure Direct Object Reference (IDOR) vulnerability.
Log in as user A and capture requests
Log in as user A and navigate to the resource you created. Open Burp Suite's Proxy and intercept the HTTP request that retrieves or modifies the resource. Examine the request carefully — look for any parameter that contains a user ID, resource ID, account number, or filename that identifies the specific object being accessed. Common locations include URL path parameters (/api/users/123/profile), query string parameters (?id=456), and POST body parameters. Note the exact parameter name and value for use in the next step.
Identify object references
Analyze the captured request to identify all direct object references — any value that maps to a specific record in the database or file on the server. Common patterns include sequential integers (id=1, id=2), UUIDs, usernames, email addresses, and filenames. Sequential integers are the easiest to exploit because you can simply increment or decrement the value to access adjacent records. UUIDs are harder to guess but are still vulnerable if the application does not enforce authorization checks — guessing is not the only attack vector.
Replace with user B identifiers
Log out of user A and log in as user B. Replay the captured request in Burp Suite's Repeater, replacing user A's resource ID with user B's credentials in the Cookie or Authorization header, but keeping user A's resource ID in the parameter. If the application returns user A's data to user B, you have confirmed an IDOR vulnerability — the application is authorizing access based on the object ID alone, without verifying that the requesting user owns or has permission to access that object. This is a broken access control vulnerability (OWASP A01:2021).