Broken object-level authorization (BOLA / IDOR)
An actor can access another owner’s protected object by supplying its identifier.
Candidate CWE: CWE-639
Test hypothesis#
Create private O1 as A and O2 as B. Replay the O1 request with B’s credentials, retaining method and body; confirm B’s own O2 request succeeds. Test known child/export identifiers separately.
Evidence required#
A’s unique marker is returned to B, or A independently observes B’s unauthorized change. Preserve object privacy, both identities, the exact changed header or identifier, and cleanup.
Rule out false positives#
A UUID appearing in a response, a public object, intentional sharing, or HTTP 200 without protected data is not BOLA.
Playbook and command references#
- Object, function, and property authorization — Turn identities, tenants, objects, roles, and lifecycle transitions into a reproducible permission matrix.
- REST, GraphQL, gRPC, WebSocket, and SSE permission parity — Carry the same permission invariant across protocols, nested fields, streams, and alternate API versions.
Find the associated command snippets
Referenced by these target playbooks#
Report checklist#
- Capture the affected version, configuration, identities, and object ownership.
- Preserve a valid baseline and a negative control.
- Reproduce the forbidden data access, action, or state change on controlled fixtures.
- Explain the intended security rule and why the observed behavior violates it.
- State prerequisites, uncertainty, cleanup, and the smallest demonstrated impact.
Conditional ATT&CK mapping#
No direct ATT&CK mapping selected. Record the weakness and demonstrated impact without forcing an adversary-behavior classification. See the mapping guide.