IDOR labs
Insecure Direct Object Reference (IDOR)
What is IDOR?
IDOR happens when an application exposes direct references to internal objects (IDs, files, slugs) without verifying that the user is allowed to access them. It's the most reported vulnerability in bug bounty programs.
Why practice IDOR?
IDOR is consistently the most reported vulnerability type in bug bounty. It's relatively easy to find once you know where to look, and bounties can be high because the impact is usually access to other users' data, PII exposure and, in many cases, account takeover.
What will you learn with the IDOR labs?
You'll learn to enumerate endpoints with incremental IDs and predictable UUID v1, fuzz headers like X-Account-Id, detect IDOR in GraphQL via field arguments, and document a PoC with two reproducible accounts to maximize triage.
Types of IDOR we cover
- Numeric ID enumeration
The resource uses incremental integers (/api/orders/123). You change the number and reach other people's resources.
- Predictable UUID
UUID v1 (timestamp + MAC) or sequential. Even though they look random, they're enumerable.
- IDOR in GraphQL
Queries take IDs as arguments. Without per-field authorization checks, you reach other people's objects.
- Mass assignment
PUT /users/me with an extra body `{role:"admin"}`. The backend accepts the field and elevates permissions.
How do you find and exploit IDOR?
A practical playbook — from recon to proof of concept.
- 1
Map objects with an identifier
Create an account, browse and note every endpoint that takes an id, uuid, filename or slug of your own. Those are the candidates.
GET /api/orders/1337 · GET /invoices/INV-1337.pdf · GET /users/42/settings - 2
Enumerate other people's IDs
Decrement/increment the identifier with your session. If it returns another user's data, it's IDOR. Automate with Burp Intruder.
GET /api/orders/1336 → another customer's data = IDOR - 3
Attack 'opaque' identifiers
UUID v1 carry timestamp+MAC and are predictable; base64 IDs usually decode to integers. Don't assume they're safe.
echo 'dXNlcjoxMzM3' | base64 -d → user:1337 - 4
Fuzz tenant headers and parameters
Many apps trust X-Account-Id, X-User-Id or ?org= without re-validating. Swap them for the victim's.
X-Account-Id: 1338 (keeping your own session cookie) - 5
Test mass assignment
Add privileged fields to your own update body. If the backend accepts them, you escalate from IDOR to takeover.
PUT /api/users/me {"email":"me@x.com","role":"admin"} - 6
Document with two accounts
For clean triage, prove it with account A reaching a resource created by account B. Reproducible in 30s.
Account A (id 100) reads GET /api/orders of account B (id 200)
Learn the theory
Academy: IDOR & Broken Access Control
Loading labs...
View in full catalog →Frequently asked questions
What is an IDOR?
Insecure Direct Object Reference is an access-control flaw where the app exposes an object identifier (id, uuid, file) and serves the resource without checking that the current user has permission over it.
How is an IDOR exploited?
You capture a request that references one of your own objects and change the identifier to another user's while keeping your session. If the server returns the foreign resource, you've accessed data that isn't yours.
How do you find IDOR in bug bounty?
Work with two accounts. List every endpoint that uses IDs and, from account A, try to reach account B's objects. Enumerate numeric IDs with Burp Intruder and also inspect base64 identifiers, UUID v1 and tenant headers.
How do you prevent IDOR?
Apply object-level authorization checks on every request (not just authentication), validate that the resource belongs to the session user, and use indirect references or unpredictable identifiers alongside server-side checks.
Difference between IDOR and Broken Access Control?
IDOR is a specific case of Broken Access Control: horizontal access to other users' objects. Broken Access Control is the umbrella that also covers vertical privilege escalation, forced browsing and function-check bypass.
Other related categories
- hunters training
- 650
- labs from real reports
- 50
- completions
- 380
- in bounties practiced
- $200,000
hunters training
labs from real reports
completions
in bounties practiced
Practice IDOR in real labs
Every IDOR lab replicates a real bug bounty report that got paid. Create your free account, start with the Academy and move to the labs whenever you want.
No card · free Academy · cancel anytime