Loading module...
Loading module...
OWASP-01
Access control enforces policy such that users cannot act outside of their intended permissions.
Access control enforces policy such that users cannot act outside of their intended permissions. Failures typically lead to unauthorized information disclosure, modification, or destruction of all data or performing a business function outside the user's limits.
Impact: 100% of applications tested were found to have some form of broken access control, making this the #1 security risk.
Access should only be granted for particular capabilities, roles, or users, but is often available to anyone by default.
Bypassing access control by modifying the URL, internal application state, or HTML page using browser tools or API manipulation.
Permitting viewing or editing someone else's account by providing its unique identifier without proper authorization checks.
APIs with missing access controls for POST, PUT, and DELETE operations, allowing unauthorized data modification.
Acting as a user without being logged in, or gaining admin privileges as a standard user.
Replaying or tampering with JWT tokens, cookies, or hidden fields to elevate privileges or abuse JWT invalidation.
Allowing API access from unauthorized or untrusted origins due to improper Cross-Origin Resource Sharing settings.
Guessing URLs to access authenticated pages as an unauthenticated user or privileged pages as a standard user.
Abusing a file-read or file-include endpoint by injecting ../ sequences to escape the intended directory and reach files outside the application's allowed scope (e.g., /etc/passwd, .env, other tenants' files). It is an access control failure because the application intended to restrict users to a subset of the filesystem but failed to enforce that boundary.
An application uses unverified data in an SQL call accessing account information:
pstmt.setString(1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery();An attacker modifies the browser's acct parameter to access any user's account:
https://example.com/app/accountInfo?acct=notmyacct
Impact: Complete access to any user's sensitive account data.
An attacker directly accesses admin URLs without proper authentication:
https://example.com/app/getappInfo
https://example.com/app/admin_getappInfo
If an unauthenticated user can access either page, or a non-admin can access the admin page, it's a critical flaw.
An application implements all access control in the front-end JavaScript. An attacker bypasses the UI entirely:
curl https://example.com/app/admin_getappInfoImpact: Complete bypass of all access controls, exposing administrative functions.
An application exposes a download endpoint that takes a filename as a query parameter and reads it from a documents directory:
String name = request.getParameter("file");
File f = new File("/var/app/documents/" + name);
response.getOutputStream().write(Files.readAllBytes(f.toPath()));An attacker requests:
https://example.com/app/download?file=../../../../etc/passwd
Because the path is concatenated without normalization or containment, the resolved path escapes /var/app/documents/ and returns the contents of /etc/passwd.
Impact: Arbitrary file read on the server: system files, configuration, secrets, other tenants' data, anywhere the application process has read access. The fix is a combination of (a) resolving the path and verifying it still starts with the allowed base directory, and (b) rejecting input containing .., null bytes, or absolute paths.
Access control is only effective when implemented in trusted server-side code or serverless APIs where the attacker cannot modify the check or metadata.
Except for public resources, deny access by default. Only grant access for specific capabilities, roles, or users.
Implement access control mechanisms once and reuse them throughout the application, including minimizing CORS usage.
Model access controls should enforce record ownership rather than allowing users to create, read, update, or delete any record.
Unique application business limit requirements should be enforced by domain models.
.git) and backup files are not present within web rootsDevelopers and QA staff should include functional access control in unit and integration tests.
Content adapted from OWASP Top 10:2025, licensed under CC BY-SA 4.0