A software company asked ioSENTRIX to test its multi-tenant web platform and the APIs behind it. In a short, focused engagement, we found more than ten issues.
Web application, backend APIs and role-based access across tenants
Access
Test accounts at several permission levels
Engagement
A short, focused engagement
Verified
All findings closed; retested by ioSENTRIX
Tested by
ioSENTRIX application security testers
Our approach
How did ioSENTRIX approach it?
Our testers held accounts at several permission levels, then replayed each API call under every role and against other customers’ records to compare what each was allowed to see.
Beyond the signature findings: settings and schedules exposed to restricted roles, an internal ID leak that enabled the credential chain, a missing function-level check, no rate limit on search, and weak input validation.
What we found
What did ioSENTRIX find?
A read-only role reached stored secrets, and tenant isolation failed too. Both are now fixed and retested.
CriticalFinding 1
Changing one number opened another customer’s records
The record endpoint checked that a user was signed in, but not which organisation the record belonged to. Record IDs were sequential and the endpoint had no rate limit, so every customer’s records could be collected by a simple script.
Business impact. One customer could read another customer’s confidential business data, breaking the platform’s core promise of isolation.
HighFinding 2
A read-only role could pull stored credentials
Access was checked on parent objects but not on their sub-resources. A user with the platform’s lowest, read-only role could request authentication settings directly and receive HTTP Basic credentials and OAuth client secrets in plain text. Webhook secrets and one-time-password seeds leaked the same way.
Business impact. Stolen credentials would let an attacker act as a customer’s own service accounts on the systems those credentials unlock.
Two paths across a boundary the platform was built to enforce
Path 1 · another tenant · Critical
1Signed inas customer A
2Record ID changedIDs are sequential
3No tenant checkrecord returned
Path 2 · read-only role · High
1Read-only loginlowest-privilege role
2Profile ID exposedby another endpoint
3Sub-resource opencredentials returned
Outcome: Data exposed (other customers’ records and stored secrets)
The impact
What changed as a result?
The worst let any signed-in user read other customers’ records by changing one number. A second let a read-only role pull stored integration credentials. The client closed every finding, and ioSENTRIX retested the fixes.
10+
findings, 5 of them Critical or High
1
read-only role was enough to reach stored credentials
2
separate paths across the tenant boundary
How many findings, and how severe?
10+ findings in total, including 1 Critical and 4 High.
Critical 1
High 4
Low
Info
What changed after the test?
Tenant checks. Every record endpoint now verifies the organisation, with rate limiting.
Role checks. Permissions are enforced on every sub-resource, not inferred from parents.
Secrets. Credentials, webhook secrets and seeds are no longer returned in plain text.
Hardening. Search is rate-limited and inputs are validated server-side.
✓Verification: All closed by the client; retested by ioSENTRIX.
Key insight
The interface hid the secrets. The API handed them over.
Lessons
Lessons for software teams
01
Check the tenant on every request
Being signed in is not permission to see a record (OWASP API1).
02
Authorise sub-resources too
A role allowed to see a profile is not allowed to see its secrets.
03
Hiding is not access control
If the API returns a value, the user has it, whatever the interface shows.
Severity rated on a five-level likelihood and impact matrix based on NIST SP 800-30 Rev. 1.
OWASP API Security Top 10 (2023): API1 Broken Object Level Authorization, API5 Broken Function Level Authorization. Cited as alignment guidance.
Next step
Running a multi-tenant platform? See a sample API test report or book a strategy session on tenant isolation.
Details in this case study are anonymised and generalised. Methods that could harm other products are withheld.
FAQ
Frequently asked questions
What did ioSENTRIX test in this case study?
A software company asked ioSENTRIX to test its multi-tenant web platform and the APIs behind it. In a short, focused engagement, we found more than ten issues.
What was the most serious issue?
Changing one number opened another customer’s records. One customer could read another customer’s confidential business data, breaking the platform’s core promise of isolation.
How many findings were there, and how severe?
10+ findings in total, including 1 Critical and 4 High.
Were the fixes verified?
All closed by the client; retested by ioSENTRIX.
Which ioSENTRIX service does this case study cover?
Web application and API penetration testing, delivered by the ioSENTRIX application security testers.
How to get started
Ready to strengthen your security? Fill out our quick form, and a cybersecurity expert will reach out to discuss your needs and next steps.