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 da 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 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
},
{
"route": "/google",
"redirect": "https://google.com",
"statusCode": 307
}
],
"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 aplikaciju 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

Napomena 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.

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

Snippets

Moguće je čuvati HTML snippete unutar statičke web aplikacije koja će biti učitana unutar aplikacije. Ovo se može koristiti za ubacivanje malicioznog koda u aplikaciju, kao što je JS kod za krađu kredencijala, keylogger... Više informacija u sekciji o eskalaciji privilegija.

Managed Identities

Azure Static Web Apps mogu biti konfigurisane da koriste managed identities, međutim, kao što je pomenuto u ovom FAQ, one su podržane 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.

Enumeration

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

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