Insecure Direct Object Reference IDOR
API AUTHORIZATION SECURITY

Insecure Direct
Object Reference
IDOR Vulnerabilities

Insecure Direct Object Reference vulnerabilities allow attackers to access files, records, notes, invoices, accounts, tenants, tickets, and API objects they should not control by manipulating object identifiers.
Updated May 2026
Web Application + API Security
Redbot Security Research

Insecure Direct Object Reference, commonly called IDOR, is a web application and API vulnerability that occurs when an application exposes a direct reference to an internal object and fails to verify whether the current user is authorized to access that object.

In practical terms, IDOR allows attackers to change an identifier such as a note ID, user ID, file ID, invoice ID, account ID, ticket ID, order ID, or tenant ID and access data or actions that belong to another user, customer, workspace, or organization.

IDOR is not simply a problem with predictable numbers in URLs. It is an authorization failure. Even when identifiers are difficult to guess, the application must still enforce server-side object-level access control for every request.

Redbot Security validates IDOR, BOLA, broken access control, tenant isolation, and API authorization flaws through web application and API penetration testing, API security testing and compliance validation, BOLA API security testing, cloud security testing, and AI / LLM security testing.

01

What Is Insecure Direct Object Reference?

Insecure Direct Object Reference is a vulnerability where an application exposes a reference to an internal object and does not properly check whether the user making the request is allowed to access that object.

These object references can appear in URLs, query parameters, JSON request bodies, form fields, GraphQL queries, API routes, file download links, mobile app traffic, or backend API calls.

A common example is an application that allows a user to view a private note by visiting a URL containing a note identifier. If the user can change that identifier and view another user’s note, the application is vulnerable to IDOR.

IDOR is an authorization failure.

The issue is not only that an object ID is visible. The issue is that the server fails to confirm whether the current user should be allowed to access that exact object.

02

Example of Vulnerable PHP Code with IDOR

Consider a hypothetical web application where users can view their private notes by providing the corresponding note ID in the URL. Below is a simplified PHP code snippet that demonstrates a vulnerable implementation susceptible to IDOR:

Figure 1 vulnerable IDOR PHP code
Figure 1: Vulnerable Code

In this example, the application retrieves the user’s note directly from the database using the $noteId provided in the URL parameter.

However, the code lacks proper authorization checks to ensure that the current user has the right to access the requested note.

As a result, an attacker can manipulate the note_id parameter in the URL to view other users’ notes by guessing, incrementing, or discovering valid note IDs.

A more secure implementation of the code seen in Figure 1 is:

Figure 2 less vulnerable IDOR PHP code
Figure 2: Less Vulnerable Code

The safer approach validates ownership before returning the note. The application should confirm that the requested object belongs to the authenticated user, or that the user has explicit permission to access it.

03

How IDOR Attacks Work

IDOR attacks usually start with a legitimate request. The attacker logs in, views an object they are allowed to access, captures the request, and changes the object identifier to reference another user’s object.

If the application returns the other user’s data or performs an action against that object, the endpoint is vulnerable.

Attack Step What the Attacker Does Security Failure
Authenticate Logs in with a valid account or session The attacker is a legitimate user
Find Object Reference Identifies a parameter such as note_id, file_id, account_id, invoice_id, or ticket_id The application exposes direct object references
Modify Identifier Changes the object ID to another value The request is user-controllable
Access Object Receives another user’s data or performs an unauthorized action Server-side object authorization is missing or weak
Scale the Attack Enumerates IDs, automates requests, or tests other object types Monitoring, rate limiting, and authorization controls fail to stop abuse

IDOR testing requires more than checking whether numbers are sequential. Effective validation compares access across users, roles, tenants, object ownership states, workflows, and backend authorization rules.

04

IDOR vs BOLA: What Is the Difference?

IDOR and Broken Object Level Authorization, or BOLA, are closely related. In modern API security, many vulnerabilities that were historically called IDOR are now discussed as object-level authorization failures.

IDOR describes the exposure and abuse of direct object references. BOLA emphasizes the underlying API authorization failure: the system does not verify whether the current user is allowed to access the requested object.

