diff --git a/src/pentesting-cloud/azure-security/az-services/az-static-web-apps.md b/src/pentesting-cloud/azure-security/az-services/az-static-web-apps.md index 7a76886d8..5492c2e94 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-static-web-apps.md +++ b/src/pentesting-cloud/azure-security/az-services/az-static-web-apps.md @@ -2,23 +2,27 @@ {{#include ../../../banners/hacktricks-training.md}} -## Grundinformationen zu statischen Web-Apps +## 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. Zu den Risiken gehören jedoch falsch konfigurierte CORS, unzureichende Authentifizierung und Inhaltsmanipulation, die Apps Angriffen wie XSS und Datenlecks aussetzen können, wenn sie nicht ordnungsgemäß verwaltet werden. +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. +> 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 im `azure_static_web_apps_api_token`-Parameter verwendet wird, ist in diesem zweiten Fall ein zufälliges Token mit einem gültigen Format wie `12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345` ausreichend, um die App bereitzustellen, da die Autorisierung mit dem IDToken im `github_id_token`-Parameter erfolgt. -### Web-App-Authentifizierung +### 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, dies so zu konfigurieren, dass nur Staging-Umgebungen oder sowohl Staging- als auch Produktionsumgebungen geschützt werden. +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: ```bash az rest --method GET \ @@ -26,7 +30,7 @@ az rest --method GET \ ``` Allerdings **wird das das Passwort nicht im Klartext anzeigen**, sondern nur etwas wie: `"password": "**********************"`. -### Routen +### 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. @@ -58,6 +62,19 @@ Einige Beispiele: } } ``` +Beachten Sie, dass 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://-..` 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](https://learn.microsoft.com/en-gb/azure/static-web-apps/faq#does-static-web-apps-support-managed-identity-) 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 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 ```bash # List Static Webapps @@ -86,19 +103,24 @@ az rest --method GET \ ## 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//resourceGroups//providers/Microsoft.Web/staticSites//databaseConnections/default/show?api-version=2021-03-01" + +# Check connected backends +az staticwebapp backends show --name --resource-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](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github) +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](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github) 1. 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` 2. Erstellen Sie im Azure-Portal eine Static Web App, indem Sie den Zugriff auf GitHub konfigurieren und das zuvor geforkte neue Repository auswählen 3. Erstellen Sie es, warten Sie einige Minuten und überprüfen Sie Ihre neue Seite! -## Post-Exploitation +## Privilegieneskalation und Post-Exploitation + +Alle Informationen zur Privilegieneskalation und Post-Exploitation in Azure Static Web Apps finden Sie unter folgendem Link: {{#ref}} -../az-privilege-escalation/az-static-web-apps-post-exploitation.md +../az-privilege-escalation/az-static-web-apps-privesc.md {{#endref}} ## Referenzen