IDOR vulnerability testing that proves object access
IDOR vulnerability testing asks whether one authenticated principal can access or modify an object that belongs to another user, tenant, role, or business context. The useful proof connects a real test identity, a protected object, the request that crossed the boundary, and the resulting data or state change.
Create isolated test users, tenants, and objects; capture normal authorized behavior; repeat the same operation with an identifier the second principal should not control; prove unauthorized read or write impact; and retest the original sequence after remediation.

What is IDOR vulnerability testing?
IDOR vulnerability testing evaluates insecure direct object references: requests that identify a record, file, account, order, message, or other object and fail to enforce authorization for that specific object. Authentication can be valid while the caller is still not allowed to access the object.
The issue may appear through numeric identifiers, UUIDs, slugs, filenames, relationship fields, GraphQL node IDs, or hidden API parameters. Obscure identifiers reduce guessing but do not replace authorization. The test must prove what a second principal can actually read or change.
IDOR is also a form of broken object-level authorization, often called BOLA in API security. It is especially common when list, detail, update, delete, export, and nested-resource endpoints implement authorization differently.
What types of IDOR vulnerabilities should be tested?
Test read, write, delete, file, API, and multi-step object flows. A detail endpoint may be protected while an export endpoint leaks the same record. An update endpoint may ignore ownership fields even if it validates the object ID. A workflow may authorize the first step but not the state transition that follows.
Compare every operation across roles and tenants. The same object should be tested through list, detail, update, delete, nested relationships, bulk actions, and any administrative interface. Search and autocomplete endpoints can also leak object titles or metadata.
| Type | Test question | Impact evidence |
|---|---|---|
| Read IDOR | Can one principal read another principal’s object? | Returned protected data and owner comparison |
| Write IDOR | Can the caller change a record they do not own? | Original state, unauthorized update, and resulting state |
| File IDOR | Can the caller retrieve or replace another file reference? | File identifier, access result, and ownership evidence |
| API IDOR | Does the API authorize the object rather than only the route? | Role, token, object, and response or state change |
| Workflow IDOR | Can the caller reference another object during a state transition? | Request sequence and unauthorized business effect |
How do you test IDOR vulnerabilities safely?
Create two isolated principals and at least one synthetic object owned by each. Record the normal authorized request for principal A, then repeat the same operation as principal B against A’s object. Use test data only, and stop before bulk extraction or changes that cannot be reversed.
Capture the browser or API baseline first. Note the object owner, role, tenant, token scope, endpoint, request body, expected permission, and response. Then alter only the object reference or relationship needed to test the authorization boundary.
An IDOR finding needs impact. A changed response status is a clue, but the proof should show protected data, a state change, a file operation, or another security consequence. If the result is ambiguous, separate the hypothesis from a confirmed vulnerability.
- 01Create
Provision isolated users, tenants, roles, and owned test objects.
- 02Baseline
Record each principal’s normal access and expected authorization policy.
- 03Swap
Reuse or alter the object reference with a principal that should not control it.
- 04Prove
Show the unauthorized data, file, action, or state transition.
- 05Review
Confirm ownership and impact without relying on a response difference alone.
- 06Retest
Repeat the same identity and object sequence after remediation.
How should teams manage IDOR test data and access?
Use synthetic tenants and records that are visibly reserved for security testing. Keep credentials and objects isolated from real customers. Define cleanup steps and destructive-action limits before changing a record.
Bulk enumeration, exporting protected data, modifying real accounts, and testing across live tenants should require explicit approval. The goal is to prove access with the minimum data and change needed, not to maximize the amount of information retrieved.
Rate limits protect the application and prevent the test from becoming a data-harvesting operation. Store sensitive evidence in a controlled location and redact report copies while retaining what the remediation team needs to reproduce the issue.
What evidence should an IDOR finding preserve?
Preserve the endpoint, method, caller identity, role, tenant, token scope, object owner, object identifier, preconditions, request body, raw response, and resulting state. For a multi-request exploit, show the sequence that created or selected the object used in the unauthorized step.
The evidence should make ownership obvious. Show that the affected object belongs to a different principal and that the caller’s policy does not permit the observed action. Separate metadata exposure from record disclosure and read access from write impact.
Retest the exact object relationship after remediation, then check adjacent list, nested, export, and bulk routes. A fix that blocks one ID but leaves the same object retrieval available through another route is incomplete.
How should IDOR vulnerabilities be fixed?
Fix authorization at the object and operation layer on the server. Do not rely on hidden fields, unguessable identifiers, client-side checks, route names, or the fact that an object was loaded earlier in the browser. Every read, write, delete, export, and nested relationship must verify the caller’s permission for that object.
Centralize policy where possible, then test the effective decision for each role and ownership relationship. Prefer deny-by-default and explicit resource ownership or tenant checks. Log denied and allowed object authorization decisions so the team can investigate anomalies.
After the fix, test the original identifier and additional objects of the same type. Check list and search surfaces for metadata leakage, and verify that administrative or support tools do not bypass the same boundary inadvertently.
Add the reproduction sequence to regression testing. The test should authenticate as the second principal, request the protected object, and fail with the intended authorization response. Run the check after related authorization or data-model changes, because a later route or resolver can reintroduce the same object boundary failure.
What makes IDOR testing credible?
Credible IDOR testing uses isolated identities and objects, proves the authorization boundary that failed, and preserves evidence of unauthorized read or write impact. It does not treat an odd response code or an unguessable identifier as proof by itself.
ARTEX can coordinate authorized web and API workers while keeping identities, traffic, object relationships, findings, and retests attached to the task. Start with one high-value object workflow and expand after the evidence review is reliable.
Repeat object-authorization checks after route, schema, resolver, or tenancy changes. The regression risk is concentrated where one endpoint or data path applies a different authorization decision from its siblings. Treat the object-level policy as a tested security boundary, not an implementation detail.
Frequently asked questions
What is an IDOR vulnerability?
An IDOR vulnerability lets an authenticated caller access or modify an object outside their permitted ownership, tenant, role, or business context.
Are UUIDs enough to prevent IDOR?
No. Hard-to-guess identifiers can reduce discovery but do not enforce authorization. The server must check permission for the specific object and action.
How is IDOR different from BOLA?
IDOR is the broader object-reference flaw, while BOLA is the API security term for broken object-level authorization. The testing evidence is similar.
What test accounts are needed for IDOR testing?
Use at least two isolated users and separate tenants or ownership contexts, with synthetic objects and credentials dedicated to the test.
How should an IDOR fix be verified?
Repeat the same role, object, and request sequence, then test adjacent list, detail, update, export, and nested-resource paths for the same authorization failure.
References and review notes
Start with source. Test with authorization.
Review the public ARTEX repository, run it in an owned lab, and keep human approval on actions that can change a target.
ARTEX