Platform

Platform overview How it works Authorization testing Evidence & reports Private scanning Integrations

Solutions

Security agencies Product teams Regulated industries Partner programme

Learn

Blog Knowledge hub Compare

Resources

Pricing Documentation Help centre FAQ Security & data What we haven’t proved

Company

About Contact Careers Sign in to the platform Start a $199 pilot →

Home / Knowledge hub / Broken function-level authorisation

Knowledge hub

Broken function-level authorisation

Calling an API function your account was never meant to use.

Illustration explaining Broken function-level authorisation

What it means

Broken function-level authorisation means an API lets a caller reach a function they should not, such as an admin action used by an ordinary account. It is a missing check on what you may do, where the related BOLA problem is a missing check on which record you may touch. The test is simple to describe: does the server refuse when it should.

The standard example is an interface that hides the delete or approve button from normal accounts, while the endpoint behind it accepts the request from anyone who is signed in. Any signed-in account can find that endpoint by watching traffic or reading the front-end code.

Why it matters

The functions most at risk are the powerful ones: creating admin accounts, changing prices, refunding orders, exporting every customer, switching features on. If an ordinary account can call them, the damage is not one record but the control of the system itself. OWASP lists this as API5 in its 2023 API top ten. It becomes a path to the entire business.

It is also easy to miss. The interface looks right, normal use works, and a review of screens finds nothing. The gap appears only when someone sends the request directly with a lower-privileged account. A scanner that only follows the interface will not find it, because the interface never offers the request.

How it shows up

You meet it where roles exist: admin and support routes, internal tools exposed by the same API, and verbs the interface never uses. Typical mistakes are checking the role only in the front end, protecting GET but not PUT or DELETE, and relying on obscure paths such as /admin/ rather than a check on the server.

Put authorisation in one place on the server, deny by default, and give each function an explicit rule. Then test: take a request from a higher role and replay it with a lower one. See BFLA, vertical privilege escalation and deny by default.

Questions people ask

Broken function-level authorisation, answered

What is the difference between BOLA and function-level authorisation?

BOLA is about objects: can this account open that record. Function-level authorisation is about actions: can this account call that function at all.

Both are server-side checks and both are tested with accounts that should be refused.

Is hiding the admin button enough?

No. A hidden button only affects the interface. The endpoint it calls is still open unless the server checks the caller's role.

Anyone can send that request without the button.

Why does this keep happening?

Because developers build the screen and the endpoint separately, and a check added to one is easy to forget on the other. New routes and new verbs also arrive faster than reviews.

A default of refusing access unless a rule allows it catches the forgotten ones.

How do we test for it?

Collect the functions available to your highest role, then call each one with a lower-privileged account and with no account.

Any success where a refusal was expected is a finding, and the request is the proof.

Does an API gateway fix it?

A gateway can check roles or scopes at the front, which helps. It rarely knows every business rule behind each function.

Keep the check in the service as well, so a route that bypasses the gateway still meets one.

Cyberlop mark

Can a normal account call the admin call?

We check what each signed-in account can reach that it should not, including admin functions behind routes the interface never shows. Each finding comes with the request and response. Book a pilot on one app.

Or start with a $199 pilot on one application: thirty days, success criteria agreed before day one, credited against the annual if you convert.