OWASP Web Top 10 — A01

Privilege Escalation

Privilege Escalation is a critical security vulnerability that allows attackers to gain higher-level permissions than originally assigned. It enables unauthorized access to sensitive resources, administrative functions, and other users' data, making it one of the most dangerous attack vectors in multi-role applications.

What Is Privilege Escalation?

Privilege Escalation occurs when a user gains access to resources, functionality, or data that should be restricted to users with higher privileges. This vulnerability arises from inadequate access control mechanisms, improper authorization checks, or flawed role-based permission systems. When applications fail to properly enforce the principle of least privilege, attackers can exploit these weaknesses to elevate their access rights beyond what was intended.

There are two primary types of privilege escalation: vertical and horizontal. Vertical escalation involves a lower-privileged user (such as a regular user) gaining the rights of a higher-privileged user (such as an administrator). Horizontal escalation allows a user to access resources or data belonging to another user at the same privilege level. Both types can have severe consequences, from data breaches to complete system compromise.

Privilege Escalation vulnerabilities are particularly common in applications with multiple user roles, complex permission hierarchies, or legacy systems where access controls were an afterthought. According to the OWASP Top 10, broken access control (which includes privilege escalation) was ranked as A01 in the 2021 edition, reflecting its critical importance in modern application security. These vulnerabilities are often exploited through parameter tampering, session manipulation, or exploiting logic flaws in authorization checks.

How It Works

1
Attacker identifies a privileged endpoint

The attacker discovers an administrative or privileged function, such as a user management page, configuration endpoint, or data export feature. This could be found through directory enumeration, inspecting client-side code, or analyzing API documentation.

2
Application performs weak authorization check

The application checks only if the user is authenticated (logged in) but fails to verify if they have the required role or permissions. Alternatively, it may rely solely on client-side checks or hidden UI elements to restrict access, without server-side enforcement.

3
Attacker crafts a malicious request

Using tools like Burp Suite or by manually modifying requests, the attacker sends a direct HTTP request to the privileged endpoint. They may also manipulate parameters such as userId, role, or isAdmin to bypass authorization checks.

4
Authorization bypass is successful

The application processes the request without properly validating the user's permissions. Because the authorization logic is flawed, missing, or only implemented on the client side, the server accepts and executes the privileged operation.

5
Attacker gains elevated access

The attacker successfully performs administrative actions such as creating admin accounts, accessing other users' data, modifying system configurations, or extracting sensitive information. They can now operate with privileges far beyond their assigned role.

Vulnerable Code Example

Vulnerable — Java / Spring Boot
@RestController
@RequestMapping("/api/admin")
public class AdminController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public ResponseEntity<?> getAllUsers(Authentication auth) {
        // VULNERABLE: Only checks if user is authenticated
        // Does not verify if they have admin role
        if (auth == null || !auth.isAuthenticated()) {
            return ResponseEntity.status(401).body("Not authenticated");
        }

        List<User> users = userService.getAllUsers();
        return ResponseEntity.ok(users);
    }

    @DeleteMapping("/users/{userId}")
    public ResponseEntity<?> deleteUser(
        @PathVariable Long userId,
        Authentication auth
    ) {
        // VULNERABLE: No role check at all
        // Any authenticated user can delete any account
        userService.deleteUser(userId);
        return ResponseEntity.ok("User deleted");
    }
}

// An attacker with a regular user account can:
// 1. Send GET /api/admin/users to list all users
// 2. Send DELETE /api/admin/users/1 to delete any user
//
// The application only checks authentication, not authorization.
// There is no verification that the user has admin privileges.

Secure Code Example

Secure — Java / Spring Boot (Role-Based Access Control)
@RestController
@RequestMapping("/api/admin")
public class AdminController {

    @Autowired
    private UserService userService;

    // SECURE: Enforces ADMIN role at method level
    @PreAuthorize("hasRole('ADMIN')")
    @GetMapping("/users")
    public ResponseEntity<?> getAllUsers() {
        List<User> users = userService.getAllUsers();
        return ResponseEntity.ok(users);
    }

    // SECURE: Multiple layers of authorization
    @PreAuthorize("hasRole('ADMIN')")
    @DeleteMapping("/users/{userId}")
    public ResponseEntity<?> deleteUser(
        @PathVariable Long userId,
        @AuthenticationPrincipal UserDetails currentUser
    ) {
        // Defense in depth: Additional business logic check
        if (userService.isSystemAdmin(userId)) {
            throw new ForbiddenException("Cannot delete system admin");
        }

        // Additional check: Prevent self-deletion
        if (currentUser.getUsername().equals(
            userService.findById(userId).getUsername()
        )) {
            throw new ForbiddenException("Cannot delete your own account");
        }

        userService.deleteUser(userId);
        return ResponseEntity.ok("User deleted");
    }
}

// With @PreAuthorize, Spring Security enforces role checks
// before the method executes. Any user without ADMIN role
// receives a 403 Forbidden response automatically.
// Additional business logic checks provide defense in depth.

Types of Privilege Escalation

Vertical Privilege Escalation

The most dangerous type where a lower-privileged user gains the rights of a higher-privileged user. A regular user becomes an administrator, a viewer gains editor rights, or a customer accesses employee-only functions. This often occurs through parameter tampering (changing role=user to role=admin), direct object reference (accessing admin endpoints directly), or session manipulation. Vertical escalation can lead to complete system compromise, as attackers gain full administrative control over the application and its data.

Horizontal Privilege Escalation

