Tenant boundaries
A tenant id on an export, a job, or a file is a label until a second tenant can read the object. Test membership on the worker that builds the file, not only on the request that queued it.
Skill: Access control and tenant boundaries
Ask: Can account A read or change an object that belongs to account B, including a job, export, or leftover endpoint?
Stop: One object you own is denied to the other account, and one object you should not own is not returned.
Practice the class in the browser: PortSwigger Web Security Academy. The lab is theirs. This page is the stop condition and the disclosures.
Checklists
- Tenant isolation - A tenant is a boundary, not a label in the UI. Replay objects you own across two organisations and record which identifier the server actually trusts.
Disclosures
No public card yet.
Playbooks
- Tenant isolation - A tenant is the boundary between organizations, not a label in the UI. The test is two organizations you are allowed to join, and which identifier the server actually trusts.
Tools
- Burp Suite - The industry-standard intercepting proxy for manual web testing. Community edition is free; Pro adds the active scanner and automation.
- Caido - A modern, lightweight web proxy and pentest toolkit - a fast alternative to Burp with a clean workflow and scriptable automation.
Questions
The tenant id is a UUID. Am I done?
No. UUIDs leak in exports, invites, and object paths. The test is two tenants you are allowed to join, and whether the worker re-checks membership.
Is a tenant miss the same as a user object swap?
Same family, different boundary. A user who can read a teammate is one bug. A user who can read another organization is the tenant bug. Report the boundary you actually crossed.
This page is the linked pack hunt_brief("tenant") returns on the MCP connector. Authorized testing only.