Az - Static Web Apps

Reading time: 8 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Osnovne informacije o statičkim web aplikacijama

Azure Static Web Apps je cloud usluga za hostovanje statičkih web aplikacija sa automatskim CI/CD iz repozitorijuma kao što je GitHub. Pruža globalnu isporuku sadržaja, serverless backend, i ugrađeni HTTPS, čineći je sigurnom i skalabilnom. Međutim, čak i ako se usluga naziva "statičkom", to ne znači da je potpuno sigurna. Rizici uključuju pogrešno konfigurisane CORS, nedovoljnu autentifikaciju i manipulaciju sadržajem, što može izložiti aplikacije napadima poput XSS i curenja podataka ako se ne upravlja pravilno.

Autentifikacija prilikom implementacije

tip

Kada se kreira statička aplikacija, možete odabrati politiku autorizacije implementacije između tokena za implementaciju i GitHub Actions radnog toka.

  • Token za implementaciju: Token se generiše i koristi za autentifikaciju procesa implementacije. Svako ko ima ovaj token je dovoljno da implementira novu verziju aplikacije. Github Action se automatski implementira u repozitorijumu sa tokenom u tajni kako bi se implementirala nova verzija aplikacije svaki put kada se repozitorijum ažurira.
  • GitHub Actions radni tok: U ovom slučaju, vrlo sličan Github Action se takođe implementira u repozitorijumu i token se takođe čuva u tajni. Međutim, ovaj Github Action ima razliku, koristi actions/github-script@v6 akciju da dobije IDToken repozitorijuma i koristi ga za implementaciju aplikacije.
  • Čak i ako se u oba slučaja koristi akcija Azure/static-web-apps-deploy@v1 sa tokenom u azure_static_web_apps_api_token parametru, u ovom drugom slučaju, nasumični token sa validnim formatom kao što je 12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345 je samo dovoljno da se implementira aplikacija jer se autorizacija vrši sa IDToken-om u github_id_token parametru.

Osnovna autentifikacija web aplikacije

Moguće je konfigurisati lozinku za pristup web aplikaciji. Web konzola omogućava da se konfiguriše da štiti samo staging okruženja ili i staging i produkcijsko.

Ovako izgleda web aplikacija zaštićena lozinkom u trenutku pisanja:

Moguće je videti da li se koristi neka lozinka i koja okruženja su zaštićena sa:

bash
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"

Međutim, ovo neće prikazati lozinku u čistom tekstu, već nešto poput: "password": "**********************".

Rute i Uloge

Rute definišu kako se obrađuju dolazni HTTP zahtevi unutar statičke web aplikacije. Konfigurisane u staticwebapp.config.json datoteci, kontrolišu preusmeravanje URL-a, preusmeravanja, ograničenja pristupa i autorizaciju zasnovanu na ulogama, obezbeđujući pravilno rukovanje resursima i bezbednost.

Neki primeri:

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

Napomena kako je moguće zaštititi putanju sa ulogom, tada će korisnici morati da se autentifikuju u aplikaciji i dobiju tu ulogu da bi pristupili putanji. Takođe je moguće napraviti pozivnice koje dodeljuju specifične uloge specifičnim korisnicima koji se prijavljuju putem EntraID, Facebook-a, GitHub-a, Google-a, Twitter-a, što može biti korisno za eskalaciju privilegija unutar aplikacije.

tip

Imajte na umu da je moguće konfigurisati aplikaciju tako da promene u staticwebapp.config.json datoteci nisu prihvaćene. U ovom slučaju, možda neće biti dovoljno samo promeniti datoteku sa GitHub-a, već i promeniti podešavanje u aplikaciji.

Staging URL ima ovaj format: https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain> kao: https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net

Upravljane identitete

Azure Static Web Apps mogu biti konfigurisane da koriste upravljane identitete, međutim, kao što je pomenuto u ovom FAQ, oni su podržani samo za izvlačenje tajni iz Azure Key Vault-a u svrhe autentifikacije, a ne za pristup drugim Azure resursima.

Za više informacija možete pronaći Azure vodič o korišćenju tajne iz vault-a u statičkoj aplikaciji na https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets.

Enumeracija

{% tabs %} {% tab title="az cli" %} {% code overflow="wrap" %}

bash
# 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 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>

{% endcode %} {% endtab %}

{% tab title="Az PowerShell" %} {% code overflow="wrap" %}

powershell
Get-Command -Module Az.Websites

# Retrieves details of a specific Static Web App in the specified resource group.
Get-AzStaticWebApp -ResourceGroupName <ResourceGroupName> -Name <Name>

# Retrieves the build details for a specific Static Web App.
Get-AzStaticWebAppBuild -ResourceGroupName <ResourceGroupName> -Name <Name>

# Retrieves the application settings for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>

# Retrieves functions for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildFunction -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>

# Retrieves function app settings for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildFunctionAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>

# Retrieves the configured roles for a Static Web App.
Get-AzStaticWebAppConfiguredRole -ResourceGroupName <ResourceGroupName> -Name <Name>

# Retrieves the custom domains configured for a Static Web App.
Get-AzStaticWebAppCustomDomain -ResourceGroupName <ResourceGroupName> -Name <Name>

# Retrieves details of the functions associated with a Static Web App.
Get-AzStaticWebAppFunction -ResourceGroupName <ResourceGroupName> -Name <Name>

# Retrieves the app settings for the function app associated with a Static Web App.
Get-AzStaticWebAppFunctionAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name>

# Retrieves the secrets for a Static Web App.
Get-AzStaticWebAppSecret -ResourceGroupName <ResourceGroupName> -Name <Name>

# Retrieves general app settings for a Static Web App.
Get-AzStaticWebAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name>

# Retrieves user details for a Static Web App with a specified authentication provider.
Get-AzStaticWebAppUser -ResourceGroupName <ResourceGroupName> -Name <Name> -AuthProvider <AuthProvider>

# Retrieves user-provided function apps associated with a Static Web App.
Get-AzStaticWebAppUserProvidedFunctionApp -ResourceGroupName <ResourceGroupName> -Name <Name>

{% endcode %} {% endtab %} {% endtabs %}

Primeri za generisanje Web Aplikacija

Možete pronaći lep primer za generisanje web aplikacije na sledećem linku: https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github

  1. Forkujte repozitorijum https://github.com/staticwebdev/react-basic/generate na vaš GitHub nalog i nazovite ga my-first-static-web-app
  2. U Azure portalu kreirajte Static Web App konfigurišući pristup Github-u i birajući prethodno forkovani novi repozitorijum
  3. Kreirajte ga, sačekajte nekoliko minuta i proverite vašu novu stranicu!

Eskalacija privilegija i Post Eksploatacija

Sve informacije o eskalaciji privilegija i post eksploataciji u Azure Static Web Apps mogu se pronaći na sledećem linku:

Az - Static Web App Privesc

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks