mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-30 22:50:43 -08:00
Translated ['src/pentesting-ci-cd/ansible-tower-awx-automation-controlle
This commit is contained in:
@@ -1,23 +1,23 @@
|
||||
# Az - Statische Web-Apps
|
||||
# Az Static Web Apps
|
||||
|
||||
{{#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. 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.
|
||||
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.
|
||||
> 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, reicht in diesem zweiten Fall ein zufälliges Token mit einem gültigen Format wie `12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345` aus, um die App bereitzustellen, da die Autorisierung mit dem IDToken im `github_id_token`-Parameter erfolgt.
|
||||
- **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@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.
|
||||
|
||||
### 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.
|
||||
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:
|
||||
|
||||
@@ -28,9 +28,9 @@ Es ist möglich zu sehen, **ob ein Passwort verwendet wird** und welche Umgebung
|
||||
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": "**********************"`.
|
||||
Allerdings **wird das Passwort nicht im Klartext angezeigt**, sondern nur etwas wie: `"password": "**********************"`.
|
||||
|
||||
### Routen & Rollen
|
||||
### 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.
|
||||
|
||||
@@ -54,6 +54,11 @@ Einige Beispiele:
|
||||
"route": "/admin",
|
||||
"redirect": "/login",
|
||||
"statusCode": 302
|
||||
},
|
||||
{
|
||||
"route": "/google",
|
||||
"redirect": "https://google.com",
|
||||
"statusCode": 307
|
||||
}
|
||||
],
|
||||
"navigationFallback": {
|
||||
@@ -62,24 +67,27 @@ Einige Beispiele:
|
||||
}
|
||||
}
|
||||
```
|
||||
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.
|
||||
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`
|
||||
|
||||
### Verwaltete Identitäten
|
||||
### Snippets
|
||||
|
||||
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 Azure Key Vault für Authentifizierungszwecke zu extrahieren, nicht um auf andere Azure-Ressourcen zuzugreifen**.
|
||||
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.
|
||||
|
||||
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.
|
||||
### Managed Identities
|
||||
|
||||
## Aufzählung
|
||||
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**.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
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
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
```bash
|
||||
# List Static Webapps
|
||||
az staticwebapp list --output table
|
||||
@@ -100,6 +108,10 @@ 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"
|
||||
@@ -111,12 +123,10 @@ az rest --method POST \
|
||||
# Check connected backends
|
||||
az staticwebapp backends show --name <name> --resource-group <res-group>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{{#endtab }}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
```powershell
|
||||
{{#tab name="Az Powershell" }}
|
||||
```bash
|
||||
Get-Command -Module Az.Websites
|
||||
|
||||
# Retrieves details of a specific Static Web App in the specified resource group.
|
||||
@@ -159,22 +169,21 @@ Get-AzStaticWebAppUser -ResourceGroupName <ResourceGroupName> -Name <Name> -Auth
|
||||
Get-AzStaticWebAppUserProvidedFunctionApp -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
{{#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](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 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)
|
||||
|
||||
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
|
||||
2. Erstellen Sie im Azure-Portal eine Static Web App, indem Sie den Github-Zugriff konfigurieren und das zuvor geforkte neue Repository auswählen
|
||||
3. 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:
|
||||
Alle Informationen zur Privilegieneskalation und Post-Exploitation in Azure Static Web Apps finden Sie im folgenden Link:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-static-web-apps-privesc.md
|
||||
|
||||
Reference in New Issue
Block a user