Az Static Web Apps
Reading time: 8 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Static Web Apps Basic Information
Azure Static Web Apps - це хмарний сервіс для хостингу статичних веб-додатків з автоматичним CI/CD з репозиторіїв, таких як GitHub. Він пропонує глобальну доставку контенту, безсерверні бекенди та вбудований HTTPS, що робить його безпечним і масштабованим. Однак, навіть якщо сервіс називається "статичним", це не означає, що він повністю безпечний. Ризики включають неправильно налаштований CORS, недостатню аутентифікацію та підробку контенту, що може піддати додатки атакам, таким як XSS та витік даних, якщо їх не управляти належним чином.
Deployment Authentication
tip
Коли створюється статичний додаток, ви можете вибрати політику авторизації розгортання між токеном розгортання та робочим процесом GitHub Actions.
- Токен розгортання: Токен генерується і використовується для аутентифікації процесу розгортання. Будь-хто з цим токеном достатньо, щоб розгорнути нову версію додатка. Github Action автоматично розгортається в репозиторії з токеном у секреті, щоб розгорнути нову версію додатка щоразу, коли репозиторій оновлюється.
- Робочий процес GitHub Actions: У цьому випадку дуже схожий Github Action також розгортається в репозиторії, і токен також зберігається в секреті. Однак, цей Github Action має відмінність, він використовує
actions/github-script@v6
для отримання IDToken репозиторію та використання його для розгортання додатка. - Навіть якщо в обох випадках використовується дія
Azure/static-web-apps-deploy@v1
з токеном у параметріazure_static_web_apps_api_token
, у цьому другому випадку випадковий токен з форматом, що підходить, таким як12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345
, достатньо для розгортання додатка, оскільки авторизація здійснюється за допомогою IDToken у параметріgithub_id_token
.
Web App Basic Authentication
Можна налаштувати пароль для доступу до веб-додатка. Веб-консоль дозволяє налаштувати його для захисту лише стадійних середовищ або обох - стадійного та виробничого.
Ось як на момент написання виглядає веб-додаток з паролем:

Можна побачити чи використовується якийсь пароль і які середовища захищені за допомогою:
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"
Однак це не покаже пароль у відкритому вигляді, лише щось на кшталт: "password": "**********************"
.
Маршрути та ролі
Маршрути визначають як обробляються вхідні HTTP запити в статичному веб-додатку. Налаштовані у файлі staticwebapp.config.json
, вони контролюють переписування URL, перенаправлення, обмеження доступу та авторизацію на основі ролей, забезпечуючи належну обробку ресурсів та безпеку.
Декілька прикладів:
{
"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/*"]
}
}
Зверніть увагу, що можливо захистити шлях за допомогою ролі, тоді користувачам потрібно буде автентифікуватися в додатку та отримати цю роль для доступу до шляху. Також можливо створити запрошення, надаючи конкретні ролі конкретним користувачам, які входять через EntraID, Facebook, GitHub, Google, Twitter, що може бути корисним для ескалації привілеїв у додатку.
tip
Зверніть увагу, що можливо налаштувати додаток так, щоб зміни у файлі staticwebapp.config.json
не приймалися. У цьому випадку може бути недостатньо просто змінити файл з Github, але також потрібно змінити налаштування в додатку.
URL для стадії має цей формат: https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>
, наприклад: https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net
Snippets
Можливо зберігати HTML фрагменти всередині статичного веб-додатку, які будуть завантажені всередині додатку. Це можна використовувати для впровадження шкідливого коду в додаток, наприклад, JS-коду для викрадення облікових даних, кейлогера... Більше інформації в розділі ескалації привілеїв.
Managed Identities
Azure Static Web Apps можна налаштувати для використання керованих ідентичностей, однак, як зазначено в цьому FAQ, вони підтримуються лише для витягування секретів з Azure Key Vault для цілей автентифікації, а не для доступу до інших ресурсів Azure.
Для отримання додаткової інформації ви можете знайти посібник Azure про використання секрету сховища в статичному додатку за адресою 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>
Приклади для створення веб-додатків
Ви можете знайти гарний приклад для створення веб-додатку за наступним посиланням: https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github
- Зробіть форк репозиторію https://github.com/staticwebdev/react-basic/generate у вашому обліковому записі GitHub і назвіть його
my-first-static-web-app
- У порталі Azure створіть Static Web App, налаштувавши доступ до GitHub і вибравши раніше форкнутий новий репозиторій
- Створіть його, почекайте кілька хвилин і перевірте вашу нову сторінку!
Підвищення привілеїв та постексплуатація
Вся інформація про підвищення привілеїв та постексплуатацію в Azure Static Web Apps може бути знайдена за наступним посиланням:
Посилання
- https://learn.microsoft.com/en-in/azure/app-service/overview
- https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.