Join our Newsletter — 33% off our NHI Course

Why does BOLA remain such a common API security failure?

BOLA persists because many systems authenticate the caller but do not re-check whether that caller may access a specific object, record, or tenant boundary. Developers often assume the session is enough. In distributed systems, that assumption breaks quickly unless every object access is authorised on the server side.

Why This Matters for Security Teams

BOLA, or broken object level authorisation, stays common because it is easy to build an API that verifies identity yet still trusts the caller too much. Teams often protect login and token handling, then forget that every object request needs its own authorisation decision. That gap turns routine endpoints into data exposure paths, especially in multi-tenant systems, mobile back ends, and internal APIs exposed through gateways.

This is not just a coding mistake. It is a control failure that touches access design, service boundaries, logging, and testing. The NIST Cybersecurity Framework 2.0 is useful here because it reminds security teams to translate policy into enforceable access controls, not rely on application assumptions. In practice, BOLA often survives reviews because testers validate authentication paths more thoroughly than object-level decisions, and because successful requests look legitimate in logs even when the data access was not authorised. In practice, many security teams encounter BOLA only after a benign-looking API call has already exposed records across users or tenants, rather than through intentional access testing.

How It Works in Practice

At the technical level, BOLA appears when the server accepts an object identifier such as an order ID, account ID, invoice number, or document key and returns the object without checking ownership, tenancy, or delegated authority. The caller may be authenticated, but authentication alone does not prove entitlement to that specific resource. This is especially common when developers rely on hidden identifiers, client-side filtering, or front-end logic to prevent unauthorised access.

Good implementation requires the server to make the authorisation decision every time an object is requested, updated, or deleted. That means binding the authenticated principal to the object scope and checking tenant context, role, attribute, or policy before the response is constructed. OWASP’s guidance on api security remains relevant because BOLA is a recurring pattern in modern API design, and the OWASP API Security Top 10 continues to treat broken object level authorisation as a priority issue.

  • Use server-side checks on every object lookup, not only at login.
  • Enforce tenant isolation in data access layers, not just in the UI.
  • Prefer indirect references where appropriate, but never treat them as a control by themselves.
  • Test horizontal and vertical access paths for every sensitive resource type.

For organisations using gateways, microservices, or service meshes, the practical challenge is that authorisation can be fragmented across components. One service may validate the token, another may fetch the record, and neither may verify whether the record belongs to the caller. The OWASP Authorization Cheat Sheet is a useful reference for designing consistent checks, while CISA Secure Software Development Framework guidance helps teams build these checks into secure design and verification. These controls tend to break down when legacy services share object identifiers across tenants because the authorization logic becomes inconsistent between old and new code paths.

Common Variations and Edge Cases

Tighter object-level controls often increase development and testing overhead, requiring organisations to balance stronger isolation against delivery speed and legacy complexity.

There is no universal standard for exactly where BOLA checks should live in every architecture. Current guidance suggests enforcing them as close to the data access decision as possible, but the implementation may sit in application code, policy middleware, or a central service depending on the stack. The key risk is inconsistency: if one path uses role checks, another uses ownership checks, and a third trusts a gateway header, the system becomes difficult to reason about.

Edge cases are common in admin consoles, delegated access, support tooling, and machine-to-machine workflows. In those environments, a user or service may legitimately access another account’s object under constrained circumstances, but that exception must be explicit and logged. NHI-managed service accounts can also widen exposure if the service identity has broad read permissions and the application fails to re-scope those permissions per request. That is where object access, privilege design, and identity governance intersect.

For regulated environments, the problem is not only exposure but also evidence. Teams need logs that show who requested which object, under what policy, and whether access was denied or allowed. If the system cannot answer that question consistently, the control is not reliable enough for incident investigation or audit. Best practice is evolving toward stronger policy-as-code patterns, but many organisations still depend on manual review and framework checks rather than enforceable runtime authorisation.

Standards & Framework Alignment

This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.

OWASP Agentic AI Top 10, OWASP Non-Human Identity Top 10 and MITRE ATLAS address the attack and risk surface, while NIST CSF 2.0 and NIST AI RMF set the governance and control requirements practitioners need to meet.

Framework Control / Reference Relevance
NIST CSF 2.0 PR.AC BOLA is an access control failure across systems and data paths.
OWASP Agentic AI Top 10 API authorization flaws also affect tool-using agents and service workflows.
OWASP Non-Human Identity Top 10 Service identities can amplify BOLA when object access is not rechecked.
NIST AI RMF If AI systems call APIs, governance must cover their object-level access.
MITRE ATLAS AML.TA0001 Attackers can misuse valid access paths to reach unauthorized objects.

Define and enforce access policy at every object request, then verify it through testing and logging.