Example 1 of 4 · Synthetic
Penetration-test finding: object-level access control
Illustrative finding PT-001 for a fictional multi-tenant document API.
Synthetic demonstration · Finding PT-001 · Example severity: High
Engagement boundaries
Fictional target: sample.invalid. Example assessment authorized for test tenants A and B, an isolated staging API and synthetic records only. Production infrastructure, user data, denial-of-service testing and unrelated hosts are out of scope.
- Test window and points of contact agreed in writing
- Two seeded test accounts with different tenants
- Data minimization and immediate stop conditions in the rules of engagement
Observation and impact
In the fictional handler GET /api/documents/{documentId}, the caller is authenticated, but the record is fetched using only the client-supplied identifier. The service does not check the document's tenant or allowed actions before returning it. An attacker who learns another document ID could read data outside the authorized tenant. The severity assumes the endpoint exposes sensitive records; real severity depends on exploitability and impact.
Evidence package
A report would include redacted request IDs, two synthetic principal identities, a test-owned document identifier, expected response (403 or privacy-preserving 404), actual unauthorized 200, timestamp and environment. No credentials or third-party data would be reproduced in the deliverable.
- Expected: tenant A cannot access tenant B document
- Illustrative observed result: 200 OK with a synthetic tenant B record
- Evidence confidence: demonstrated in the fictional example, not verified against a real customer
Remediation and retest
Move authorization into the object read path: derive the principal and tenant from server-verified identity, filter the query by authorized tenant, and check the action policy before returning or mutating a record. Add cross-tenant read/write/delete tests, audit sibling endpoints and batch exports, and verify the corrected invariant cannot be bypassed by changing path or body IDs.
- Owner: API engineering
- Priority: urgent if confirmed on sensitive production records
- Retest gate: same synthetic cross-tenant request consistently denied and regression tests green
