Az - Statische Web-Apps
Reading time: 8 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundinformationen zu Statischen Web-Apps
Azure Static Web Apps ist ein Cloud-Dienst zum Hosten von statischen Web-Apps mit automatischem CI/CD aus Repositories wie GitHub. Es bietet globale Inhaltsbereitstellung, serverlose Backends und integriertes HTTPS, was es sicher und skalierbar macht. Allerdings bedeutet der Name "statisch" nicht, dass es völlig sicher ist. Risiken umfassen falsch konfigurierte CORS, unzureichende Authentifizierung und Inhaltsmanipulation, die Apps Angriffen wie XSS und Datenlecks aussetzen können, wenn sie nicht ordnungsgemäß verwaltet werden.
Bereitstellungsauthentifizierung
tip
Wenn eine Statische App erstellt wird, können Sie die Bereitstellungsautorisierungspolitik zwischen Bereitstellungstoken und GitHub Actions-Workflow wählen.
- Bereitstellungstoken: Ein Token wird generiert und verwendet, um den Bereitstellungsprozess zu authentifizieren. Jeder mit diesem Token kann eine neue Version der App bereitstellen. Eine Github Action wird automatisch im Repo mit dem Token in einem Geheimnis bereitgestellt, um jedes Mal eine neue Version der App bereitzustellen, wenn das Repo aktualisiert wird.
- GitHub Actions-Workflow: In diesem Fall wird eine sehr ähnliche Github Action ebenfalls im Repo bereitgestellt und das Token wird ebenfalls in einem Geheimnis gespeichert. Diese Github Action hat jedoch einen Unterschied, sie verwendet die
actions/github-script@v6
Action, um das IDToken des Repositories zu erhalten und es zur Bereitstellung der App zu verwenden. - Selbst wenn in beiden Fällen die Action
Azure/static-web-apps-deploy@v1
mit einem Token imazure_static_web_apps_api_token
-Parameter verwendet wird, reicht in diesem zweiten Fall ein zufälliges Token mit einem gültigen Format wie12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345
aus, um die App bereitzustellen, da die Autorisierung mit dem IDToken imgithub_id_token
-Parameter erfolgt.
Grundlegende Authentifizierung für Web-Apps
Es ist möglich, ein Passwort zu konfigurieren, um auf die Web-App zuzugreifen. Die Web-Konsole ermöglicht es, es so zu konfigurieren, dass nur Staging-Umgebungen oder sowohl Staging- als auch Produktionsumgebungen geschützt werden.
So sieht eine passwortgeschützte Web-App zum Zeitpunkt des Schreibens aus:

Es ist möglich zu sehen, ob ein Passwort verwendet wird und welche Umgebungen geschützt sind mit:
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"
Allerdings wird das das Passwort nicht im Klartext anzeigen, sondern nur etwas wie: "password": "**********************"
.
Routen & Rollen
Routen definieren wie eingehende HTTP-Anfragen innerhalb einer statischen Webanwendung behandelt werden. Konfiguriert in der staticwebapp.config.json
-Datei, steuern sie URL-Umschreibungen, Weiterleitungen, Zugriffsrestriktionen und rollenbasierte Autorisierung, um eine ordnungsgemäße Ressourcenverwaltung und Sicherheit zu gewährleisten.
Einige Beispiele:
{
"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/*"]
}
}
Beachten Sie, wie es möglich ist, einen Pfad mit einer Rolle zu schützen. Benutzer müssen sich dann bei der App authentifizieren und diese Rolle erhalten, um auf den Pfad zuzugreifen. Es ist auch möglich, Einladungen zu erstellen, die bestimmten Benutzern, die sich über EntraID, Facebook, GitHub, Google, Twitter anmelden, spezifische Rollen gewähren, was nützlich sein könnte, um Privilegien innerhalb der App zu eskalieren.
tip
Beachten Sie, dass es möglich ist, die App so zu konfigurieren, dass Änderungen an der staticwebapp.config.json
-Datei nicht akzeptiert werden. In diesem Fall könnte es nicht ausreichen, die Datei nur von Github zu ändern, sondern auch die Einstellung in der App zu ändern.
Die Staging-URL hat dieses Format: https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>
wie: https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net
Verwaltete Identitäten
Azure Static Web Apps können so konfiguriert werden, dass sie verwaltete Identitäten verwenden. Wie in dieser FAQ erwähnt, werden sie jedoch nur unterstützt, um Geheimnisse aus Azure Key Vault für Authentifizierungszwecke zu extrahieren, nicht um auf andere Azure-Ressourcen zuzugreifen.
Für weitere Informationen finden Sie in einem Azure-Leitfaden, wie Sie ein Vault-Geheimnis in einer statischen App verwenden, unter https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets.
Aufzählung
{% 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 %}
Beispiele zur Erstellung von Webanwendungen
Sie finden ein schönes Beispiel zur Erstellung einer Webanwendung unter folgendem Link: https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github
- Forken Sie das Repository https://github.com/staticwebdev/react-basic/generate in Ihr GitHub-Konto und benennen Sie es in
my-first-static-web-app
- Erstellen Sie im Azure-Portal eine Static Web App, indem Sie den Zugriff auf GitHub konfigurieren und das zuvor geforkte neue Repository auswählen
- Erstellen Sie es, warten Sie einige Minuten und überprüfen Sie Ihre neue Seite!
Privilegieneskalation und Post-Exploitation
Alle Informationen zur Privilegieneskalation und Post-Exploitation in Azure Static Web Apps finden Sie unter folgendem Link:
Referenzen
- https://learn.microsoft.com/en-in/azure/app-service/overview
- https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.