Occurs when a user accesses resources or performs actions on behalf of another user at the same privilege level. For example, User A can view or modify User B's profile, orders, or private data by manipulating identifiers in URLs or API calls. This is often exploited through Insecure Direct Object References (IDOR) where changing /api/profile/123 to /api/profile/124 grants access to another user's data. While the attacker doesn't gain higher privileges, they can compromise privacy, steal sensitive information, or perform unauthorized actions across multiple user accounts.

Role Chain Escalation

A sophisticated attack that exploits flaws in role inheritance, delegation, or permission hierarchies. Attackers may leverage role delegation features to grant themselves admin rights, exploit inheritance bugs where permissions cascade incorrectly, or abuse temporary elevation mechanisms that don't properly revoke access. For example, a user might exploit a "share with" feature to grant themselves ownership, or abuse an "impersonate user" feature intended for support staff. This type requires deep knowledge of the application's access control model but can be devastating when successful.

Impact

A successful Privilege Escalation attack can completely undermine an application's security model. The consequences depend on the level of access gained and the sensitivity of the exposed resources.

Complete administrative takeover

Attackers who achieve vertical privilege escalation to admin level can create new admin accounts, lock out legitimate administrators, modify system configurations, disable security controls, and establish persistent backdoors for future access. This represents a total compromise of the application's security.

Massive data breach and privacy violations

Horizontal privilege escalation allows attackers to access thousands or millions of user accounts by iterating through user IDs or identifiers. This can expose personally identifiable information, financial records, health data, private messages, and other sensitive information, leading to regulatory fines, lawsuits, and severe reputational damage.

Financial fraud and manipulation

With elevated privileges, attackers can manipulate financial transactions, process unauthorized refunds, alter pricing, grant themselves credits or discounts, modify billing records, or redirect payments. In e-commerce or financial applications, this can result in direct monetary losses and accounting inconsistencies.

Compliance violations and legal consequences

Privilege escalation leading to unauthorized data access violates regulations like GDPR, HIPAA, PCI-DSS, and SOC 2. Organizations face mandatory breach notifications, regulatory investigations, substantial fines, loss of certifications, and potential criminal liability. The legal and compliance fallout can exceed the technical damage.

Prevention Checklist

Implement server-side role-based access control (RBAC)

Never rely on client-side checks, hidden UI elements, or URL obfuscation for authorization. Every privileged endpoint must verify the user's role and permissions on the server side before processing any request. Use framework features like Spring Security's @PreAuthorize, ASP.NET's [Authorize(Roles = "Admin")], or middleware in Node.js to enforce access control consistently.

Enforce principle of least privilege

Grant users only the minimum permissions necessary to perform their job functions. Default to deny-all and explicitly grant permissions rather than deny-by-exception. Regularly audit user roles and permissions to ensure they remain appropriate. Implement time-limited elevated access for administrative tasks and log all privilege escalations.

Validate ownership and access rights for all resources

For every data access or modification request, verify that the authenticated user has the right to access that specific resource. Don't assume that knowing a resource ID grants access to it. Implement checks like if (resource.ownerId !== currentUser.id && !currentUser.isAdmin) throw ForbiddenException before processing any operation.

Use indirect object references

Avoid exposing internal database IDs or predictable identifiers directly to users. Instead, use session-scoped references, UUIDs, or encrypted tokens that prevent users from simply incrementing IDs to access other resources. If you must use sequential IDs, always pair them with ownership validation.

Implement comprehensive logging and monitoring

Log all access control decisions, especially denied requests, privilege changes, and administrative actions. Monitor for patterns like rapid sequential access attempts (possible IDOR enumeration), unusual role changes, or access to admin endpoints by non-admin users. Alert on suspicious patterns and conduct regular log reviews.

Regular security testing and code reviews

Conduct penetration tests specifically focused on authorization bypass and privilege escalation. Use automated tools to test for IDOR vulnerabilities across all endpoints. Perform manual code reviews of authorization logic, paying special attention to new features, role changes, and permission updates. Include privilege escalation scenarios in your threat modeling.

Real-World Examples

2019

Facebook

A privilege escalation vulnerability in Facebook's Business Manager allowed attackers to take over any Facebook Page by exploiting improper access controls. Researchers discovered they could assign themselves admin roles on any page by manipulating API requests, bypassing intended permission checks. Facebook patched the vulnerability and awarded researchers a $25,000 bounty.

2020

Microsoft Azure Cosmos DB

The "ChaosDB" vulnerability allowed any Azure user to gain full admin access to other customers' Cosmos DB instances due to a flaw in the Jupyter Notebook feature. Attackers could read, write, or delete any database by exploiting weak authorization controls. Microsoft issued an emergency security alert and forced password resets for all potentially affected customers.

2021

GitHub

A privilege escalation vulnerability in GitHub Actions allowed attackers to gain write access to any repository by exploiting improper permission inheritance in workflow files. The flaw could have allowed attackers to inject malicious code into popular open-source projects. GitHub quickly patched the issue and conducted a thorough security audit of the Actions permission model.

2022

Uber

A massive breach resulted from a combination of social engineering and privilege escalation. After gaining initial access to a contractor's account, the attacker escalated privileges by finding hardcoded admin credentials in PowerShell scripts. This led to access to Uber's internal systems, source code repositories, and customer data, demonstrating how a single weak access control can cascade into a full compromise.

Ready to Test Your Knowledge?

Put what you have learned into practice. Try identifying and fixing Privilege Escalation vulnerabilities in our interactive coding challenges, or explore more security guides to deepen your understanding.