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. 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. 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. 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. 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. 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. 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

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.

hunters training
650

hunters training

labs from real reports
50

labs from real reports

completions
380

completions

in bounties practiced
$200,000

in bounties practiced

40 flags captured this week·Real reports from HackerOne · Bugcrowd · Intigriti·No commitment·Free Academy
BBLabs · bug bounty training

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