Broken Access Control is the #1 risk on the OWASP Top 10 — and for good reason. Authentication asks "who are you?" Access control asks "are you allowed to do this?" When the second check is missing or wrong, users can step outside their permissions, and that's where most serious breaches come from.

What it covers

Broken Access Control is a category, not a single bug. Its common forms:

FormWhat it looks like
Horizontal (IDOR/BOLA)Access another user's data by changing an ID — see IDOR
Vertical (privilege escalation)A regular user reaches admin-only functions
Missing function-level checksHidden admin endpoints reachable by anyone who knows the URL
Property-level (mass assignment)Setting fields you shouldn't (role: admin) via the API
Metadata tamperingEditing a JWT, cookie, or hidden field to elevate access
CORS misconfigurationAllowing untrusted origins to make authenticated requests

Why it's so common

Access control is everywhere — every endpoint, every action — so it's easy to miss one. And it's invisible in normal use: the app works perfectly for a user with the right permissions. The gap only shows when someone tries something they shouldn't, which is exactly what attackers do and developers don't.

How to prevent it

  1. Deny by default. No access unless explicitly granted — for every resource and function.
  2. Enforce on the server. Hiding a button isn't access control; the API must reject the request itself.
  3. Centralize the logic. One policy/middleware layer the whole app shares beats per-route checks you'll forget.
  4. Scope every query to the user. Fetch by ID and owner together.
  5. Least privilege. Give each role the minimum it needs; protect admin functions explicitly.
  6. Test as the wrong user. Try every sensitive action as a lower-privileged account — it should fail.

Catch the gaps you can't see

You can't manually test every object and function across a whole app. Nurbak scans your deployed app for broken access control, missing auth and the rest of the API security checklist — surfacing the unguarded endpoint before it becomes an incident.

Related articles