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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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 uazure_static_web_apps_api_token
parametru, u ovom drugom slučaju, nasumični token sa validnim formatom kao što je12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345
je samo dovoljno da se implementira aplikacija jer se autorizacija vrši sa IDToken-om ugithub_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:
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:
{
"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" %}
# 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" %}
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
- Forkujte repozitorijum https://github.com/staticwebdev/react-basic/generate na vaš GitHub nalog i nazovite ga
my-first-static-web-app
- U Azure portalu kreirajte Static Web App konfigurišući pristup Github-u i birajući prethodno forkovani novi repozitorijum
- 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:
Reference
- https://learn.microsoft.com/en-in/azure/app-service/overview
- https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.