Cloud IAM privilege escalation – how attackers move up in AWS, Azure, and GCP – Secured Me

Cloud IAM privilege escalation – how attackers move up in AWS, Azure, and GCP

The most common cloud IAM misconfigurations attackers chain into full account takeover, and the controls that close them off.

In on-prem environments, attackers escalate from a user shell to local admin to Domain Admin. In the cloud, the equivalent journey is from a low-privileged identity (a developer's leaked access key, a compromised CI token, a misconfigured Lambda role) to "owner of the account". The mechanics are different — there is no kernel exploit involved — but the goal is the same: keep iterating until you can do anything. Cloud IAM is rich, fast-moving, and full of legitimate-looking permissions that combine into account takeover. Understanding those chains, and how to close them off, is now a core skill for anyone running production workloads in AWS, Azure, or GCP.

Why cloud IAM is uniquely dangerous

Cloud IAM has properties that traditional access control did not.

The result is that most cloud breaches do not look like exploits; they look like an attacker patiently using the API the way it was designed to be used, just with the wrong identity.

Common AWS escalation chains

AWS has been studied the longest, and the canonical privilege-escalation paths are well documented (Rhino Security Labs published the original "21 paths" list; Pacu automates many of them). The patterns to know:

Tools like pmapper, cloudsplaining, and iamspy build a graph of these relationships across your account and highlight the shortest path from any identity to admin.

Azure and GCP have their own flavours

Azure's RBAC plus Entra ID adds a second axis. Common Azure escalation patterns include abusing Microsoft.Authorization/roleAssignments/write (assigning yourself a higher role), abuse of "Owner" on a subscription via a forgotten guest user, and chained attacks through managed identities on VMs or Logic Apps. At the directory level, application registrations with high Graph API permissions (RoleManagement.ReadWrite.Directory, Application.ReadWrite.All) are catastrophic if compromised — they let you mint credentials and grant any role. Service principals with stale client secrets in code are a perennial source of breaches.

GCP centres on service accounts and the iam.serviceAccountTokenCreator and iam.serviceAccountUser roles. If you hold serviceAccountTokenCreator on a privileged service account, you can mint a token for it via generateAccessToken and act as that identity. iam.serviceAccountKeys.create is similar but worse (long-lived JSON keys). cloudfunctions.functions.create and cloudbuild.builds.create enable PassRole-style abuse against compute services. The Editor primitive role is essentially admin and is still common in older projects.

The vendor-specific details vary, but the shape is the same in all three: a privilege that describes itself as narrow combines with another privilege to grant the holder full control.

Hardening: principles that actually work

A few principles, applied consistently, eliminate most realistic escalation paths.

Detection and response

You will not catch every misuse at the prevention layer, so log and alert on the high-signal events. CloudTrail (especially management events), Azure Activity Log + Entra audit, and GCP Audit Logs should be centralised, retained for at least a year, and fed into a SIEM.

Pair detections with a tested response playbook: rotate or disable the compromised identity, revoke active sessions (aws sts deactivate-mfa-device and iam:DeleteAccessKey, Entra revokeSignInSessions, GCP key disable), invalidate the credential's blast radius (snapshot what it touched), and review CloudTrail for the full action history. Cloud IAM compromise is rarely "loud", but with the right logging and a written response, you can usually contain it before the attacker reaches the data plane.