By Garrett Kohlrusch | GK Data LLC


Most web application security conversations start with the frontend. The login form, the input fields, the file upload handler. That’s where the visible interface is — and historically, that’s where a lot of the testing effort went.

Attackers figured out a while ago that the more interesting target is usually behind that interface.

APIs are the connective tissue of modern applications. They power mobile apps, connect third-party services, move data between microservices, and expose functionality that the frontend never directly surfaces. They’re also, in most organizations, significantly less tested than the rest of the application stack — because they’re less visible, because they’re assumed to be internal, and because the security conversation around them hasn’t caught up to how broadly they’re deployed.

That gap is where a substantial portion of serious web application breaches are originating right now.


Why APIs Are Different

A traditional web application vulnerability requires an attacker to interact with a rendered interface — a form that accepts input, a page that reflects data, a function the user is supposed to trigger. APIs remove that layer entirely.

A REST endpoint that returns user data doesn’t know whether it’s being called by your legitimate frontend or by an attacker who found the endpoint in your JavaScript bundle, a leaked Postman collection, or a passive recon scan. It responds to the request either way. If the authorization check is missing, broken, or bypassable, it responds with the data.

This is why Broken Object Level Authorization — BOLA, or IDOR — has sat at the top of the OWASP API Security Top 10 since its introduction. The vulnerability class is conceptually simple: a user who should only be able to access their own resources can, by modifying an identifier in a request, access someone else’s. No exploit required. Just a correctly formed request with a different ID.

The prevalence isn’t because developers don’t understand authorization. It’s because authorization logic in APIs is often implemented inconsistently — checked in some endpoints, assumed in others, or delegated to the frontend in ways that don’t survive direct API calls.


The Exposure Patterns That Actually Matter

Broken object-level authorization is the most common and the most impactful. Every endpoint that returns or modifies a resource scoped to a specific user needs to independently verify that the requesting user owns that resource. When that check is missing from even one endpoint, the data behind it is accessible to anyone with an account.

Excessive data exposure is quieter but equally serious. APIs frequently return full object representations and rely on the frontend to display only what’s relevant. The frontend filters the view — the API sends everything. A tester checking what’s in the response body, not just what’s rendered on screen, often finds fields that shouldn’t be there: internal identifiers, hashed credentials, flags indicating admin status, data belonging to other users.

Broken function-level authorization is the administrative version of the same problem. APIs with privileged endpoints — account deletion, role modification, bulk data export — sometimes rely on the frontend to hide those endpoints from unprivileged users rather than enforcing authorization at the API layer. An attacker who finds the endpoint doesn’t need the frontend.

Missing rate limiting on authentication endpoints and sensitive functions turns a protected resource into a brute-force target. Credential stuffing, OTP enumeration, and password reset abuse all rely on the ability to make high volumes of requests without being throttled. If the API doesn’t enforce limits, the protection doesn’t exist.

JWT and token handling issues cover a range of implementation errors — weak signing algorithms, tokens that never expire, signature validation that can be bypassed, and secret keys derived from predictable values. Authentication tokens are only as strong as the implementation behind them.


What “Tested” Actually Means for an API

Running a scanner against an API endpoint list is not the same as testing it. Automated tools catch a subset of issues — mostly surface-level misconfigurations and known vulnerability patterns. They don’t understand your application’s authorization model, and they can’t reason about what a response should or shouldn’t contain.

Real API security testing means authenticating as different user roles and verifying that the authorization boundaries hold across every endpoint. It means examining response bodies for data that shouldn’t be there. It means testing what happens when you modify object identifiers, skip required parameters, replay tokens, and send requests the frontend would never generate. It means checking whether administrative functions are actually protected or just hidden.

That work requires someone who understands both the vulnerability classes and the application’s business logic — and it can’t be automated away.


What GK Data LLC Does About It

We test APIs the way attackers do — from the outside, without source code access, using only what’s observable from authenticated and unauthenticated positions. We cover the full OWASP API Security Top 10, with specific attention to authorization logic, data exposure, and authentication implementation.

If your API hasn’t been formally tested, or if it’s changed substantially since it was, the exposure you’re carrying is unknown.

[email protected] | gkdata.io

GK Data LLC — Minneapolis, MN. Web application security, and managed IT services.