Az Static Web Apps
Reading time: 8 minutes
tip
Impara e pratica il hacking AWS: HackTricks Training AWS Red Team Expert (ARTE)
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:  HackTricks Training GCP Red Team Expert (GRTE)
HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure:
Impara e pratica il hacking Azure:  HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Static Web Apps Basic Information
Azure Static Web Apps è un servizio cloud per l'hosting di app web statiche con CI/CD automatico da repository come GitHub. Offre distribuzione globale dei contenuti, backend serverless e HTTPS integrato, rendendolo sicuro e scalabile. Tuttavia, anche se il servizio è chiamato "statico", non significa che sia completamente sicuro. I rischi includono CORS mal configurati, autenticazione insufficiente e manomissione dei contenuti, che possono esporre le app ad attacchi come XSS e data leakage se non gestiti correttamente.
Deployment Authentication
tip
Quando viene creata un'App Statica, puoi scegliere la politica di autorizzazione per il deployment tra Token di deployment e workflow di GitHub Actions.
- Token di deployment: Viene generato un token utilizzato per autenticare il processo di deployment. Chiunque con questo token è sufficiente per distribuire una nuova versione dell'app. Un Github Action viene distribuito automaticamente nel repo con il token in un segreto per distribuire una nuova versione dell'app ogni volta che il repo viene aggiornato.
- Workflow di GitHub Actions: In questo caso, viene distribuito anche un Github Action molto simile nel repo e il token è anche memorizzato in un segreto. Tuttavia, questo Github Action ha una differenza, utilizza l'azione actions/github-script@v6per ottenere l'IDToken del repository e usarlo per distribuire l'app.
- Anche se in entrambi i casi viene utilizzata l'azione Azure/static-web-apps-deploy@v1con un token nel parametroazure_static_web_apps_api_token, in questo secondo caso un token casuale con un formato valido come12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345è sufficiente per distribuire l'app poiché l'autorizzazione avviene con l'IDToken nel parametrogithub_id_token.
Web App Basic Authentication
È possibile configurare una password per accedere all'App Web. La console web consente di configurarla per proteggere solo gli ambienti di staging o sia l'ambiente di staging che quello di produzione.
Questo è come appare un'app web protetta da password al momento della scrittura:

È possibile vedere se viene utilizzata una password e quali ambienti sono protetti con:
az rest --method GET \
--url "/subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2024-04-01"
Tuttavia, questo non mostrerà la password in chiaro, solo qualcosa come: "password": "**********************".
Routes e Ruoli
Le route definiscono come vengono gestite le richieste HTTP in entrata all'interno di un'app web statica. Configurate nel file staticwebapp.config.json, controllano la riscrittura degli URL, i reindirizzamenti, le restrizioni di accesso e l'autorizzazione basata sui ruoli, garantendo una corretta gestione delle risorse e sicurezza.
Alcuni esempi:
{
"routes": [
{
"route": "/",
"rewrite": "/index.html"
},
{
"route": "/about",
"rewrite": "/about.html"
},
{
"route": "/api/*",
"allowedRoles": ["authenticated"]
},
{
"route": "/admin",
"redirect": "/login",
"statusCode": 302
},
{
"route": "/google",
"redirect": "https://google.com",
"statusCode": 307
}
],
"navigationFallback": {
"rewrite": "/index.html",
"exclude": ["/api/*", "/assets/*"]
}
}
Nota come sia possibile proteggere un percorso con un ruolo, quindi, gli utenti dovranno autenticarsi nell'app e ricevere quel ruolo per accedere al percorso. È anche possibile creare inviti che concedono ruoli specifici a utenti specifici che accedono tramite EntraID, Facebook, GitHub, Google, Twitter, il che potrebbe essere utile per elevare i privilegi all'interno dell'app.
tip
Nota che è possibile configurare l'App in modo che le modifiche al file staticwebapp.config.json non vengano accettate. In questo caso, potrebbe non essere sufficiente cambiare il file da Github, ma anche cambiare l'impostazione nell'App.
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
Snippets
È possibile memorizzare snippet HTML all'interno di un'app web statica che verranno caricati all'interno dell'app. Questo può essere utilizzato per iniettare codice malevolo nell'app, come un codice JS per rubare credenziali, un keylogger... Maggiori informazioni nella sezione sull'elevazione dei privilegi.
Managed Identities
Azure Static Web Apps può essere configurato per utilizzare managed identities, tuttavia, come menzionato in questa FAQ, sono supportate solo per estrarre segreti da Azure Key Vault per scopi di autenticazione, non per accedere ad altre risorse Azure.
Per ulteriori informazioni, puoi trovare una guida di Azure su come utilizzare un segreto del vault in un'app statica su https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets.
Enumeration
# List Static Webapps
az staticwebapp list --output table
# Get Static Webapp details
az staticwebapp show --name <name> --resource-group <res-group> --output table
# Get appsettings
az staticwebapp appsettings list --name <name>
# Get env information
az staticwebapp environment list --name <name>
az staticwebapp environment functions --name <name>
# Get API key
az staticwebapp secrets list --name <name>
# Get invited users
az staticwebapp users list --name <name>
# Get current snippets
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/trainingdemo/snippets?api-version=2022-03-01"
# Get database connections
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections?api-version=2021-03-01"
## Once you have the database connection name ("default" by default) you can get the connection string with the credentials
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections/default/show?api-version=2021-03-01"
# Check connected backends
az staticwebapp backends show --name <name> --resource-group <res-group>
Esempi per generare Web App
Puoi trovare un bel esempio per generare un'app web al seguente link: https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github
- Forka il repository https://github.com/staticwebdev/react-basic/generate nel tuo account GitHub e chiamalo my-first-static-web-app
- Nel portale Azure crea una Static Web App configurando l'accesso a GitHub e selezionando il nuovo repository forkato
- Crealo, aspetta qualche minuto e controlla la tua nuova pagina!
Escalation dei privilegi e Post Exploitation
Tutte le informazioni sull'escalation dei privilegi e sul post exploitation in Azure Static Web Apps possono essere trovate al seguente link:
Riferimenti
- https://learn.microsoft.com/en-in/azure/app-service/overview
- https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
tip
Impara e pratica il hacking AWS: HackTricks Training AWS Red Team Expert (ARTE)
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:  HackTricks Training GCP Red Team Expert (GRTE)
HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure:
Impara e pratica il hacking Azure:  HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
 HackTricks Cloud
HackTricks Cloud