Az Static Web Apps

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

Informations de base sur les applications Web statiques

Azure Static Web Apps est un service cloud pour hĂ©berger des applications web statiques avec CI/CD automatique Ă  partir de dĂ©pĂŽts comme GitHub. Il offre une distribution de contenu mondiale, des backends sans serveur et HTTPS intĂ©grĂ©, ce qui le rend sĂ©curisĂ© et Ă©volutif. Cependant, mĂȘme si le service est appelĂ© “statique”, cela ne signifie pas qu’il est complĂštement sĂ»r. Les risques incluent des CORS mal configurĂ©s, une authentification insuffisante et une altĂ©ration du contenu, ce qui peut exposer les applications Ă  des attaques comme XSS et des fuites de donnĂ©es si elles ne sont pas correctement gĂ©rĂ©es.

Authentification de déploiement

Tip

Lorsqu’une application statique est créée, vous pouvez choisir la politique d’autorisation de dĂ©ploiement entre jeton de dĂ©ploiement et workflow GitHub Actions.

  • Jeton de dĂ©ploiement : Un jeton est gĂ©nĂ©rĂ© et utilisĂ© pour authentifier le processus de dĂ©ploiement. Quiconque possĂšde ce jeton suffit pour dĂ©ployer une nouvelle version de l’application. Une action GitHub est dĂ©ployĂ©e automatiquement dans le dĂ©pĂŽt avec le jeton dans un secret pour dĂ©ployer une nouvelle version de l’application chaque fois que le dĂ©pĂŽt est mis Ă  jour.
  • Workflow GitHub Actions : Dans ce cas, une action GitHub trĂšs similaire est Ă©galement dĂ©ployĂ©e dans le dĂ©pĂŽt et le jeton est Ă©galement stockĂ© dans un secret. Cependant, cette action GitHub a une diffĂ©rence, elle utilise l’action actions/github-script@v6 pour obtenir l’IDToken du dĂ©pĂŽt et l’utiliser pour dĂ©ployer l’application.
  • MĂȘme si dans les deux cas l’action Azure/static-web-apps-deploy@v1 est utilisĂ©e avec un jeton dans le paramĂštre azure_static_web_apps_api_token, dans ce second cas, un jeton alĂ©atoire avec un format valide comme 12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345 suffit pour dĂ©ployer l’application car l’autorisation est effectuĂ©e avec l’IDToken dans le paramĂštre github_id_token.

Authentification de base de l’application Web

Il est possible de configurer un mot de passe pour accĂ©der Ă  l’application Web. La console web permet de le configurer pour protĂ©ger uniquement les environnements de staging ou Ă  la fois les environnements de staging et de production.

Voici à quoi ressemble une application web protégée par mot de passe au moment de la rédaction :

Il est possible de voir si un mot de passe est utilisé et quels environnements sont protégés avec :

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"

Cependant, cela ne montrera pas le mot de passe en texte clair, juste quelque chose comme : "password": "**********************".

Routes et RĂŽles

Les routes dĂ©finissent comment les requĂȘtes HTTP entrantes sont traitĂ©es au sein d’une application web statique. ConfigurĂ©es dans le fichier staticwebapp.config.json, elles contrĂŽlent la réécriture d’URL, les redirections, les restrictions d’accĂšs et l’autorisation basĂ©e sur les rĂŽles, garantissant un traitement appropriĂ© des ressources et la sĂ©curitĂ©.

Quelques exemples :

{
"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/*"]
}
}

Notez qu’il est possible de protĂ©ger un chemin avec un rĂŽle, alors, les utilisateurs devront s’authentifier Ă  l’application et se voir attribuer ce rĂŽle pour accĂ©der au chemin. Il est Ă©galement possible de crĂ©er des invitations accordant des rĂŽles spĂ©cifiques Ă  des utilisateurs spĂ©cifiques se connectant via EntraID, Facebook, GitHub, Google, Twitter, ce qui peut ĂȘtre utile pour escalader les privilĂšges au sein de l’application.

Tip

Notez qu’il est possible de configurer l’application de sorte que les modifications du fichier staticwebapp.config.json ne soient pas acceptĂ©es. Dans ce cas, il peut ne pas suffire de simplement modifier le fichier depuis Github, mais aussi de changer le paramĂštre dans l’application.

L’URL de staging a ce format : https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain> comme : https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net

Snippets

Il est possible de stocker des extraits HTML Ă  l’intĂ©rieur d’une application web statique qui seront chargĂ©s dans l’application. Cela peut ĂȘtre utilisĂ© pour injecter du code malveillant dans l’application, comme un code JS pour voler des identifiants, un keylogger
 Plus d’infos dans la section sur l’escalade des privilĂšges.

Managed Identities

Azure Static Web Apps peut ĂȘtre configurĂ© pour utiliser des identitĂ©s gĂ©rĂ©es, cependant, comme mentionnĂ© dans cette FAQ, elles ne sont prises en charge que pour extraire des secrets d’Azure Key Vault Ă  des fins d’authentification, pas pour accĂ©der Ă  d’autres ressources Azure.

Pour plus d’infos, vous pouvez trouver un guide Azure sur l’utilisation d’un secret de coffre dans une application statique à 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>

Exemples pour générer des applications Web

Vous pouvez trouver un bel exemple pour générer une application web dans le lien suivant : https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github

  1. Forkez le dépÎt https://github.com/staticwebdev/react-basic/generate vers votre compte GitHub et nommez-le my-first-static-web-app
  2. Dans le portail Azure, crĂ©ez une application Web statique en configurant l’accĂšs GitHub et en sĂ©lectionnant le nouveau dĂ©pĂŽt forkĂ© prĂ©cĂ©demment
  3. Créez-le, attendez quelques minutes et vérifiez votre nouvelle page !

Escalade de privilĂšges et post-exploitation

Toutes les informations sur l’escalade de privilĂšges et la post-exploitation dans les applications Web statiques Azure peuvent ĂȘtre trouvĂ©es dans le lien suivant :

Az - Static Web App Privesc

Références

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks