diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md index 1ec8bc1ff..633a08d1f 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md @@ -4,7 +4,7 @@ ## Azure Static Web Apps -For more information about this service check: +Für weitere Informationen zu diesem Service siehe: {{#ref}} ../az-services/az-static-web-apps.md @@ -12,9 +12,9 @@ For more information about this service check: ### Microsoft.Web/staticSites/snippets/write -Es ist möglich, eine statische Webseite dazu zu bringen, beliebigen HTML-Code zu laden, indem man ein Snippet erstellt. Dies könnte einem Angreifer erlauben, JS-Code in die Web-App zu injizieren und sensible Informationen wie credentials oder mnemonic keys (in web3 wallets) zu stehlen. +Es ist möglich, eine statische Webseite dazu zu bringen, beliebigen HTML-Code zu laden, indem man ein snippet erstellt. Dadurch könnte ein Angreifer JS-Code in die web app injizieren und sensible Informationen wie Zugangsdaten oder mnemonic keys (in web3 wallets) stehlen. -Der folgende Befehl erstellt ein Snippet, das immer von der Web-App geladen wird:: +Der folgende Befehl erstellt ein snippet, das immer von der web app geladen wird:: ```bash az rest \ --method PUT \ @@ -31,7 +31,7 @@ az rest \ } }' ``` -### Konfigurierte Drittanbieter-Zugangsdaten auslesen +### Konfigurierte Drittanbieter-Zugangsdaten lesen Wie im App Service-Abschnitt erklärt: @@ -39,14 +39,14 @@ Wie im App Service-Abschnitt erklärt: ../az-privilege-escalation/az-app-services-privesc.md {{#endref}} -Mit dem Ausführen des folgenden Befehls ist es möglich, die im aktuellen Account konfigurierten **Zugangsdaten von Drittanbietern auszulesen**. Beachte, dass du z. B. nicht auf den Token zugreifen kannst, wenn Github-Zugangsdaten für einen anderen Benutzer konfiguriert sind. +Wenn du den folgenden Befehl ausführst, kannst du die im aktuellen Konto konfigurierten **Zugangsdaten von Drittanbietern** auslesen. Beachte, dass du z. B. nicht auf ein Token zugreifen kannst, wenn Github-Zugangsdaten für einen anderen Benutzer konfiguriert sind. ```bash az rest --method GET \ --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01" ``` Dieser Befehl gibt tokens für Github, Bitbucket, Dropbox und OneDrive zurück. -Hier findest du einige Beispielbefehle, um die tokens zu prüfen: +Hier findest du einige Befehlsbeispiele, um die tokens zu überprüfen: ```bash # GitHub – List Repositories curl -H "Authorization: token " \ @@ -69,14 +69,14 @@ curl -H "Authorization: Bearer " \ -H "Accept: application/json" \ https://graph.microsoft.com/v1.0/me/drive/root/children ``` -### Datei überschreiben - Routen, HTML, JS... +### Datei überschreiben - Routen, HTML, JS überschreiben... -Es ist möglich, eine **Datei im Github repo zu überschreiben**, die die App enthält, indem Azure den **Github token** verwendet und eine Anfrage sendet wie die folgende, die den Pfad der zu überschreibenden Datei, den Inhalt der Datei und die Commit-Nachricht angibt. +Es ist möglich, **eine Datei im Github-Repo, die die App enthält, zu überschreiben**, indem Azure mit dem **Github token** eine Anfrage sendet, die den Pfad der zu überschreibenden Datei, den Inhalt der Datei und die Commit-Nachricht angibt. -Dies kann von Angreifern missbraucht werden, um im Wesentlichen **den Inhalt der Web-App zu verändern**, um bösartige Inhalte auszuliefern (steal credentials, mnemonic keys...) oder einfach **bestimmte Pfade** durch Überschreiben der `staticwebapp.config.json`-Datei auf ihre eigenen Server umzuleiten. +Dies kann von Angreifern missbraucht werden, um **den Inhalt der Web-App zu ändern**, damit bösartiger Content ausgeliefert wird (z. B. zum Stehlen von Zugangsdaten, mnemonischen Schlüsseln...) oder einfach **bestimmte Pfade auf ihre eigenen Server umzuleiten**, indem die Datei `staticwebapp.config.json` überschrieben wird. > [!WARNING] -> Beachte, dass, wenn ein Angreifer das Github repo auf irgendeine Weise kompromittiert, er die Datei auch direkt über Github überschreiben kann. +> Beachte, dass wenn ein Angreifer es schafft, das Github-Repo in irgendeiner Weise zu kompromittieren, er die Datei auch direkt über Github überschreiben kann. ```bash curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \ -H "Content-Type: application/json" \ @@ -99,7 +99,7 @@ curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \ ``` ### Microsoft.Web/staticSites/config/write -Mit dieser Berechtigung kann man das **modify the password** einer static web app ändern oder sogar den Schutz jeder Umgebung aufheben, indem man eine Anfrage wie die folgende sendet: +Mit dieser Berechtigung ist es möglich, das Passwort zu **ändern**, das eine static web app schützt, oder sogar jede Umgebung zu entsperren, indem eine Anfrage wie die folgende gesendet wird: ```bash # Change password az rest --method put \ @@ -133,38 +133,38 @@ az rest --method put \ ``` ### Microsoft.Web/staticSites/listSecrets/action -Diese Berechtigung erlaubt es, das **API key deployment token** für die static app abzurufen. +Diese Berechtigung ermöglicht das Abrufen des **API key deployment token** für die static app. -Verwenden von az rest: +Mit az rest: ```bash az rest --method POST \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//listSecrets?api-version=2023-01-01" ``` -Verwendung von AzCLI: +Mit AzCLI: ```bash az staticwebapp secrets list --name --resource-group ``` -Then, in order to **eine App mit dem Token zu aktualisieren** können Sie den folgenden Befehl ausführen. Beachten Sie, dass dieser Befehl extrahiert wurde, indem geprüft wurde, **wie die Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) funktioniert**, da dies die von Azure standardmäßig zur Verwendung gesetzte Action ist. Daher könnten Image und Parameter in Zukunft geändert werden. +Dann können Sie, um eine App mithilfe des Tokens zu **aktualisieren**, den folgenden Befehl ausführen. Beachten Sie, dass dieser Befehl durch Analyse davon extrahiert wurde, **wie die GitHub Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) funktioniert**, da dies die von Azure standardmäßig verwendete Action ist. Daher könnten sich das Image und die Parameter in Zukunft ändern. > [!TIP] -> Um die App bereitzustellen, können Sie das **`swa`**-Tool von [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) verwenden oder alternativ die folgenden Schritte manuell ausführen: +> Zum Bereitstellen der App können Sie das **`swa`**-Tool von [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) verwenden oder den folgenden Schritten folgen: -1. Laden Sie das Repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) herunter (oder ein anderes Repo, das Sie bereitstellen möchten) und führen Sie `cd react-basic` aus. -2. Ändern Sie den Code, den Sie bereitstellen möchten -3. Führen Sie die Bereitstellung aus (denken Sie daran, `` zu ändern): +1. Laden Sie das Repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (oder ein anderes Repo, das Sie bereitstellen möchten) herunter und führen Sie `cd react-basic` aus. +2. Ändern Sie den Code, den Sie bereitstellen möchten. +3. Führen Sie zur Bereitstellung folgenden Befehl aus (denken Sie daran, das `` zu ändern): ```bash docker run --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN= INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose ``` > [!WARNING] -> Auch wenn du das Token hast, kannst du die App nicht deployen, wenn die **Deployment Authorization Policy** auf **Github** gesetzt ist. Um das Token zu verwenden, benötigst du die Berechtigung `Microsoft.Web/staticSites/write`, um die Deployment-Methode zu ändern und das API-Token zu verwenden. +> Selbst wenn Sie das Token haben, können Sie die App nicht deployen, wenn die **Deployment Authorization Policy** auf **Github** gesetzt ist. Um das Token zu verwenden, benötigen Sie die Berechtigung `Microsoft.Web/staticSites/write`, um die Deployment-Methode auf das API-Token umzustellen. ### Microsoft.Web/staticSites/write -Mit dieser Berechtigung ist es möglich, die **Quelle der static web app auf ein anderes Github-Repository zu ändern**, allerdings wird sie nicht automatisch provisioniert, da dies über eine Github Action erfolgen muss. +Mit dieser Berechtigung ist es möglich, die **Quelle der static web app auf ein anderes Github-Repository zu ändern**, jedoch wird sie nicht automatisch provisioniert, da dies über eine Github Action erfolgen muss. -Wenn die **Deployment Authorization Policy** jedoch auf **Github** gesetzt ist, ist es möglich, die **App vom neuen Quell-Repository zu aktualisieren!**. +Wenn die **Deployment Authorization Policy** jedoch auf **Github** gesetzt ist, ist es möglich, die **App aus dem neuen Quell-Repository zu aktualisieren!**. -Falls die **Deployment Authorization Policy** nicht auf **Github** gesetzt ist, kannst du sie mit derselben Berechtigung `Microsoft.Web/staticSites/write` ändern. +Falls die **Deployment Authorization Policy** nicht auf Github gesetzt ist, können Sie sie mit derselben Berechtigung `Microsoft.Web/staticSites/write` ändern. ```bash # Change the source to a different Github repository az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main @@ -187,7 +187,7 @@ az rest --method PATCH \ } }' ``` -Beispiel Github Action zur Bereitstellung der App: +Beispiel Github Action zum Bereitstellen der App: ```yaml name: Azure Static Web Apps CI/CD @@ -250,16 +250,16 @@ action: "close" ``` ### Microsoft.Web/staticSites/resetapikey/action -Mit dieser Berechtigung ist es möglich, **den API-Schlüssel der static web app zurückzusetzen**, wodurch die Workflows, die die App automatisch bereitstellen, potenziell DoSing ausgesetzt werden. +Mit dieser Berechtigung ist es möglich, **den API key der static web app zurückzusetzen** und dadurch potenziell die Workflows, die die App automatisch deployen, zu DoSing. ```bash az rest --method POST \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//resetapikey?api-version=2019-08-01" ``` ### Microsoft.Web/staticSites/createUserInvitation/action -Diese Berechtigung erlaubt es, **eine Einladung an einen Benutzer zu erstellen**, damit er auf geschützte Pfade innerhalb einer static web app mit einer bestimmten Rolle zugreifen kann. +Diese Berechtigung erlaubt es, **eine Einladung für einen Benutzer zu erstellen**, damit dieser mit einer bestimmten Rolle auf geschützte Pfade innerhalb einer static web app zugreifen kann. -Die Anmeldung befindet sich unter einem Pfad wie `/.auth/login/github` für github oder `/.auth/login/aad` für Entra ID und ein Benutzer kann mit dem folgenden Befehl eingeladen werden: +Der Login befindet sich in einem Pfad wie `/.auth/login/github` für github oder `/.auth/login/aad` für Entra ID, und ein Benutzer kann mit folgendem Befehl eingeladen werden: ```bash az staticwebapp users invite \ --authentication-provider Github # AAD, Facebook, GitHub, Google, Twitter \ @@ -272,12 +272,11 @@ az staticwebapp users invite \ ``` ### Pull Requests -By default Pull Requests from a branch in the same repo will be automatically compiled and build in a staging environment. This could be abused by an attacker with write access over the repo but without being able to bypass branch protections of the production branch (usually `main`) to **deploy a malicious version of the app** in the statagging URL. +Standardmäßig werden Pull Requests von einem Branch im selben Repo automatisch kompiliert und in einer Staging-Umgebung gebaut. Das könnte von einem Angreifer mit Schreibzugriff auf das Repo missbraucht werden, der die Branch-Schutzregeln des Produktions-Branches (in der Regel `main`) nicht umgehen kann, um **eine bösartige Version der App bereitzustellen** in der Staging-URL. -Die Staging-URL hat folgendes Format: `https://-..` wie: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net` +Die Staging-URL hat dieses Format: `https://-..` wie: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net` > [!TIP] -> Beachte, dass externe PRs standardmäßig keine Workflows ausführen, es sei denn, sie haben mindestens 1 PR in das Repository gemerged. Ein Angreifer könnte ein gültiges PR in das Repo senden und **dann ein bösartiges PR** einsenden, um die bösartige App in der Staging-Umgebung zu deployen. JEDOCH gibt es einen unerwarteten Schutz: die Standard GitHub Action zum Deployen in die static web app benötigt Zugriff auf das Secret, das das Deployment-Token enthält (z. B. `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`), selbst wenn das Deployment mit dem IDToken erfolgt. Das bedeutet, dass ein externes PR keinen Zugriff auf dieses Secret hat und ein externes PR den Workflow nicht ändern kann, um hier ein beliebiges Token zu platzieren, ohne dass ein PR akzeptiert wurde; **dieser Angriff funktioniert daher in der Praxis nicht**. - +> Beachte, dass standardmäßig externe PRs keine Workflows ausführen, es sei denn, sie haben mindestens 1 PR in das Repository zusammengeführt. Ein Angreifer könnte ein gültiges PR in das Repo senden und **dann ein bösartiges PR einreichen**, um die bösartige App in der Staging-Umgebung zu deployen. ALLERDINGS gibt es einen unerwarteten Schutz: die standardmäßige Github Action zum Deployen in die static web app benötigt Zugriff auf das Secret, das das Deployment-Token enthält (wie `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`), selbst wenn das Deployment mit dem IDToken erfolgt. Das bedeutet, dass ein externes PR keinen Zugriff auf dieses Secret hat und ein externes PR den Workflow nicht ändern kann, um hier ein beliebiges Token zu platzieren, ohne dass ein PR akzeptiert wird, **funktioniert dieser Angriff also in der Praxis nicht**. {{#include ../../../banners/hacktricks-training.md}}