Sunday, 30 August 2026 ● Independent reference platform
WebOTG
OWASP TOP 10 · 2025

A01:2025 — Broken Access Control

A practical security testing guide for identifying, safely reproducing, remediating and verifying broken access-control vulnerabilities in web applications and APIs.

Category A01 Domain Authorization Severity High Version 2025 Reviewed 30 Aug 2026
01 / OBJECTIVE

What are we verifying?

Verification objective

Verify that every protected resource and privileged operation is authorized on the server according to the requesting user's effective permissions.

Broken access control occurs when an application allows an actor to access information or perform an operation outside the permissions assigned to that actor.

Authentication establishes who the user is. Authorization determines what that user is permitted to do. A successful login must never be treated as authorization to access every resource.

Authentication Who are you?
→
Authorization What can you do?
→
Resource What are you accessing?
02 / SCOPE

What should be tested?

Review authorization controls wherever users, roles, tenants or other security principals have different permissions.

Component Authorization test
Web pages Verify protected pages cannot be accessed by unauthorized users.
APIs Test authorization independently on each protected endpoint.
User resources Verify users cannot access another user's resources.
Administration Verify privileged functions require the appropriate role or permission.
Multi-tenant resources Verify tenant boundaries are enforced.
Files and documents Verify direct resource access is authorized server-side.
03 / IDENTIFICATION

How to identify the issue

Begin by documenting the application's intended authorization model. Do not assume that an identifier being visible in a URL represents a vulnerability.

Establish the authorization matrix

Account Role Expected access
Test User A User Own resources
Test User B User Own resources
Test Admin Administrator Administrative resources

Review the application's attack surface

  • Object identifiers in URLs and request bodies.
  • Administrative endpoints.
  • API endpoints and HTTP methods.
  • File and document access.
  • Role and permission changes.
  • Multi-tenant resources.
04 / REPRODUCTION

How to reproduce safely

Authorized testing only

Perform these tests only against systems, applications and environments for which you have explicit authorization. Use dedicated test accounts and non-sensitive test data whenever possible.

TEST-AC-001 Horizontal authorization

Test cross-user resource access

Determine whether one authenticated user can access a protected resource belonging to another user.

Procedure

  1. Authenticate as Test User A.
  2. Access a resource owned by User A.
  3. Record the resource identifier and request details.
  4. Authenticate as Test User B.
  5. Request User A's resource using the same application interface.
  6. Compare the response with the application's intended authorization policy.

Expected secure result

User B must not receive User A's protected information or be permitted to modify or delete User A's resource.

Fail condition

The test fails when User B can perform an operation that the authorization policy explicitly prohibits.

TEST-AC-002 Vertical authorization

Test privilege escalation

Determine whether a lower-privileged account can perform functions reserved for a higher-privileged role.

Procedure

  1. Authenticate as a standard user.
  2. Identify an administrative operation that the user should not be permitted to perform.
  3. Attempt the operation through the normal application interface or an approved security-testing proxy.
  4. Record the server response.

Expected secure result

The server rejects the unauthorized operation.

05 / ROOT CAUSE

Why does it happen?

The most common root cause is that an application identifies a resource but does not independently determine whether the authenticated principal is authorized to access that resource.

Identifier ≠ authorization

Hiding, encoding or replacing sequential IDs does not implement access control. Authorization must be enforced by the server.

06 / REMEDIATION

How to fix it

Authorization should be enforced server-side before the application performs the requested operation.

Vulnerable pattern

vulnerable-example.php INSECURE
$userId = $_GET['id'];

$stmt = $db->prepare(
    "SELECT * FROM documents WHERE id = ?"
);

$stmt->bind_param("i", $userId);
$stmt->execute();

The prepared statement protects the query from SQL injection, but it does not establish that the authenticated user is permitted to access the selected document.

Ownership-aware query

secure-example.php SERVER-SIDE AUTHORIZATION
$stmt = $db->prepare(
    "SELECT *
     FROM documents
     WHERE id = ?
       AND owner_id = ?"
);

$stmt->bind_param(
    "ii",
    $documentId,
    $authenticatedUserId
);

$stmt->execute();

The application now verifies the resource and the authenticated user's ownership relationship together.

General remediation principles

  • Enforce authorization on the server.
  • Deny access by default.
  • Centralize authorization logic where practical.
  • Verify object ownership or permission for every protected operation.
  • Protect APIs independently from frontend controls.
  • Do not rely on hidden fields, UI restrictions, predictable IDs or client-side checks.
  • Test authorization after every security-sensitive application change.
07 / VERIFICATION

How to verify the fix

Verification should repeat the original test conditions after remediation. Do not mark a vulnerability as resolved solely because code has changed.

Authorization verification matrix

Test Expected Result
User A → own resource Allow PASS
User B → User A resource Deny PASS
User → admin function Deny PASS
Admin → admin function Allow PASS
Anonymous → protected resource Deny PASS

Assessment result

PASS

Tested authorization controls prevented the unauthorized operation.

FAIL

The application permitted an operation outside the actor's authorized permissions.

NOT TESTED

The required resource or test condition could not be evaluated.

Important

Not Tested must not be recorded as Pass. The result should accurately reflect what was actually verified.

08 / EVIDENCE

What should be recorded?

Maintain enough evidence to demonstrate what was tested, what was observed, what was changed and how the final result was established.

Test account and assigned role
Application and environment
Affected endpoint or resource
Original test request and response
Remediation implemented
Retest request and response
Final assessment
Verification date and tester
09 / FRAMEWORK MAPPING

Standards and references

Framework Reference
OWASP Top 10 A01:2025 — Broken Access Control
CWE CWE-284, CWE-285, CWE-862, CWE-863
OWASP ASVS Authorization controls
OWASP Testing Authorization testing
10 / REFERENCES

Official references