Back to all articles

Broken Access Control in Real Applications

Access control bugs remain the #1 OWASP risk — three real-world patterns we see again and again, and the test cases that reliably catch them.

Broken access control has been the top OWASP risk for years, and that is unlikely to change. The reason is simple — access control is the only security control that genuinely depends on the application's business model, and so it cannot be shipped as a library.

Pattern 1: UI-only enforcement

The front-end hides the "delete" button for non-admins, but the underlying API does not check the role. Any authenticated user can still call the endpoint.

How to test: log in as a low-privileged user, replay every privileged action from an admin session and observe responses.

Pattern 2: Insecure Direct Object Reference (IDOR)

An endpoint like GET /api/invoices/4815 returns the requested record without checking that the current user owns invoice 4815. Iterating IDs returns other tenants' data.

How to test: create two accounts in different tenants, swap any ID found in URLs or JSON responses, and check whether access is granted.

Pattern 3: Forced browsing

Hidden admin paths like /admin, /internal/users or /debug rely on obscurity. There is no actual check that the calling user has the admin role.

How to test: brute-force common admin paths and inspect responses for inconsistent authorization handling.

Defensive guidelines

If you only test one thing on your application this month, test authorization. It is the area where small mistakes have the largest blast radius.

Want a hands-on review of your stack?

Tell us about your application and we will scope a focused security engagement.

Contact Guardrootspace