Object-level auth
Change the ID, get the other tenant. Horizontal and vertical. UUID is not access control.
Coverage
Change the ID, get the other tenant. Horizontal and vertical. UUID is not access control.
Admin mutations reachable as a user. Hidden verbs. Verb tampering.
JWT alg confusion, long-lived refresh, missing audience, leaked in logs.
Introspection in prod, batching, nested queries, binding extra fields into privileged updates.
UK procurement teams have learned to ignore ‘possible IDOR’. The report they keep is the one with two sessions, two responses, and a screenshot of the other organisation’s invoice.
Why it matters
BOLA — an endpoint that checks you are authenticated but not whether this record is yours — remains the most common serious finding in API testing, and it is invisible to scanners because they have no concept of ownership. We test it the only way it can be tested: two authenticated identities, and every object identifier the first one was never meant to know.
Introspection left enabled in production, deeply nested queries with no depth or complexity limit, aliases used to defeat rate limiting, authorisation enforced at the resolver for some fields and nowhere for others, and batching that turns one request into a thousand. A REST checklist will not find any of it.
Deprecated versions still routable, internal endpoints exposed through the same gateway, debug routes that survived a release, and the /v1 that was supposed to be switched off eighteen months ago. We work from your specification and then go looking for what the specification does not mention.
If your API binds a request body straight onto a model, somewhere there is a field — is_admin, account_tier, organisation_id — that a user can set and should not be able to. This is a one-line finding with a total-compromise impact, and it is worth the whole engagement on its own.
APIs fail on logic, not on payloads. That is why this is a manual engagement with two identities and a model of your data, rather than a scan of your endpoints.
How it runs
Base URLs, environments, versions in scope, rate limits we should respect, and written CMA 1990 authorisation. If a third party hosts part of the API, we confirm you are entitled to authorise testing of it.
We start from your OpenAPI or GraphQL schema, then enumerate what is actually routable. The gap between the two is often the first finding.
Which objects belong to which identity, which roles exist, and what each is supposed to reach. This model is what makes authorisation testing provable rather than speculative.
Every endpoint, every method, against a second identity and an unauthenticated caller. Object level, function level, and tenant isolation where the platform is multi-tenant.
Token handling, expiry and revocation, replay, mass assignment, injection where the backend allows it, file handling, rate limiting, and error messages that leak more than they should.
Findings with the exact request and response that proves them, in a form your engineers can replay. Re-test of every confirmed issue after the fix, included in the fee.
Deliverables
Every finding ships with the raw request that demonstrates it — a curl command or a saved collection — so a developer can reproduce it in a minute rather than reconstructing it from prose.
Which endpoints were tested, which were not, and why. An honest coverage note is worth more to an auditor than a report that implies everything was examined.
Mapped to the OWASP API Security Top 10, with ISO 27001 and UK GDPR relevance called out where an endpoint exposes personal data.
Re-test of confirmed findings once patched, included, plus a letter of attestation naming the API version, scope, dates and outcome.
Scoping
No schema and no documentation is workable — we enumerate from the client applications instead — but it costs a day and slightly reduces coverage confidence. We would rather say that up front than discover it at the report stage.
UK compliance
An API that lets one customer read another’s records is the textbook Article 32 failure and a reportable personal data breach if exploited. Independent testing with a re-test cycle is direct evidence of the required testing process.
Evidences application security requirements and technical vulnerability management across the API estate, including the versions your architecture diagram forgot.
Where an API touches cardholder data, Requirement 11.4 applies to it as much as to the web front end. We will scope honestly and tell you when your API is out of scope rather than bill for it.
Enterprise buyers now ask specifically about BOLA and tenant isolation. A report that names the identities used and shows the isolation test passing answers that question in one page.
Questions
Related
02
03
A thirty-minute call. Assets, timeline, a quote in pounds sterling.
Request a quote