Az - Static Web Apps
Reading time: 8 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas sobre Aplicativos Web Estáticos
Azure Static Web Apps é um serviço de nuvem para hospedar aplicativos web estáticos com CI/CD automático de repositórios como GitHub. Ele oferece entrega de conteúdo global, backends sem servidor e HTTPS integrado, tornando-o seguro e escalável. No entanto, mesmo que o serviço seja chamado de "estático", isso não significa que seja completamente seguro. Os riscos incluem CORS mal configurado, autenticação insuficiente e manipulação de conteúdo, que podem expor aplicativos a ataques como XSS e vazamento de dados se não forem gerenciados adequadamente.
Autenticação de Implantação
tip
Quando um Aplicativo Estático é criado, você pode escolher a política de autorização de implantação entre Token de implantação e fluxo de trabalho do GitHub Actions.
- Token de implantação: Um token é gerado e usado para autenticar o processo de implantação. Qualquer pessoa com este token é suficiente para implantar uma nova versão do aplicativo. Uma Ação do Github é implantada automaticamente no repositório com o token em um segredo para implantar uma nova versão do aplicativo toda vez que o repositório é atualizado.
- Fluxo de trabalho do GitHub Actions: Neste caso, uma Ação do Github muito semelhante também é implantada no repositório e o token também é armazenado em um segredo. No entanto, esta Ação do Github tem uma diferença, ela usa a
actions/github-script@v6
para obter o IDToken do repositório e usá-lo para implantar o aplicativo. - Mesmo que em ambos os casos a ação
Azure/static-web-apps-deploy@v1
seja usada com um token no parâmetroazure_static_web_apps_api_token
, neste segundo caso, um token aleatório com um formato válido como12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345
é suficiente para implantar o aplicativo, pois a autorização é feita com o IDToken no parâmetrogithub_id_token
.
Autenticação Básica do Aplicativo Web
É possível configurar uma senha para acessar o Aplicativo Web. O console da web permite configurá-la para proteger apenas ambientes de staging ou tanto o staging quanto o de produção.
É assim que, no momento da redação, um aplicativo web protegido por senha se parece:

É possível ver se alguma senha está sendo usada e quais ambientes estão protegidos com:
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"
No entanto, isso não mostrará a senha em texto claro, apenas algo como: "password": "**********************"
.
Rotas e Funções
As rotas definem como as solicitações HTTP recebidas são tratadas dentro de um aplicativo web estático. Configuradas no arquivo staticwebapp.config.json
, elas controlam reescrita de URL, redirecionamentos, restrições de acesso e autorização baseada em funções, garantindo o manuseio adequado de recursos e segurança.
Alguns exemplos:
{
"routes": [
{
"route": "/",
"rewrite": "/index.html"
},
{
"route": "/about",
"rewrite": "/about.html"
},
{
"route": "/api/*",
"allowedRoles": ["authenticated"]
},
{
"route": "/admin",
"redirect": "/login",
"statusCode": 302
}
],
"navigationFallback": {
"rewrite": "/index.html",
"exclude": ["/api/*", "/assets/*"]
}
}
Note como é possível proteger um caminho com um papel, então, os usuários precisarão autenticar-se no aplicativo e receber esse papel para acessar o caminho. Também é possível criar convites concedendo papéis específicos a usuários específicos que fazem login via EntraID, Facebook, GitHub, Google, Twitter, o que pode ser útil para escalar privilégios dentro do aplicativo.
tip
Note que é possível configurar o App para que alterações no arquivo staticwebapp.config.json
não sejam aceitas. Nesse caso, pode não ser suficiente apenas alterar o arquivo do Github, mas também mudar a configuração no App.
A URL de staging tem este formato: https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>
como: https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net
Managed Identities
Azure Static Web Apps pode ser configurado para usar managed identities, no entanto, como mencionado em this FAQ, elas são suportadas apenas para extrair segredos do Azure Key Vault para fins de autenticação, não para acessar outros recursos do Azure.
Para mais informações, você pode encontrar um guia do Azure sobre como usar um segredo de cofre em um aplicativo estático em https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets.
Enumeration
{% tabs %} {% tab title="az cli" %} {% code overflow="wrap" %}
# 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 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>
{% endcode %} {% endtab %}
{% tab title="Az PowerShell" %} {% code overflow="wrap" %}
Get-Command -Module Az.Websites
# Retrieves details of a specific Static Web App in the specified resource group.
Get-AzStaticWebApp -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the build details for a specific Static Web App.
Get-AzStaticWebAppBuild -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the application settings for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
# Retrieves functions for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildFunction -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
# Retrieves function app settings for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildFunctionAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
# Retrieves the configured roles for a Static Web App.
Get-AzStaticWebAppConfiguredRole -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the custom domains configured for a Static Web App.
Get-AzStaticWebAppCustomDomain -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves details of the functions associated with a Static Web App.
Get-AzStaticWebAppFunction -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the app settings for the function app associated with a Static Web App.
Get-AzStaticWebAppFunctionAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the secrets for a Static Web App.
Get-AzStaticWebAppSecret -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves general app settings for a Static Web App.
Get-AzStaticWebAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves user details for a Static Web App with a specified authentication provider.
Get-AzStaticWebAppUser -ResourceGroupName <ResourceGroupName> -Name <Name> -AuthProvider <AuthProvider>
# Retrieves user-provided function apps associated with a Static Web App.
Get-AzStaticWebAppUserProvidedFunctionApp -ResourceGroupName <ResourceGroupName> -Name <Name>
{% endcode %} {% endtab %} {% endtabs %}
Exemplos para gerar Web Apps
Você pode encontrar um bom exemplo para gerar um web app no seguinte link: https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github
- Faça um fork do repositório https://github.com/staticwebdev/react-basic/generate para sua conta do GitHub e nomeie-o como
my-first-static-web-app
- No portal do Azure, crie um Static Web App configurando o acesso ao Github e selecionando o novo repositório que você forkou anteriormente
- Crie-o, aguarde alguns minutos e verifique sua nova página!
Escalação de Privilégios e Pós Exploração
Todas as informações sobre escalação de privilégios e pós exploração em Azure Static Web Apps podem ser encontradas no seguinte link:
Referências
- https://learn.microsoft.com/en-in/azure/app-service/overview
- https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.