Missing Function Level Access Control
Am I Vulnerable To 'Missing Function Level Access Control'?
The best way to find out if an application has failed to properly restrict function level access is to verify every application function:
- Does the UI show navigation to unauthorized functions?
- Are server side authentication or authorization checks missing?
- Are server side checks done that solely rely on information provided by the attacker?
Using a proxy, browse your application with a privileged role. Then revisit restricted pages using a less privileged role. If the server responses are alike, you're probably vulnerable. Some testing proxies directly support this type of analysis.
You can also check the access control implementation in the code. Try following a single privileged request through the code and verifying the authorization pattern. Then search the codebase to find where that pattern is not being followed.
Automated tools are unlikely to find these problems.
How Do I Prevent 'Missing Function Level Access Control'?
Your application should have a consistent and easy to analyze authorization module that is invoked from all of your business functions. Frequently, such protection is provided by one or more components external to the application code.
- Think about the process for managing entitlements and ensure you can update and audit easily. Don’t hard code.
- The enforcement mechanism(s) should deny all access by default, requiring explicit grants to specific roles for access to every function.
- If the function is involved in a workflow, check to make sure the conditions are in the proper state to allow access.
NOTE: Most web applications don’t display links and buttons to unauthorized functions, but this “presentation layer access control” doesn’t actually provide protection. You must also implement checks in the controller or business logic.
Example Attack Scenarios
Scenario #1: The attacker simply force browses to target URLs. The following URLs require authentication. Admin rights are also required for access to the admin_getappInfo page.
http://example.com/app/getappInfo
http://example.com/app/admin_getappInfo
If an unauthenticated user can access either page, that’s a flaw. If an authenticated, non-admin, user is allowed to access the admin_getappInfo page, this is also a flaw, and may lead the attacker to more improperly protected admin pages.
Scenario #2: A page provides an 'action' parameter to specify the function being invoked, and different actions require different roles. If these roles aren’t enforced, that’s a flaw.
References
OWASP
- OWASP Top 10-2007 on Failure to Restrict URL Access
- ESAPI Access Control API
- OWASP Development Guide: Chapter on Authorization
- OWASP Testing Guide: Testing for Path Traversal
- OWASP Article on Forced Browsing
For additional access control requirements, see the ASVS requirements area for Access Control (V4).