Category IDOR BOLA
Primary Focus Direct object references exposed to users Object-level authorization failure in APIs
Common Location URLs, query parameters, forms, file links, API requests REST APIs, GraphQL APIs, mobile APIs, SaaS APIs, backend services
Example User changes note_id and views another user’s note User changes account_id and retrieves another tenant’s records
Root Cause Object reference is trusted without ownership validation API fails to enforce authorization for the requested object
Modern Framing Classic web app vulnerability term Modern API security term used in OWASP API Security guidance

For a deeper API-specific breakdown, review Broken Object Level Authorization BOLA API Security.

05

Common IDOR Examples

IDOR can appear anywhere an application references objects directly and fails to enforce authorization on the server side.

A user changes a note ID and views another user’s private note.
A customer changes an invoice ID and downloads another customer’s invoice.
A user changes a file ID and accesses another user’s document.
A tenant changes an organization ID and lists another workspace’s users.
A patient changes a record ID and views another patient’s medical information.
A support portal user changes a ticket ID and reads another customer’s ticket.
A mobile API accepts account IDs without validating account ownership.
A GraphQL query exposes nested objects outside the user’s permission scope.

The highest-risk IDOR vulnerabilities usually involve sensitive data, financial records, personal information, protected health information, tenant boundaries, administrative actions, or workflow-changing operations.

06

Why IDOR Is Dangerous

IDOR is dangerous because attackers often do not need advanced exploits to abuse it. A valid account, a browser, and a modified object identifier may be enough to access restricted data.

IDOR can also be difficult to detect because the requests may look normal. The attacker is authenticated, the endpoint exists, and the server returns a standard response. Without strong authorization logging and anomaly detection, abuse may go unnoticed.

Impact Area IDOR Risk
Data Exposure Unauthorized access to notes, invoices, files, account records, support tickets, or personal data
Account Manipulation Attackers modify another user’s profile, settings, preferences, or linked resources
Tenant Isolation Failure One customer, workspace, or organization accesses another tenant’s data
Compliance Exposure Regulated data such as payment, healthcare, financial, or personal information is exposed
Workflow Abuse Attackers act on records, approvals, tickets, orders, refunds, or transactions they do not own
Reputation Damage Customers lose trust when cross-account or cross-tenant data exposure occurs
IDOR can create silent, high-volume data exposure.

Once attackers find a vulnerable object reference, they may enumerate IDs or automate requests to access many records.

07

IDOR in SaaS, Cloud, and AI Systems

Modern IDOR risk extends beyond traditional web pages. SaaS platforms, cloud applications, APIs, AI agents, RAG systems, and workflow tools frequently rely on object identifiers to retrieve documents, records, tickets, files, projects, users, and business objects.

When these systems fail to enforce object-level authorization, the impact can move beyond a single page view into cross-tenant data exposure, AI data leakage, cloud resource access, or automated workflow abuse.

Environment IDOR Risk
SaaS Applications Users manipulate workspace, organization, project, invoice, report, or file identifiers
Cloud APIs Object references expose storage resources, logs, snapshots, assets, or tenant data
RAG Systems AI retrieval APIs return documents outside the user’s role, tenant, or ownership boundary
AI Agents Agents call tools that retrieve or modify unauthorized objects through weak API checks
Workflow Automation Approval, ticket, order, refund, or case actions operate on unauthorized object IDs

Organizations deploying AI-connected APIs should combine application testing with AI and LLM security testing, RAG testing, and prompt injection testing.

08

How to Test for IDOR

Testing for IDOR requires multiple users, roles, object ownership states, and authorization contexts. The goal is to verify whether the server enforces access control for every object reference.

Effective testing should include read, write, delete, export, share, approve, download, and administrative actions, because IDOR can affect both data access and state-changing operations.

Create two or more users with different ownership of notes, files, invoices, records, or objects.
Capture requests that include object identifiers in URLs, parameters, JSON bodies, or API routes.
Replace one user’s object ID with another user’s object ID.
Test across roles such as standard user, manager, administrator, external user, and service account.
Validate tenant isolation across customers, workspaces, organizations, and accounts.
Test nested objects, bulk endpoints, search APIs, GraphQL queries, exports, and file downloads.
Confirm whether unauthorized access is blocked server-side and logged properly.
Retest after remediation to confirm object-level authorization is consistently enforced.

