Security teams should test every object lookup and state-changing endpoint for authorization failures, not just authentication. The key check is whether a caller can swap an object identifier and still reach another user’s data. Use automated and manual testing, then block release when access checks do not verify ownership or privilege at the object level.
What to test on API endpoints before release
BOLA testing should start with the object itself, not with the login flow. Every endpoint that returns, updates, deletes, or references a record should be checked for object-level access control, including direct object references in paths, query parameters, and request bodies. OWASP API Security Top 10 treats broken object-level authorisation as a core API risk because authentication can succeed while ownership checks still fail.
The practical test is simple: use one account, capture a valid request, then change the object identifier to a record owned by another user, tenant, or role. Repeat the same test for read and write actions, because a system can block viewing but still allow update, delete, or workflow actions on the same object. Where the API uses nested resources or composite identifiers, test each path segment and each exposed object field that could influence the final access decision.
Testing should also cover indirect exposure paths, not just the primary resource fetch. Download links, search endpoints, pagination cursors, export jobs, status endpoints, and “related items” calls often expose the same object through a different route. If the API relies on a back-end service, test whether the service call preserves the caller’s authority or simply trusts an upstream token without re-checking object ownership.
How to prove the authorization check is really object-level
A good BOLA test does not stop at “403 or not.” It verifies that the server decides access based on the caller’s rights to that specific object, rather than on a predictable identifier, client-side filtering, or a generic role check. That means testing same-role users with different ownership, privileged users with restricted scopes, and multi-tenant records where the tenant boundary should be enforced consistently across every lookup.
Use both automated and manual checks. Automated tests are good for enumerating endpoints and replaying modified identifiers at scale, while manual probing is better for edge cases such as soft-deleted records, foreign-key lookups, bulk operations, and chained requests that inherit an object from an earlier step. For APIs that expose list endpoints and detail endpoints, verify that the list view does not leak identifiers that the detail view would incorrectly accept later.
For object-level testing, the expected result should be deterministic and boring: the server either returns only the caller’s authorised object, or it denies the request in a way that does not reveal whether the object exists. Any behaviour that changes based on ID format, guessable sequencing, or application UI state is a sign that the release gate is too weak.
Where release failures usually come from
BOLA usually appears when developers test authentication and miss authorization. A valid token proves who the caller is, but it does not prove the caller may access a specific invoice, file, project, order, or account. Risk increases when object ownership is assumed from the front end, when access checks happen only on the first request in a flow, or when background jobs and batch endpoints reuse the same service path without re-evaluating authority.
That is why release testing should include negative cases that mirror real abuse paths, not just happy-path API checks. If a caller can swap an identifier and receive another user’s data, the defect is already exploitable. If a caller can trigger state changes on another object, the issue is often more severe because it can alter records, permissions, financial data, or workflow outcomes instead of merely exposing them.
The testing standard becomes stronger when paired with an explicit authorisation model. Authorisation Models Guide is useful here because BOLA is often a sign that the API has no reliable object-level policy, or that the policy exists only in business logic rather than at the access boundary.
Risk and Threat Considerations
BOLA is dangerous because it turns a normal API caller into an unauthorized reader or actor with very little effort. Once an attacker finds a predictable object identifier, they can often enumerate adjacent records, pivot across tenants, or abuse state-changing endpoints to modify data they do not own.
Failure mechanism: The API authenticates the caller but fails to bind the request to the caller’s rights over the specific object, so a swapped identifier is still accepted.
Impact: The result can be data disclosure, unauthorized updates, cross-tenant access, account abuse, or a broader compromise of business workflows that depend on object integrity.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP API Security Top 10 addresses the attack and risk surface, while NIST SP 800-53 Rev 5, OWASP ASVS and CIS Controls v8 set the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| OWASP API Security Top 10 | API1 — Broken Object Level Authorization | BOLA testing is the exact API security issue being asked about. |
| Recommendation — Test every object-bearing endpoint for swapped identifiers and block release on object-level access failures. | ||
| NIST SP 800-53 Rev 5 | AC-3 — Access Enforcement | Object-level checks are an access enforcement problem at the API boundary. |
| AU-6 — Audit Review, Analysis, and Reporting | Failed BOLA tests should be visible in logging and review so gaps are detectable before release. | |
| Recommendation — Enforce access decisions on each object lookup and state-changing request. Review API access logs for unauthorized object access attempts and test-case failures. | ||
| OWASP ASVS | V8 — Authorization | ASVS authorization verification directly supports pre-release testing of object-level access control. |
| Recommendation — Verify authorization on every sensitive object reference and reject client-controlled privilege assumptions. | ||
| CIS Controls v8 | CIS-6 — Access Control Management | Pre-release object authorization testing is part of access control management and validation. |
| Recommendation — Validate that only approved users and services can access each protected object. | ||
Practitioner Guidance
What to verify: Before release, require at least one negative test for every object-bearing endpoint, including read, update, delete, and list-to-detail transitions. The test should prove that changing the object identifier does not bypass ownership or privilege checks.
Decision rule: If the API can reach another user’s object with the same valid token, fail the release even when the request is otherwise authenticated. Authentication success is not a pass condition for BOLA.
Practitioner takeaway: Treat object-level authorization as a release blocker, because BOLA is usually found where teams test “who are you?” but not “which object are you allowed to touch?”
Related resources from NHI Mgmt Group
- How should security teams test LLM agents that can call internal APIs for broken object level authorization risks?
- How should security teams prevent broken object-level authorization in APIs?
- How should security teams run an API scanner in a DevSecOps workflow so they catch risky endpoints before release?
- How should security teams test an authorization API locally before integrating it into an application stack?