Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala

This commit is contained in:
Translator
2026-01-18 11:59:48 +00:00
parent 90f99afd1f
commit f9e753fc91

View File

@@ -12,9 +12,9 @@ Para mais informações sobre este serviço, consulte:
### Microsoft.Web/staticSites/snippets/write
É possível fazer uma página web estática carregar código HTML arbitrário criando um snippet. Isso pode permitir que um atacante injete código JS dentro do web app e roube informações sensíveis, como credenciais ou chaves mnemônicas (em web3 wallets).
É possível fazer uma página estática carregar código HTML arbitrário criando um snippet. Isso pode permitir que um atacante injete código JS dentro da aplicação web e roube informações sensíveis, como credenciais ou chaves mnemônicas (em web3 wallets).
O comando a seguir cria um snippet que será sempre carregado pelo web app::
O comando a seguir cria um snippet que sempre será carregado pela aplicação web::
```bash
az rest \
--method PUT \
@@ -39,7 +39,7 @@ Como explicado na seção App Service:
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
Executando o seguinte comando é possível **ler as credenciais de terceiros** configuradas na conta atual. Note que, por exemplo, se algumas credenciais do Github estiverem configuradas em um usuário diferente, você não conseguirá acessar o token a partir de outro.
Executando o comando a seguir é possível **ler as credenciais de terceiros** configuradas na conta atual. Note que, por exemplo, se algumas credenciais do Github estiverem configuradas em um usuário diferente, você não conseguirá acessar o token a partir de outro usuário.
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
@@ -71,12 +71,12 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
```
### Sobrescrever arquivo - Sobrescrever rotas, HTML, JS...
É possível **sobrescrever um arquivo dentro do Github repo** que contém o app através do Azure tendo o **Github token**, enviando uma requisição como a seguinte que indicará o caminho do arquivo a ser sobrescrito, o conteúdo do arquivo e a mensagem de commit.
É possível **sobrescrever um arquivo dentro do repositório Github** que contém a app por meio do Azure possuindo o **Github token**, enviando uma requisição como a seguinte que indicará o caminho do arquivo a ser sobrescrito, o conteúdo do arquivo e a mensagem do commit.
Isso pode ser abusado por atacantes para basicamente **alterar o conteúdo do web app** para servir conteúdo malicioso (steal credentials, mnemonic keys...) ou apenas **redirecionar certos caminhos** para seus próprios servidores sobrescrevendo o `staticwebapp.config.json`.
Isto pode ser abusado por atacantes para, basicamente, **alterar o conteúdo da aplicação web** para servir conteúdo malicioso (roubar credenciais, chaves mnemônicas...) ou simplesmente **redirecionar certos caminhos** para os seus próprios servidores sobrescrevendo o arquivo `staticwebapp.config.json`.
> [!WARNING]
> Observe que, se um atacante conseguir comprometer o Github repo de qualquer forma, ele também pode sobrescrever o arquivo diretamente a partir do Github.
> Observe que, se um atacante conseguir comprometer o repositório Github de qualquer forma, ele também pode sobrescrever o arquivo diretamente pelo Github.
```bash
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
-H "Content-Type: application/json" \
@@ -99,7 +99,7 @@ curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
```
### Microsoft.Web/staticSites/config/write
Com essa permissão, é possível **modificar a senha** que protege um static web app ou até mesmo desproteger todos os ambientes enviando uma requisição como a seguinte:
Com essa permissão, é possível **modificar a senha** que protege um aplicativo web estático ou até desproteger todos os ambientes enviando uma requisição como a seguinte:
```bash
# Change password
az rest --method put \
@@ -133,7 +133,7 @@ az rest --method put \
```
### Microsoft.Web/staticSites/listSecrets/action
Esta permissão permite obter o **API key deployment token** para o aplicativo estático.
Esta permissão permite obter o **API key deployment token** da aplicação estática.
Usando az rest:
```bash
@@ -144,25 +144,25 @@ Usando AzCLI:
```bash
az staticwebapp secrets list --name <appname> --resource-group <RG>
```
Então, para **atualizar uma aplicação usando o token** você pode executar o comando a seguir. Observe que este comando foi extraído verificando **como o Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) funciona**, pois é o que a Azure definiu por padrão para usar. Portanto, a imagem e os parâmetros podem mudar no futuro.
Então, para **atualizar um app usando o token** você pode executar o comando a seguir. Note que este comando foi extraído verificando **como o GitHub Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) funciona**, já que é o que a Azure definiu por padrão para usar. Portanto a imagem e parâmetros podem mudar no futuro.
> [!TIP]
> Para implantar a aplicação você pode usar a ferramenta **`swa`** de [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) ou seguir os passos abaixo:
> Para implantar o app você pode usar a ferramenta **`swa`** de [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) ou seguir os passos a seguir:
1. Faça o download do repositório [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (ou de qualquer outro repositório que você queira implantar) e execute `cd react-basic`.
1. Baixe o repositório [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (ou qualquer outro repo que você queira implantar) e execute `cd react-basic`.
2. Altere o código que você deseja implantar
3. Implante executando (Lembre-se de trocar o `<api-token>`):
3. Faça o deploy executando (lembre-se de alterar o `<api-token>`):
```bash
docker run --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN=<api-token> INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose
```
> [!WARNING]
> Mesmo que você tenha o token, você não conseguirá implantar o app se a **Deployment Authorization Policy** estiver definida como **Github**. Para usar o token você precisará da permissão `Microsoft.Web/staticSites/write` para alterar o método de implantação para usar th APi token.
> Mesmo que você tenha o token, não será possível fazer o deploy da app se a **Deployment Authorization Policy** estiver definida como **Github**. Para usar o token você precisará da permissão `Microsoft.Web/staticSites/write` para alterar o método de deployment e usar o token da API.
### Microsoft.Web/staticSites/write
Com essa permissão é possível **alterar a origem do static web app para um repositório Github diferente**, entretanto, ele não será provisionado automaticamente, pois isso deve ser feito a partir de um Github Action.
Com essa permissão é possível **alterar a origem da static web app para um repositório Github diferente**, no entanto, ela não será provisionada automaticamente, pois isso deve ser feito por uma Github Action.
No entanto, se a **Deployment Authotization Policy** estiver definida como **Github**, é possível **atualizar o app a partir do novo repositório de origem!**.
No entanto, se a **Deployment Authorization Policy** estiver definida como **Github**, é possível **atualizar a app a partir do novo repositório de origem!**.
Caso a **Deployment Authorization Policy** não esteja definida como Github, você pode alterá-la com a mesma permissão `Microsoft.Web/staticSites/write`.
```bash
@@ -187,7 +187,7 @@ az rest --method PATCH \
}
}'
```
Exemplo de Github Action para implantar a aplicação:
Exemplo de Github Action para implantar o app:
```yaml
name: Azure Static Web Apps CI/CD
@@ -250,14 +250,14 @@ action: "close"
```
### Microsoft.Web/staticSites/resetapikey/action
Com essa permissão é possível **resetar a API key do static web app**, potencialmente DoSing os workflows que implantam automaticamente o app.
Com essa permissão é possível **redefinir a API key do static web app**, potencialmente DoSing os workflows que implantam o app automaticamente.
```bash
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/resetapikey?api-version=2019-08-01"
```
### Microsoft.Web/staticSites/createUserInvitation/action
Esta permissão permite **criar um convite para um usuário** para acessar caminhos protegidos dentro de uma static web app com um papel específico.
Esta permissão permite **criar um convite para um usuário** para acessar caminhos protegidos dentro de uma static web app com um papel específico dado.
O login está localizado em um caminho como `/.auth/login/github` para github ou `/.auth/login/aad` para Entra ID e um usuário pode ser convidado com o seguinte comando:
```bash
@@ -272,12 +272,12 @@ az staticwebapp users invite \
```
### Pull Requests
Por padrão Pull Requests de uma branch no mesmo repo serão automaticamente compilados e construídos em um ambiente de staging. Isso poderia ser abusado por um atacante com acesso de escrita ao repo, mas sem conseguir contornar as branch protections da branch de produção (normalmente `main`) para **implantar uma versão maliciosa do app** na URL de staging.
Por padrão Pull Requests de um branch no mesmo repo serão automaticamente compilados e buildados em um ambiente de staging. Isso poderia ser explorado por um atacante com acesso de escrita no repositório mas sem conseguir contornar as proteções de branch do ramo de produção (normalmente `main`) para **implantar uma versão maliciosa do app** na URL de staging.
The staging URL has this format: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` like: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
A staging URL tem este formato: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` como: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
> [!TIP]
> Note that by default external PRs won't run workflows unless they have merged at least 1 PR into the repository. An attacker could send a valid PR to the repo and **then send a malicious PR** to the repo to deploy the malicious app in the stagging environment. HOWEVER, there is an unexpected protection, the default Github Action to deploy into the static web app need access to the secret containing the deployment token (like `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) eve if the deployment is done with the IDToken. This means that because an external PR won't have access to this secret and an external PR cannot change the Workflow to place here an arbitrary token without a PR getting accepted, **this attack won't really work**.
> Note que por padrão PRs externas não executarão workflows a menos que tenham mesclado pelo menos 1 PR no repositório. Um atacante poderia enviar um PR válido para o repo e **então enviar um PR malicioso** para o repo para implantar o app malicioso no ambiente de staging. NO ENTANTO, existe uma proteção inesperada: a Github Action padrão para fazer o deploy na static web app precisa de acesso ao secret contendo o deployment token (como `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) mesmo se o deploy for feito com o IDToken. Isso significa que, como um PR externo não terá acesso a esse secret e um PR externo não pode alterar o Workflow para colocar aqui um token arbitrário sem que um PR seja aceito, **esse ataque não vai realmente funcionar**.
{{#include ../../../banners/hacktricks-training.md}}