Automated scanners may identify simple IDOR patterns, but manual testing is usually required because testers must understand ownership, business rules, tenant boundaries, and the impact of each object type.

For a broader comparison, review manual penetration testing vs automated testing.

09

How to Prevent IDOR

Preventing IDOR requires consistent server-side authorization checks for every object reference. Applications must verify that the authenticated user is allowed to access or modify the exact object requested.

Using UUIDs or unpredictable identifiers can make guessing harder, but it does not fix IDOR. Authorization must still be enforced for every request.

Control Security Objective
Server-Side Authorization Verify object ownership and permissions on every request
Deny by Default Reject access unless the user is explicitly authorized
Tenant-Aware Queries Ensure every object lookup is constrained to the user’s tenant or organization
Centralized Access Control Reduce inconsistent authorization checks across endpoints and services
Scoped API Tokens Limit tokens and service accounts to specific users, objects, tenants, or actions
Audit Logging Track object access anomalies, authorization failures, and enumeration attempts
Regression Testing Continuously validate object-level authorization as APIs and workflows change
Unpredictable IDs are not access control.

Random identifiers may reduce enumeration, but only authorization checks can prove that a user is allowed to access the requested object.

10

How Redbot Tests IDOR and Object-Level Authorization

Redbot Security tests IDOR by validating whether users can access, modify, delete, export, share, approve, download, or act on objects outside their authorization scope.

The assessment includes web application requests, REST APIs, GraphQL APIs, mobile APIs, file downloads, SaaS workflows, cloud integrations, tenant boundaries, service accounts, and AI-connected API paths when relevant.

Testing Area Validation Objective
Object Ownership Confirm users can only access objects they own or are explicitly allowed to use
Tenant Isolation Validate separation between customers, workspaces, organizations, accounts, or teams
Role-Based Access Test differences between users, managers, administrators, external users, and service accounts
Workflow Actions Test read, update, delete, export, share, approve, download, and administrative object actions
Cloud and SaaS APIs Evaluate object access across integrations, OAuth scopes, service accounts, and cloud resources
AI-Connected Systems Validate whether AI agents, RAG systems, or tools can retrieve unauthorized objects

Redbot delivers practical exploit evidence, remediation guidance, and retesting support for organizations that need object-level authorization validation across modern application, API, cloud, SaaS, and AI environments.

IDOR testing proves whether object-level authorization actually works.

Mature web and API security requires validating object access across users, roles, tenants, workflows, cloud integrations, and AI-connected systems under realistic attacker conditions.

What is Insecure Direct Object Reference?

Insecure Direct Object Reference is a vulnerability where an application exposes a direct reference to an internal object and fails to verify whether the current user is authorized to access that object.

Is IDOR an authentication issue?

No. IDOR is an authorization issue. The attacker may be properly authenticated, but the application fails to verify whether that user should access the specific object requested.

How do attackers exploit IDOR?

Attackers exploit IDOR by changing object identifiers such as note IDs, user IDs, file IDs, invoice IDs, account IDs, ticket IDs, order IDs, or tenant IDs in requests.

What is the difference between IDOR and BOLA?

IDOR describes the abuse of exposed direct object references. BOLA describes the underlying object-level authorization failure, especially in APIs. Many modern IDOR issues are also BOLA issues.

Do UUIDs prevent IDOR?

No. UUIDs make object identifiers harder to guess, but they do not replace authorization checks. The server must still verify that the user is allowed to access the requested object.

Can automated scanners find IDOR?

Automated scanners may find simple IDOR patterns, but most IDOR testing requires manual validation across users, roles, tenants, object ownership states, and business workflows.

How does Redbot Security test for IDOR?

Redbot Security tests IDOR by validating object access across multiple users, roles, tenants, object ownership states, API tokens, cloud integrations, SaaS workflows, and AI-connected API paths.