BLOG

API security testing: beyond the web OWASP Top 10

Dit artikel is alleen in het Engels beschikbaar.

APIs fail differently from web pages. A web application has forms and rendered pages; an API exposes objects and actions directly, often to many clients at once. The most common serious findings are not the classic injection flaws but failures of authorisation on individual objects. This post covers what an API test actually looks for, following the OWASP API Security Top 10.

Broken object level authorisation

Broken object level authorisation, or BOLA, is the single most common serious API finding. The API authenticates the caller but does not check that the caller owns the specific object requested.

GET /api/v1/orders/1043 HTTP/1.1
Authorization: Bearer <valid token for user A>

If changing 1043 to 1044 returns another user’s order, the object is not scoped to its owner. The fix is to check ownership on the server for every object access, based on the authenticated identity, and never to rely on the client only requesting its own identifiers.

In an API test, the first question is rarely “can I inject” and almost always “can I reach an object that is not mine”.

Broken authentication and tokens

APIs lean on tokens, and tokens fail in specific ways: they do not expire, they are accepted after logout, the signature is not verified, or the same token works far beyond its intended scope.

The fix is short-lived tokens, server-side validation of every token including its signature and scope, and revocation that actually takes effect. Authentication that is only tested at the front door is not tested.

Excessive data exposure and mass assignment

Two related problems come from trusting the object shape. Excessive data exposure is when an endpoint returns more fields than the client needs, such as internal flags or another user’s details, and relies on the client to hide them. Mass assignment is the reverse: the client sends extra fields, such as "role": "admin", and the server binds them without checking.

The fix for both is an explicit contract: return only the fields a response needs, and accept only the fields an action is allowed to change. Never bind a request body straight onto a stored object.

Resource consumption and rate limits

An API without limits can be abused for volume: credential stuffing against a login, scraping through an enumerable endpoint, or expensive queries that exhaust the backend. These are not always exploitable in the classic sense, but they are real risk.

The fix is rate limiting and quotas per client and per endpoint, with the tightest limits on authentication and on any endpoint that is expensive to serve.

The API Top 10 at a glance

Risk The short version of what to check
Broken object level authorisation Can a caller reach an object that is not theirs
Broken authentication Do tokens expire, validate, and revoke correctly
Broken object property authorisation Can a client read or set fields it should not
Unrestricted resource consumption Are there rate limits and quotas
Broken function level authorisation Can a normal user call an admin action
Server-side request forgery Can a supplied URL be pointed at internal services
Security misconfiguration Defaults, verbose errors, permissive CORS

Closing

An API test is mostly about authorisation: object by object, function by function, token by token. The injection flaws still matter, but the findings that cause real damage are the ones where an authenticated caller reaches something that was never meant for them. Every finding should arrive with the request that proves it and a clear fix.

For how an API assessment is structured, see the web and API penetration testing service page.

Deel dit artikel LinkedIn X

Klaar om uw omgeving te beveiligen?

Plan een vrijblijvend intakegesprek om uw assessment af te stemmen. Pentrox identificeert kwetsbaarheden in uw applicaties, infrastructuur en cloudomgevingen voordat aanvallers dat doen.

Plan een intakegesprek