Az Static Web Apps
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Podstawowe informacje o statycznych aplikacjach internetowych
Azure Static Web Apps to usługa chmurowa do hostowania statycznych aplikacji internetowych z automatycznym CI/CD z repozytoriów takich jak GitHub. Oferuje globalną dostawę treści, bezserwerowe zaplecza i wbudowane HTTPS, co czyni ją bezpieczną i skalowalną. Jednak nawet jeśli usługa nazywa się “statyczna”, nie oznacza to, że jest całkowicie bezpieczna. Ryzyka obejmują źle skonfigurowany CORS, niewystarczającą autoryzację i manipulację treścią, co może narażać aplikacje na ataki takie jak XSS i wyciek danych, jeśli nie są odpowiednio zarządzane.
Autoryzacja wdrożenia
Tip
Gdy tworzona jest aplikacja statyczna, możesz wybrać politykę autoryzacji wdrożenia pomiędzy tokenem wdrożenia a workflow GitHub Actions.
- Token wdrożenia: Generowany jest token, który jest używany do autoryzacji procesu wdrożenia. Każdy, kto ma ten token, wystarczy, aby wdrożyć nową wersję aplikacji. Github Action jest automatycznie wdrażany w repozytorium z tokenem w sekrecie, aby wdrożyć nową wersję aplikacji za każdym razem, gdy repozytorium jest aktualizowane.
- Workflow GitHub Actions: W tym przypadku bardzo podobna akcja GitHub jest również wdrażana w repozytorium, a token jest również przechowywany w sekrecie. Jednak ta akcja GitHub ma różnicę, używa akcji
actions/github-script@v6, aby uzyskać IDToken repozytorium i użyć go do wdrożenia aplikacji. - Nawet jeśli w obu przypadkach używana jest akcja
Azure/static-web-apps-deploy@v1z tokenem w parametrzeazure_static_web_apps_api_token, w tym drugim przypadku losowy token o formacie ważnym jak12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345wystarczy, aby wdrożyć aplikację, ponieważ autoryzacja odbywa się za pomocą IDToken w parametrzegithub_id_token.
Podstawowa autoryzacja aplikacji internetowej
Możliwe jest skonfigurowanie hasła do uzyskania dostępu do aplikacji internetowej. Konsola internetowa pozwala na skonfigurowanie jej w celu ochrony tylko środowisk stagingowych lub zarówno stagingowych, jak i produkcyjnych.
Tak wygląda aplikacja internetowa chroniona hasłem w momencie pisania:

Możliwe jest sprawdzenie czy jakiekolwiek hasło jest używane i które środowiska są chronione za pomocą:
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"
Jednak to nie pokaże hasła w postaci czystego tekstu, tylko coś takiego: "password": "**********************".
### Trasy i Role
Trasy definiują jak obsługiwane są przychodzące żądania HTTP w ramach statycznej aplikacji webowej. Skonfigurowane w pliku staticwebapp.config.json, kontrolują przepisywanie URL, przekierowania, ograniczenia dostępu oraz autoryzację opartą na rolach, zapewniając odpowiednie zarządzanie zasobami i bezpieczeństwo.
Kilka przykładów:
{
"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/*"]
}
}
Zauważ, że możliwe jest ochronienie ścieżki za pomocą roli, wtedy użytkownicy będą musieli uwierzytelnić się w aplikacji i otrzymać tę rolę, aby uzyskać dostęp do ścieżki. Możliwe jest również tworzenie zaproszeń przyznających określone role konkretnym użytkownikom logującym się przez EntraID, Facebook, GitHub, Google, Twitter, co może być przydatne do eskalacji uprawnień w aplikacji.
Tip
Zauważ, że możliwe jest skonfigurowanie aplikacji tak, aby zmiany w pliku
staticwebapp.config.jsonnie były akceptowane. W takim przypadku może nie wystarczyć tylko zmiana pliku z Githuba, ale także zmiana ustawienia w aplikacji.
URL staging ma ten format: https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain> jak: https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net
Snippets
Możliwe jest przechowywanie fragmentów HTML w statycznej aplikacji webowej, które będą ładowane w aplikacji. Może to być użyte do wstrzykiwania złośliwego kodu do aplikacji, jak kod JS do kradzieży poświadczeń, keylogger… Więcej informacji w sekcji eskalacji uprawnień.
Managed Identities
Azure Static Web Apps mogą być skonfigurowane do używania managed identities, jednak, jak wspomniano w tym FAQ, są one wspierane tylko do wyciągania sekretów z Azure Key Vault w celach uwierzytelniania, a nie do uzyskiwania dostępu do innych zasobów Azure.
Aby uzyskać więcej informacji, możesz znaleźć przewodnik Azure dotyczący używania sekretu z vault w statycznej aplikacji pod adresem https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets.
Enumeration
# 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>
Przykłady generowania aplikacji webowych
Możesz znaleźć ładny przykład generowania aplikacji webowej pod tym linkiem: https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github
- Forkuj repozytorium https://github.com/staticwebdev/react-basic/generate do swojego konta GitHub i nazwij je
my-first-static-web-app - W portalu Azure utwórz Static Web App, konfigurując dostęp do GitHub i wybierając wcześniej forkowane nowe repozytorium
- Utwórz je, poczekaj kilka minut i sprawdź swoją nową stronę!
Eskalacja uprawnień i post eksploitacja
Wszystkie informacje na temat eskalacji uprawnień i post eksploitacji w Azure Static Web Apps można znaleźć pod tym linkiem:
Odniesienia
- https://learn.microsoft.com/en-in/azure/app-service/overview
- https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

