Az Static Web Apps
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
Información Básica sobre Aplicaciones Web Estáticas
Azure Static Web Apps es un servicio en la nube para alojar aplicaciones web estáticas con CI/CD automático desde repositorios como GitHub. Ofrece entrega de contenido global, backends sin servidor y HTTPS integrado, lo que lo hace seguro y escalable. Sin embargo, aunque el servicio se llama “estático”, no significa que sea completamente seguro. Los riesgos incluyen CORS mal configurado, autenticación insuficiente y manipulación de contenido, lo que puede exponer las aplicaciones a ataques como XSS y filtraciones de datos si no se gestionan adecuadamente.
Autenticación de Despliegue
Tip
Cuando se crea una Aplicación Estática, puedes elegir la política de autorización de despliegue entre Token de despliegue y Flujo de trabajo de GitHub Actions.
- Token de despliegue: Se genera un token y se utiliza para autenticar el proceso de despliegue. Cualquiera con este token es suficiente para desplegar una nueva versión de la aplicación. Una Acción de Github se despliega automáticamente en el repositorio con el token en un secreto para desplegar una nueva versión de la aplicación cada vez que se actualiza el repositorio.
- Flujo de trabajo de GitHub Actions: En este caso, también se despliega una Acción de Github muy similar en el repositorio y el token también se almacena en un secreto. Sin embargo, esta Acción de Github tiene una diferencia, utiliza la
actions/github-script@v6para obtener el IDToken del repositorio y usarlo para desplegar la aplicación. - Incluso si en ambos casos se utiliza la acción
Azure/static-web-apps-deploy@v1con un token en el parámetroazure_static_web_apps_api_token, en este segundo caso, un token aleatorio con un formato válido como12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345es suficiente para desplegar la aplicación, ya que la autorización se realiza con el IDToken en el parámetrogithub_id_token.
Autenticación Básica de la Aplicación Web
Es posible configurar una contraseña para acceder a la Aplicación Web. La consola web permite configurarla para proteger solo los entornos de staging o tanto el de staging como el de producción.
Así es como, en el momento de escribir, se ve una aplicación web protegida por contraseña:

Es posible ver si se está utilizando alguna contraseña y qué entornos están protegidos 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"
Sin embargo, esto no mostrará la contraseña en texto claro, solo algo como: "password": "**********************".
Rutas y Roles
Las rutas definen cómo se manejan las solicitudes HTTP entrantes dentro de una aplicación web estática. Configuradas en el staticwebapp.config.json archivo, controlan la reescritura de URL, redirecciones, restricciones de acceso y autorización basada en roles, asegurando un manejo adecuado de recursos y seguridad.
Algunos ejemplos:
{
"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/*"]
}
}
Note cómo es posible proteger una ruta con un rol, entonces, los usuarios necesitarán autenticarse en la aplicación y se les otorgará ese rol para acceder a la ruta. También es posible crear invitaciones otorgando roles específicos a usuarios específicos que inicien sesión a través de EntraID, Facebook, GitHub, Google, Twitter, lo que podría ser útil para escalar privilegios dentro de la aplicación.
Tip
Tenga en cuenta que es posible configurar la aplicación para que los cambios en el archivo
staticwebapp.config.jsonno sean aceptados. En este caso, puede que no sea suficiente con solo cambiar el archivo desde Github, sino también cambiar la configuración en la aplicación.
La URL de staging tiene este formato: https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain> como: https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net
Snippets
Es posible almacenar fragmentos de HTML dentro de una aplicación web estática que se cargarán dentro de la aplicación. Esto se puede usar para inyectar código malicioso en la aplicación, como un código JS para robar credenciales, un keylogger… Más información en la sección de escalada de privilegios.
Managed Identities
Azure Static Web Apps se puede configurar para usar identidades administradas, sin embargo, como se menciona en esta FAQ, solo se admiten para extraer secretos de Azure Key Vault con fines de autenticación, no para acceder a otros recursos de Azure.
Para más información, puede encontrar una guía de Azure sobre cómo usar un secreto de vault en una aplicación estática en 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>
Ejemplos para generar aplicaciones web
Puedes encontrar un buen ejemplo para generar una aplicación web en el siguiente enlace: https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github
- Haz un fork del repositorio https://github.com/staticwebdev/react-basic/generate a tu cuenta de GitHub y nómbralo
my-first-static-web-app - En el portal de Azure, crea una Static Web App configurando el acceso a GitHub y seleccionando el nuevo repositorio que has forked previamente
- Créalo, espera unos minutos y ¡verifica tu nueva página!
Escalación de privilegios y post explotación
Toda la información sobre escalación de privilegios y post explotación en Azure Static Web Apps se puede encontrar en el siguiente enlace:
Referencias
- https://learn.microsoft.com/en-in/azure/app-service/overview
- https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
Tip
Aprende y practica AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Consulta los subscription plans!
- Únete al 💬 Discord group o al telegram group o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud github repos.
HackTricks Cloud

