Embora os jobs não sejam de longa duração como os aplicativos de contêiner, você pode explorar a capacidade de substituir a configuração do comando do job ao iniciar uma execução. Ao criar um template de job personalizado (por exemplo, substituindo o comando padrão por um shell reverso), você pode obter acesso ao shell dentro do contêiner que executa o job.
Embora os jobs não sejam de longa duração como os aplicativos de contêiner, você pode explorar a capacidade de substituir a configuração do comando do job ao iniciar uma execução. Ao criar um modelo de job personalizado (por exemplo, substituindo o comando padrão por um shell reverso), você pode obter acesso ao shell dentro do contêiner que executa o job.
```bash
# Retrieve the current job configuration and save its template:
az containerapp job show --name <job-name> --resource-group <res-group> --output yaml > job-template.yaml
@@ -173,5 +173,10 @@ Parece que com essas permissões deveria ser possível iniciar um job. Isso pode
Não consegui fazê-lo funcionar, mas de acordo com os parâmetros permitidos, deveria ser possível.
Para mais informações sobre este serviço, consulte:
{{#ref}}
../az-services/az-static-web-apps.md
@@ -12,164 +12,153 @@ For more information about this service check:
### Microsoft.Web/staticSites/snippets/write
It's possible to make a static web page load arbitary HTML code by creating a snippet. This could allow an attacker to inject JS code inside the web app and steal sensitive information such as credentials or mnemonic keys (in web3 wallets).
The fllowing command create an snippet that will always be loaded by the web app::
É possível fazer uma página web estática carregar código HTML arbitrário criando um snippet. Isso poderia permitir que um atacante injetasse código JS dentro do aplicativo web e roubasse informações sensíveis, como credenciais ou chaves mnemônicas (em carteiras web3).
O seguinte comando cria um snippet que sempre será carregado pelo aplicativo web::
Running the following command it's possible to **read the third party credentials** configured in the current account. Note that if for example some Github credentials are configured in a different user, you won't be able to access the token from a different one.
Executando o seguinte comando, é possível **ler as credenciais de terceiros** configuradas na conta atual. Note que, se por exemplo, algumas credenciais do Github estiverem configuradas em um usuário diferente, você não poderá acessar o token de outro.
It's possible to **overwrite a file inside the Github repo**containing the app through Azure having the **Github token** sending a request such as the following which will indicate the path of the file to overwrite, the content of the file and the commit message.
É possível **substituir um arquivo dentro do repositório do Github**que contém o aplicativo através do Azure, enviando um pedido com o **token do Github** como o seguinte, que indicará o caminho do arquivo a ser substituído, o conteúdo do arquivo e a mensagem de commit.
This can be abused by attackers to basically **change the content of the web app**to serve malicious content (steal credentials, mnemonic keys...) or just to **re-route certain paths** to their own servers by overwriting the`staticwebapp.config.json` file.
Isso pode ser explorado por atacantes para basicamente **mudar o conteúdo do aplicativo web**para servir conteúdo malicioso (roubar credenciais, chaves mnemônicas...) ou apenas para **redirecionar certos caminhos** para seus próprios servidores, substituindo o arquivo`staticwebapp.config.json`.
> [!WARNING]
> Note that if an attacker manages to compromise the Github repo in any way, they can also overwrite the file directly from Github.
> Note que se um atacante conseguir comprometer o repositório do Github de qualquer forma, ele também pode substituir o arquivo diretamente do Github.
```bash
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent"\
-H "Content-Type: application/json"\
-d '{
"commit": {
"message": "Update static web app route configuration",
With this permission, it's possible to **modify the password** protecting a static web app or even unprotect every environment by sending a request such as the following:
Com esta permissão, é possível **modificar a senha** que protege um aplicativo web estático ou até mesmo desproteger todos os ambientes enviando uma solicitação como a seguinte:
Então, para **atualizar um aplicativo usando o token**, você poderia executar o seguinte comando. 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 como padrão para usar. Portanto, a imagem e os parâmetros podem mudar no futuro.
Then, in order to **update an app using the token** you could run the following command. Note that this command was extracted checking **how to Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) works**, as it's the one Azure set by default ot use. So the image and paarements could change in the future.
1. Download the repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (or any other repo you want to deploy) and run `cd react-basic`.
2. Change the code you want to deploy
3. Deploy it running (Remember to change the `<api-token>`):
> [!TIP]
> Para implantar o aplicativo, você poderia 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 seguintes passos brutos:
1. Baixe o repositório [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (ou qualquer outro repositório que você queira implantar) e execute `cd react-basic`.
2. Altere o código que você deseja implantar.
3. Implante-o executando (lembre-se de mudar o `<api-token>`):
> Even if you have the token you won't be able to deploy the app if the **Deployment Authorization Policy** is set to **Github**. For using the token you will need the permission `Microsoft.Web/staticSites/write` to change the deployment method to use th APi token.
> [!WARNING]
> Mesmo que você tenha o token, não será possível implantar o aplicativo se a **Política de Autorização de Implantação** 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 o token da API.
### Microsoft.Web/staticSites/write
With this permission it's possible to **change the source of the static web app to a different Github repository**, however, it won't be automatically provisioned as this must be done from a Github Action.
Com essa permissão, é possível **mudar a fonte do aplicativo web estático para um repositório Github diferente**, no entanto, ele não será provisionado automaticamente, pois isso deve ser feito a partir de uma Ação do Github.
However, if the **Deployment Authotization Policy** is set to **Github**, it's possible to **update the app from the new source repository!**.
In case the **Deployment Authorization Policy** is not set to Github, you can change it with the same permission `Microsoft.Web/staticSites/write`.
No entanto, se a **Política de Autorização de Implantação** estiver definida como **Github**, é possível **atualizar o aplicativo a partir do novo repositório de origem!**.
Caso a **Política de Autorização de Implantação** não esteja definida como Github, você pode alterá-la com a mesma permissão `Microsoft.Web/staticSites/write`.
```bash
# Change the source to a different Github repository
az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main
"repositoryToken": "<github_token>" # az rest --method GET --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
}
"properties": {
"allowConfigFileUpdates": true,
"stagingEnvironmentPolicy": "Enabled",
"buildProperties": {
"appLocation": "/",
"apiLocation": "",
"appArtifactLocation": "build"
},
"deploymentAuthPolicy": "GitHub",
"repositoryToken": "<github_token>" # az rest --method GET --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
}
}'
```
Example Github Action to deploy the app:
Exemplo de Github Action para implantar o aplicativo:
azure_static_web_apps_api_token:"12345cbb198a77a092ff885782a62a15d5aef5e3654cac1234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345"# A valid formatted token is needed although it won't be used for authentication
action:"upload"
###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
# For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
app_location:"/"# App source code path
api_location:""# Api source code path - optional
output_location:"build"# Built app content directory - optional
azure_static_web_apps_api_token:"12345cbb198a77a092ff885782a62a15d5aef5e3654cac1234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345"# A valid formatted token is needed although it won't be used for authentication
action:"upload"
###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
# For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
app_location:"/"# App source code path
api_location:""# Api source code path - optional
output_location:"build"# Built app content directory - optional
With this permision it's possible to **reset the API key of the static web app** potentially DoSing the workflows that automatically deploy the app.
Com esta permissão, é possível **reiniciar a chave da API do aplicativo web estático**, potencialmente causando DoS nos fluxos de trabalho que implantam automaticamente o aplicativo.
This permission allows to **create an invitation to a user** to access protected paths inside a static web app ith a specific given role.
The login is located in a path such as `/.auth/login/github` for github or `/.auth/login/aad` for Entra ID and a user can be invited with the following command:
Esta permissão permite **criar um convite para um usuário** acessar caminhos protegidos dentro de um aplicativo web estático 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:
--domain mango-beach-071d9340f.4.azurestaticapps.net # Domain of the app \
--invitation-expiration-in-hours 168# 7 days is max \
--name my-first-static-web-app # Name of the app\
--roles "contributor,administrator"# Comma sepparated list of roles\
--user-details username # Github username in this case\
--resource-group Resource_Group_1 # Resource group of the app
```
### Pull Requests
By default Pull Requests from a branch in the same repo will be automatically compiled and build in a staging environment. This could be abused by an attacker with write access over the repo but without being able to bypass branch protections of the production branch (usually `main`) to **deploy a malicious version of the app**in the statagging URL.
Por padrão, Pull Requests de um branch no mesmo repositório serão automaticamente compilados e construídos em um ambiente de staging. Isso pode ser explorado por um atacante com acesso de escrita ao repositório, mas sem conseguir contornar as proteções do branch de produção (geralmente `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 URL de staging 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 externos 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 repositório e **então enviar um PR malicioso** para o repositório para implantar o app malicioso no ambiente de staging. NO ENTANTO, há uma proteção inesperada, a ação padrão do Github para implantar no aplicativo web estático precisa de acesso ao segredo contendo o token de implantação (como `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`), mesmo que a implantação seja feita com o IDToken. Isso significa que, como um PR externo não terá acesso a esse segredo 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 realmente não funcionará**.
Esta é uma **extensão de VM** que pertence à Microsoft e utiliza PowerShell DSC para gerenciar a configuração de VMs Windows no Azure. Portanto, pode ser usada para **executar comandos arbitrários** em VMs Windows através desta extensão:
Esta é uma **extensão de VM** que pertence à Microsoft e usa PowerShell DSC para gerenciar a configuração de VMs Windows no Azure. Portanto, pode ser usada para **executar comandos arbitrários** em VMs Windows através desta extensão:
```bash
# Content of revShell.ps1
Configuration RevShellConfig {
@@ -308,9 +308,9 @@ Esta permissão permite que um usuário **faça login como usuário em uma VM vi
Faça login via **SSH** com **`az ssh vm --name <vm-name> --resource-group <rsc-group>`** e via **RDP** com suas **credenciais regulares do Azure**.
Todas essas são as permissões necessárias para **criar uma VM com uma identidade gerenciada específica** e deixar uma **porta aberta** (22 neste caso). Isso permite que um usuário crie uma VM e se conecte a ela e **roube tokens de identidade gerenciada** para escalar privilégios a ela.
Todas essas são as permissões necessárias para **criar uma VM com uma identidade gerenciada específica** e deixar uma **porta aberta** (22 neste caso). Isso permite que um usuário crie uma VM e se conecte a ela e **roube tokens de identidade gerenciada** para escalar privilégios para ela.
Dependendo da situação, mais ou menos permissões podem ser necessárias para abusar dessa técnica.
```bash
@@ -349,7 +349,7 @@ Então, o atacante precisa ter **comprometido de alguma forma a VM** para roubar
De acordo com a [**docs**](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/compute#microsoftcompute), esta permissão permite que você gerencie o SO do seu recurso via Windows Admin Center como um administrador. Portanto, parece que isso dá acesso ao WAC para controlar as VMs...
De acordo com a [**documentação**](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/compute#microsoftcompute), esta permissão permite que você gerencie o SO do seu recurso via Windows Admin Center como um administrador. Portanto, parece que isso dá acesso ao WAC para controlar as VMs...
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.