Laboratory journal. This note traces method, data flow, and mitigation. It does not include exploit instructions, payloads, or reproduction against live systems.
01
Executive Summary
Scanners collapse identity failures into one severity. Researchers separate three questions. Did the request prove an identity? Did that identity own the object? Can that object or role reach a privileged operation?
This note is the laboratory’s identity spine. It is not an exploit script for a login form.
02
Vulnerability
Authentication failure: a request is treated as a known principal without a valid proof. Authorization failure: a valid principal can act on another tenant’s object. Privilege escalation: a low-privilege principal can invoke an operation reserved for a higher role.
03
Affected Software
Multi-tenant SaaS, admin APIs, mobile backends, and any service that binds a resource ID from the client. Internal RPC that reuses the same identifiers without a service identity is in scope.
04
Attack Surface
Object IDs in paths and bodies, role fields the client can set, “view as” and impersonation features, password-reset and invite tokens, and admin export jobs.
05
Root Cause
The failed assumption is usually “the caller who knows the identifier is the owner,” or “the framework middleware already checked this object.” Root cause is a missing predicate at the object or operation, not the absence of a login page.
06
Data Flow
Always draw identity before impact. Skipping a box is how IDOR gets sold as RCE.
- → Request
- ↓ Authentication (who)
- ↓ Authorization (on this object / operation)
- ↓ Privilege boundary
- ↓ Sensitive operation or sink
07
Why It Becomes RCE
Identity bugs become RCE only when the privileged operation is itself an execution sink — plugin install, template edit, deserialization admin, or a debug console. Most remain data-access or state-change findings. Record the actual last hop.
08
Patch Analysis
Look for new ownership checks, removal of client-supplied roles, and central policy helpers. If the patch checks one route and siblings still take a raw ID, the invariant is not systemic.
09
Detection
In review: every handler that takes a resource ID must show an ownership or role check. In logs: access denials that never fire on object routes are a smell. In tests: two-tenant fixtures are mandatory.
10
Mitigation
Authorize on the server with the session’s tenant, not the client’s advertised org. Hide raw sequential IDs if they are only a convenience — but do not treat hiding as authorization. Split admin execution features onto a separate control plane.
11
Lessons Learned
Write the hop. Authentication without authorization is a half-finding. Authorization without a privilege story is how severity gets invented.
12
References
OWASP API Security — object-level and function-level authorization.
CWE-285, CWE-639, CWE-269 — after the hop is identified.
Art of Vector Security disclosure policy — /about/responsible-disclosure.
Continue
- 06 — SSRF: From URL Parser to Server-Side Impact
CVE to Real Risk
- 07 — API Authorization Vulnerability Research
CVE to Real Risk
- 10 — CVE to Exploitability: Measuring Real-World Risk
CVE to Real Risk