Az Static Web Apps

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Static Web Apps Temel Bilgiler

Azure Static Web Apps, GitHub gibi depolardan otomatik CI/CD ile statik web uygulamalarını barındırmak için bir bulut hizmetidir. Küresel içerik dağıtımı, sunucusuz arka uçlar ve yerleşik HTTPS sunarak güvenli ve ölçeklenebilir hale getirir. Ancak, hizmet “statik” olarak adlandırılsa da, tamamen güvenli olduğu anlamına gelmez. Yanlış yapılandırılmış CORS, yetersiz kimlik doğrulama ve içerik değiştirme gibi riskler, uygun şekilde yönetilmezse uygulamaları XSS ve veri sızıntısı gibi saldırılara maruz bırakabilir.

Dağıtım Kimlik Doğrulaması

Tip

Bir Statik Uygulama oluşturulduğunda, Dağıtım yetkilendirme politikası olarak Dağıtım token’ı ve GitHub Actions iş akışı arasında seçim yapabilirsiniz.

  • Dağıtım token’ı: Bir token oluşturulur ve dağıtım sürecini kimlik doğrulamak için kullanılır. Bu token’a sahip olan herkes yeni bir uygulama sürümünü dağıtmak için yeterlidir. Her seferinde depo güncellendiğinde uygulamanın yeni bir sürümünü dağıtmak için token’ın gizli olduğu bir Github Action otomatik olarak depoya dağıtılır.
  • GitHub Actions iş akışı: Bu durumda, depoda çok benzer bir Github Action da dağıtılır ve token da gizli bir şekilde saklanır. Ancak, bu Github Action’ın bir farkı vardır; actions/github-script@v6 eylemini kullanarak depo IDToken’ını alır ve uygulamayı dağıtmak için kullanır.
  • Her iki durumda da Azure/static-web-apps-deploy@v1 eylemi azure_static_web_apps_api_token parametresinde bir token ile kullanılsa da, bu ikinci durumda github_id_token parametresinde IDToken ile yetkilendirme yapıldığı için, 12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345 gibi geçerli bir formatta rastgele bir token uygulamayı dağıtmak için yeterlidir.

Web Uygulaması Temel Kimlik Doğrulaması

Web Uygulamasına erişmek için bir şifre yapılandırmak mümkündür. Web konsolu, yalnızca sahneleme ortamlarını veya hem sahneleme hem de üretim ortamını korumak için yapılandırılmasına izin verir.

Yazma anında şifre korumalı bir web uygulamasının görünümü şöyle:

Herhangi bir şifrenin kullanılıp kullanılmadığını ve hangi ortamların korunduğunu görmek mümkündür:

az rest --method GET \
--url "/subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2024-04-01"

Ancak bu, şifreyi düz metin olarak göstermeyecek, sadece şöyle bir şey gösterecek: "password": "**********************".

### Yollar ve Rolleri

Yollar, bir statik web uygulaması içinde gelen HTTP isteklerinin nasıl işleneceğini tanımlar. staticwebapp.config.json dosyasında yapılandırılan bu yollar, URL yeniden yazma, yönlendirmeler, erişim kısıtlamaları ve rol tabanlı yetkilendirme gibi işlemleri kontrol ederek, kaynakların doğru bir şekilde işlenmesini ve güvenliğini sağlar.

Bazı örnekler:

{
"routes": [
{
"route": "/",
"rewrite": "/index.html"
},
{
"route": "/about",
"rewrite": "/about.html"
},
{
"route": "/api/*",
"allowedRoles": ["authenticated"]
},
{
"route": "/admin",
"redirect": "/login",
"statusCode": 302
},
{
"route": "/google",
"redirect": "https://google.com",
"statusCode": 307
}
],
"navigationFallback": {
"rewrite": "/index.html",
"exclude": ["/api/*", "/assets/*"]
}
}

Not edin ki bir rol ile bir yolu korumak mümkündür, bu durumda kullanıcıların uygulamaya kimlik doğrulaması yapması ve bu role sahip olmaları gerekecektir. Ayrıca, belirli kullanıcıların EntraID, Facebook, GitHub, Google, Twitter üzerinden giriş yaparak belirli rolleri almasını sağlayan davetiye oluşturmak da mümkündür; bu, uygulama içinde ayrıcalıkları artırmak için faydalı olabilir.

Tip

Uygulamayı, staticwebapp.config.json dosyasındaki değişikliklerin kabul edilmediği şekilde yapılandırmanın mümkün olduğunu unutmayın. Bu durumda, sadece dosyayı Github’dan değiştirmek yeterli olmayabilir, aynı zamanda uygulamadaki ayarı değiştirmek de gereklidir.

Aşama URL’si şu formatta: https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain> örneğin: https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net

Snippet’ler

Bir statik web uygulaması içinde yüklenecek HTML snippet’lerini depolamak mümkündür. Bu, uygulamaya kötü niyetli kod enjekte etmek için kullanılabilir, örneğin kimlik bilgilerini çalmak için bir JS kodu, bir keylogger… Ayrıcalık artırma bölümünde daha fazla bilgi bulunmaktadır.

Yönetilen Kimlikler

Azure Static Web Apps, yönetilen kimlikler kullanacak şekilde yapılandırılabilir, ancak bu SSS’de belirtildiği gibi, yalnızca kimlik doğrulama amaçları için Azure Key Vault’tan gizli bilgileri çıkarmak için desteklenmektedir, diğer Azure kaynaklarına erişim için değil.

Daha fazla bilgi için, bir statik uygulamada bir vault gizli anahtarı kullanma ile ilgili Azure kılavuzunu https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets adresinde bulabilirsiniz.

Sayım

# List Static Webapps
az staticwebapp list --output table

# Get Static Webapp details
az staticwebapp show --name <name> --resource-group <res-group> --output table

# Get appsettings
az staticwebapp appsettings list --name <name>

# Get env information
az staticwebapp environment list --name <name>
az staticwebapp environment functions --name <name>

# Get API key
az staticwebapp secrets list --name <name>

# Get invited users
az staticwebapp users list --name <name>

# Get current snippets
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/trainingdemo/snippets?api-version=2022-03-01"

# Get database connections
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections?api-version=2021-03-01"

## Once you have the database connection name ("default" by default) you can get the connection string with the credentials
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections/default/show?api-version=2021-03-01"

# Check connected backends
az staticwebapp backends show --name <name> --resource-group <res-group>

Web Uygulamaları Oluşturma Örnekleri

Aşağıdaki bağlantıda bir web uygulaması oluşturmak için güzel bir örnek bulabilirsiniz: https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github

  1. Depoyu https://github.com/staticwebdev/react-basic/generate GitHub hesabınıza fork edin ve adını my-first-static-web-app olarak belirleyin.
  2. Azure portalında, Github erişimini yapılandırarak ve daha önce fork edilen yeni depoyu seçerek bir Statik Web Uygulaması oluşturun.
  3. Oluşturun, birkaç dakika bekleyin ve yeni sayfanızı kontrol edin!

Yetki Yükseltme ve Sonrası

Azure Statik Web Uygulamaları’nda yetki yükseltme ve sonrası hakkında tüm bilgilere aşağıdaki bağlantıdan ulaşabilirsiniz:

Az - Static Web App Privesc

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin