Most IDOR findings start with a small experiment. You are looking at a URL such as /invoice/1043, you change the number, and the page loads — because the server trusted a value it should have verified. That simplicity is why IDOR is everywhere, and why so many reports get closed as informational when they deserved a payout.
Insecure Direct Object Reference is an authorization failure, not an input validation one. The application takes a reference to an object — a numeric ID, a UUID, a filename, a tenant key — straight from your request and returns the underlying record without checking whether you are allowed to have it.
Two conditions have to line up for it to be exploitable. The reference must be guessable or obtainable, and the server must skip the ownership check. Only the second one is the bug. Predictable IDs behind a working server-side check are just a design choice, while an unguessable UUID with no check is still an IDOR — those identifiers leak constantly in exports, emails, and accounts you legitimately control.
Keep horizontal and vertical access separate. IDOR usually means user A reaches user B's object at the same privilege level. A normal user calling an admin function is a function-level access control issue. Programs sometimes bucket them together, but your report should be precise about which one you found.
Anywhere a user refers to a thing they own, there is a place to look.
Tools speed this up, but the reasoning is manual. This order keeps you honest.
Burp Suite handles most of the heavy lifting. Repeater for manual swaps, Comparer for spotting the two-byte difference between your record and someone else's, Match and Replace for rewriting IDs on the fly. Autorize is the one extension worth installing on day one: it replays your traffic with a lower-privileged session and flags responses that look identical, which is exactly the signal you want.
Once an issue is confirmed, a short script using curl or requests lets you walk a range of IDs and show the real scope in your report. Keep the enumeration minimal. Three or four objects prove the point; ten thousand prove you did not read the program's rules and will get your account suspended.
A response that returns your own data is not a finding, and triagers see that mistake daily. Confirm the record belongs to the other account by comparing names, emails, addresses, or any field your second account cannot see. Screenshot both sides with the requests visible.
Then ask what an attacker would actually do with it. Reading a support ticket is minor. Reading a password reset token, an invoice with a full billing address, or a private document store is not. An IDOR that reaches a write or delete endpoint is worse again. If the leaked field feeds another flow — an email address enabling account enumeration and reset abuse — explain the chain, but mark it clearly as a chain rather than the primary bug.
Next time you see an identifier in a request, do three things: drop the request into Repeater, send it with your second account, then change the number and send it again. That thirty-second habit finds more real bugs than any scanner will. Keep notes on every ID you encounter; endpoints you cannot test today often become testable once you have a second account or a leaked reference.
Test only accounts you own and stay inside the program's scope. If you are unsure whether an action is permitted, ask the program before you try it. An IDOR is a small bug to find and a serious one to report well, so do the boring part properly: prove the ownership boundary was crossed, show the impact plainly, and hand the team a fix they can ship today.
Photo: Tumisu / Pixabay
CVSS turns a vague severity opinion into a defensible number. Here is how the metrics work, how to build a vector,...
A practical roadmap for leaving a salaried IT security role for full-time bug bounty, covering skills, track record,...
A step-by-step build of a Subfinder, httpx and Nuclei recon pipeline — install, script, filter the noise, and...
Notes from the front lines of bug hunting.
Read More© 2026 Bug Hunter Journal · Theme by QuomodoTheme