Az Static 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 es nicht, dass der Dienst, auch wenn er "statisch" genannt wird, 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-Aktion, um das IDToken des Repositories zu erhalten und es zur Bereitstellung der App zu verwenden. - Selbst wenn in beiden Fällen die Aktion
Azure/static-web-apps-deploy@v1mit einem Token imazure_static_web_apps_api_token-Parameter verwendet wird, ist in diesem zweiten Fall ein zufälliges Token mit einem gültigen Format wie12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345ausreichend, 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 Passwort nicht im Klartext angezeigt, sondern nur etwas wie: "password": "**********************".
Routen und 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
},
{
"route": "/google",
"redirect": "https://google.com",
"statusCode": 307
}
],
"navigationFallback": {
"rewrite": "/index.html",
"exclude": ["/api/*", "/assets/*"]
}
}
Beachten Sie, dass es möglich ist, einen Pfad mit einer Rolle zu schützen, dann müssen sich die Benutzer 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
Snippets
Es ist möglich, HTML-Snippets innerhalb einer statischen Web-App zu speichern, die in der App geladen werden. Dies kann verwendet werden, um bösartigen Code in die App einzuschleusen, wie z.B. JS-Code zum Stehlen von Anmeldeinformationen, ein Keylogger... Weitere Informationen im Abschnitt zur Eskalation von Privilegien.
Managed Identities
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 dem Azure Key Vault für Authentifizierungszwecke zu extrahieren, nicht um auf andere Azure-Ressourcen zuzugreifen.
Für weitere Informationen finden Sie einen Azure-Leitfaden zur Verwendung eines Vault-Geheimnisses in einer statischen App unter 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>
Beispiele zur Erstellung von Webanwendungen
Sie finden ein schönes Beispiel zur Erstellung einer Webanwendung im folgenden 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 Github-Zugriff 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 im folgenden 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.
HackTricks Cloud