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

This commit is contained in:
Translator
2026-01-18 11:54:14 +00:00
parent 385b45d543
commit f5f7f4fa53

View File

@@ -4,7 +4,7 @@
## Azure Static Web Apps
Per ulteriori informazioni su questo servizio, controlla:
Per maggiori informazioni su questo servizio consulta:
{{#ref}}
../az-services/az-static-web-apps.md
@@ -12,9 +12,9 @@ Per ulteriori informazioni su questo servizio, controlla:
### Microsoft.Web/staticSites/snippets/write
È possibile far caricare a una pagina web statica codice HTML arbitrario creando uno snippet. Questo potrebbe consentire a un attaccante di iniettare codice JS all'interno dell'app web e rubare informazioni sensibili come credenziali o chiavi mnemoniche (in portafogli web3).
È possibile far caricare a una pagina web statica codice HTML arbitrario creando uno snippet. Questo potrebbe permettere a un attaccante di iniettare codice JS nell'applicazione web e rubare informazioni sensibili come credenziali o chiavi mnemoniche (nei wallet web3).
Il seguente comando crea uno snippet che sarà sempre caricato dall'app web::
Il comando seguente crea uno snippet che verrà sempre caricato dall'applicazione web::
```bash
az rest \
--method PUT \
@@ -33,20 +33,20 @@ az rest \
```
### Leggi le credenziali di terze parti configurate
Come spiegato nella sezione App Service:
As explained in the App Service section:
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
Eseguendo il seguente comando è possibile **leggere le credenziali di terze parti** configurate nell'account attuale. Nota che, ad esempio, se alcune credenziali di Github sono configurate in un utente diverso, non sarai in grado di accedere al token da un altro.
Eseguendo il seguente comando è possibile **leggere le credenziali di terze parti** configurate nell'account corrente. Nota che, ad esempio, se alcune credenziali Github sono configurate in un altro utente, non potrai accedere al token da un utente diverso.
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
```
Questo comando restituisce token per Github, Bitbucket, Dropbox e OneDrive.
Questo comando restituisce tokens per Github, Bitbucket, Dropbox e OneDrive.
Ecco alcuni esempi di comandi per controllare i token:
Ecco alcuni esempi di comandi per controllare i tokens:
```bash
# GitHub List Repositories
curl -H "Authorization: token <token>" \
@@ -69,11 +69,11 @@ curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://graph.microsoft.com/v1.0/me/drive/root/children
```
### Sovrascrivere file - Sovrascrivere percorsi, HTML, JS...
### Sovrascrivere file - Overwrite routes, HTML, JS...
È possibile **sovrascrivere un file all'interno del repo Github** contenente l'app tramite Azure inviando una richiesta come la seguente che indicherà il percorso del file da sovrascrivere, il contenuto del file e il messaggio di commit.
È possibile che Azure, avendo il **Github token**, sovrascriva un file all'interno del repo Github che contiene l'app inviando una richiesta come la seguente, che indicherà il percorso del file da sovrascrivere, il contenuto del file e il messaggio di commit.
Questo può essere sfruttato dagli attaccanti per **cambiare il contenuto dell'app web** per servire contenuti malevoli (rubare credenziali, chiavi mnemoniche...) o semplicemente per **reindirizzare determinati percorsi** ai propri server sovrascrivendo il file `staticwebapp.config.json`.
Questo può essere sfruttato dagli attaccanti per, sostanzialmente, **modificare il contenuto della web app** per servire contenuti malevoli (rubare credenziali, chiavi mnemoniche...) o semplicemente **reindirizzare alcuni percorsi** verso i loro server sovrascrivendo il file `staticwebapp.config.json`.
> [!WARNING]
> Nota che se un attaccante riesce a compromettere il repo Github in qualsiasi modo, può anche sovrascrivere il file direttamente da Github.
@@ -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
Con questo permesso, è possibile **modificare la password** che protegge un'app web statica o addirittura rimuovere la protezione da ogni ambiente inviando una richiesta come la seguente:
Con questa autorizzazione, è possibile **modificare la password** che protegge una static web app o persino rimuovere la protezione di tutti gli ambienti inviando una richiesta come la seguente:
```bash
# Change password
az rest --method put \
@@ -133,32 +133,38 @@ az rest --method put \
```
### Microsoft.Web/staticSites/listSecrets/action
Questo permesso consente di ottenere il **token di distribuzione della chiave API** per l'app statica:
Questo permesso consente di ottenere il **API key deployment token** per l'app statica.
Usando 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"
```
Poi, per **aggiornare un'app utilizzando il token**, puoi eseguire il seguente comando. Nota che questo comando è stato estratto controllando **come funziona Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)**, poiché è quello impostato da Azure per impostazione predefinita. Quindi l'immagine e i parametri potrebbero cambiare in futuro.
Usando AzCLI:
```bash
az staticwebapp secrets list --name <appname> --resource-group <RG>
```
Quindi, in modo da **update an app using the token** puoi eseguire il comando seguente. Nota che questo comando è stato ricavato esaminando **how to Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) works**, in quanto è quella che Azure imposta per impostazione predefinita. Pertanto l'immagine e i parametri potrebbero cambiare in futuro.
> [!TIP]
> Per distribuire l'app, puoi utilizzare lo strumento **`swa`** da [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) o seguire i seguenti passaggi:
> Per distribuire l'app puoi usare lo strumento **`swa`** da [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) oppure seguire i seguenti passaggi:
1. Scarica il repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (o qualsiasi altro repo tu voglia distribuire) ed esegui `cd react-basic`.
2. Modifica il codice che desideri distribuire
3. Distribuiscilo eseguendo (Ricorda di cambiare il `<api-token>`):
1. Scarica il repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (o qualsiasi altro repo che vuoi distribuire) ed esegui `cd react-basic`.
2. Modifica il codice che vuoi distribuire
3. Distribuiscilo eseguendo (ricorda di cambiare il `<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]
> Anche se hai il token, non sarai in grado di distribuire l'app se la **Deployment Authorization Policy** è impostata su **Github**. Per utilizzare il token avrai bisogno del permesso `Microsoft.Web/staticSites/write` per cambiare il metodo di distribuzione per utilizzare il token APi.
> Anche se hai il token non potrai distribuire l'app se la **Deployment Authorization Policy** è impostata su **Github**. Per usare il token avrai bisogno del permesso `Microsoft.Web/staticSites/write` per cambiare il metodo di deployment e usare il token API.
### Microsoft.Web/staticSites/write
Con questo permesso è possibile **cambiare la fonte dell'app web statica in un diverso repository Github**, tuttavia, non verrà automaticamente provisionato poiché questo deve essere fatto da un'azione Github.
Con questo permesso è possibile **cambiare la sorgente della static web app verso un diverso repository Github**, tuttavia non verrà automaticamente provisionata poiché ciò deve essere eseguito da una Github Action.
Tuttavia, se la **Deployment Authorization Policy** è impostata su **Github**, è possibile **aggiornare l'app dal nuovo repository sorgente!**.
Se invece la **Deployment Authorization Policy** è impostata su **Github**, è possibile **aggiornare l'app dal nuovo repository sorgente!**.
Nel caso in cui la **Deployment Authorization Policy** non sia impostata su Github, puoi cambiarla con lo stesso permesso `Microsoft.Web/staticSites/write`.
Se la **Deployment Authorization Policy** non è impostata su Github, puoi cambiarla con lo stesso permesso `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
@@ -244,14 +250,14 @@ action: "close"
```
### Microsoft.Web/staticSites/resetapikey/action
Con questo permesso è possibile **reimpostare la chiave API dell'app web statica**, potenzialmente causando un DoS ai flussi di lavoro che distribuiscono automaticamente l'app.
Con questo permesso è possibile **reset the API key of the static web app**, potenzialmente causando un DoSing ai workflows che deployano automaticamente l'app.
```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
Questo permesso consente di **creare un invito per un utente** ad accedere a percorsi protetti all'interno di un'app web statica con un ruolo specifico assegnato.
Questa autorizzazione consente di **creare un invito per un utente** per accedere a percorsi protetti all'interno di una static web app con un ruolo specifico.
Il login si trova in un percorso come `/.auth/login/github` per github o `/.auth/login/aad` per Entra ID e un utente può essere invitato con il seguente comando:
```bash
@@ -266,11 +272,12 @@ az staticwebapp users invite \
```
### Pull Requests
Per impostazione predefinita, le Pull Requests da un ramo nello stesso repo verranno automaticamente compilate e costruite in un ambiente di staging. Questo potrebbe essere abusato da un attaccante con accesso in scrittura al repo ma senza poter bypassare le protezioni del ramo di produzione (di solito `main`) per **deporre una versione malevola dell'app** nell'URL di staging.
Per default le Pull Requests da un branch nello stesso repo vengono automaticamente compilate e buildate in un ambiente di staging. Questo p essere sfruttato da un attaccante con accesso in scrittura al repo ma senza la possibilità di bypassare le protezioni del branch di produzione (di solito `main`) per **distribuire una versione malevola dell'app** nell'URL di staging.
L'URL di staging ha questo formato: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` come: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
L'URL di staging ha il formato: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` come: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
> [!TIP]
> Nota che per impostazione predefinita, le PR esterne non eseguiranno flussi di lavoro a meno che non abbiano unito almeno 1 PR nel repository. Un attaccante potrebbe inviare una PR valida al repo e **poi inviare una PR malevola** al repo per deporre l'app malevola nell'ambiente di staging. TUTTAVIA, c'è una protezione inaspettata, l'azione predefinita di Github per deporre nell'app web statica ha bisogno di accesso al segreto contenente il token di distribuzione (come `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) anche se la distribuzione è effettuata con l'IDToken. Questo significa che poiché una PR esterna non avrà accesso a questo segreto e una PR esterna non può modificare il Workflow per inserire qui un token arbitrario senza che una PR venga accettata, **questo attacco non funzionerà realmente**.
> Nota che di default le PR esterne non eseguiranno i workflow a meno che non abbiano unito almeno 1 PR nel repository. Un attaccante potrebbe inviare una PR valida al repo e **poi inviare una PR malevola** al repo per distribuire l'app malevola nell'ambiente di staging. TUTTAVIA, esiste una protezione inattesa: la default GitHub Action per il deploy nella static web app necessita dell'accesso al secret contenente il deployment token (come `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) anche se il deployment viene fatto con l'IDToken. Questo significa che, poiché una PR esterna non avrà accesso a questo secret e una PR esterna non può modificare il Workflow per inserirvi un token arbitrario senza che la PR venga accettata, **questo attacco in realtà non funzionerebbe**.
{{#include ../../../banners/hacktricks-training.md}}