20 KiB
Az - Logic Apps
{{#include ../../../banners/hacktricks-training.md}}
Información Básica
Azure Logic Apps es un servicio basado en la nube proporcionado por Microsoft Azure que permite a los desarrolladores crear y ejecutar flujos de trabajo que integran varios servicios, fuentes de datos y aplicaciones. Estos flujos de trabajo están diseñados para automatizar procesos empresariales, orquestar tareas y realizar integraciones de datos a través de diferentes plataformas.
Logic Apps proporciona un diseñador visual para crear flujos de trabajo con una amplia gama de conectores preconstruidos, lo que facilita la conexión e interacción con varios servicios, como Office 365, Dynamics CRM, Salesforce y muchos otros. También puedes crear conectores personalizados para tus necesidades específicas.
Al crear una Logic App, debes crear o vincular una cuenta de almacenamiento externa que almacene el estado del flujo de trabajo, el historial de ejecución y los artefactos. Este almacenamiento se puede configurar con ajustes de diagnóstico para monitoreo y se puede asegurar con restricciones de acceso a la red o integrarse en una red virtual para controlar el tráfico entrante y saliente.
Ejemplos
- Automatización de Pipelines de Datos: Logic Apps puede automatizar procesos de transferencia y transformación de datos en combinación con Azure Data Factory. Esto es útil para crear pipelines de datos escalables y confiables que mueven y transforman datos entre varios almacenes de datos, como Azure SQL Database y Azure Blob Storage, ayudando en operaciones de análisis e inteligencia empresarial.
- Integración con Azure Functions: Logic Apps puede trabajar junto a Azure Functions para desarrollar aplicaciones sofisticadas impulsadas por eventos que escalan según sea necesario e integrarse sin problemas con otros servicios de Azure. Un caso de uso de ejemplo es utilizar una Logic App para activar una Azure Function en respuesta a ciertos eventos, como cambios en una cuenta de Azure Storage, permitiendo un procesamiento de datos dinámico.
Visualizar una LogicAPP
Es posible ver una LogicApp con gráficos:

o verificar el código en la sección de "vista de código de la Logic app".
Protección SSRF
Incluso si encuentras la Logic App vulnerable a SSRF, no podrás acceder a las credenciales de los metadatos ya que Logic Apps no lo permite.
Por ejemplo, algo como esto no devolverá el token:
# The URL belongs to a Logic App vulenrable to SSRF
curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e974123adf0b98159966644/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_8_oqqsCXc0u2c7hNjtSZmT0uM4Xi3hktw6Uze0O34s' -d '{"url": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"}' -H "Content-type: application/json" -v
Opciones de alojamiento
Hay varias opciones de alojamiento:
- Consumo
- Multi-tenant: proporciona recursos de computación compartidos, opera en la nube pública y sigue un modelo de precios por operación. Esto es ideal para cargas de trabajo ligeras y rentables. Esto despliega un "Single Workflow".
- Estándar
- Workflow Service Plan: recursos de computación dedicados con integración de VNET para redes y cobra por instancia de plan de servicio de flujo de trabajo. Es adecuado para cargas de trabajo más exigentes que requieren un mayor control.
- App Service Environment V3 recursos de computación dedicados con aislamiento completo y escalabilidad. También se integra con VNET para redes y utiliza un modelo de precios basado en instancias de App Service dentro del entorno.
- Híbrido diseñado para procesamiento local y soporte multi-nube. Permite recursos de computación gestionados por el cliente con acceso a la red local y utiliza Kubernetes Event-Driven Autoscaling (KEDA). Se basa en un entorno de aplicación de contenedor conectado.
Características clave
- Almacenamiento: Las Logic Apps requieren una cuenta de Azure Storage externa para almacenar el estado del flujo de trabajo, el historial de ejecución... y debe estar en el mismo grupo de recursos que la Logic App.
- Redes y Seguridad: Las Logic Apps se pueden configurar con acceso público o privado. Por defecto, la aplicación está abierta a Internet, pero se puede integrar con una Red Virtual de Azure para conectividad aislada.
- Application Insights: La gestión del rendimiento de aplicaciones (APM) a través de Azure Monitor Application Insights se puede habilitar para rastrear el rendimiento, detectar anomalías y proporcionar análisis.
- Control de Acceso: Las Logic Apps admiten identidades gestionadas por el sistema e identidades gestionadas por el usuario.
Flujos de trabajo "Únicos"
Un flujo de trabajo es una secuencia estructurada de pasos o tareas automatizadas que ejecutan un proceso u objetivo específico. Define cómo interactúan diferentes acciones, condiciones y decisiones para lograr un resultado deseado, optimizando las operaciones y reduciendo el esfuerzo manual. Los flujos de trabajo pueden integrar múltiples sistemas, desencadenar eventos y reglas, asegurando consistencia y eficiencia en los procesos.
Azure Logic Apps ofrece la funcionalidad de crear un flujo de trabajo único sin la necesidad de una Logic App en sí.
Cada flujo de trabajo tiene diferentes disparadores. Estos disparadores son los pasos que sigue el flujo de trabajo. Cada disparador tiene sus parámetros que pueden variar según el tipo de disparador:
- Nombre de conexión
- Tipo de Autenticación que puede ser, Clave de Acceso, Microsoft Entra ID, autenticación de principal de servicio integrado e Identidad Gestionada de Logic Apps.
Los disparadores también tienen varias configuraciones:
- Validación de Esquema: Asegura que los datos entrantes sigan una estructura predefinida.
- Control de Concurrencia: Limita el número de ejecuciones paralelas.
- Condiciones de Disparador: condiciones que deben cumplirse antes de que se active el disparador.
- Redes: Configura el tamaño de los fragmentos para la transferencia de datos y permite suprimir los encabezados del flujo de trabajo en las respuestas.
- Seguridad: Habilita Entradas/Salidas Seguras para ocultar datos sensibles en los registros y las salidas.
Configuraciones y Conexiones API:
Un flujo de trabajo tiene diferentes configuraciones como:
- Direcciones IP entrantes permitidas: Esta configuración te permite restringir quién puede activar o iniciar tu Logic App. Las opciones son Cualquier IP, Solo otras Logic Apps y Rangos de IP específicos.
- Cuenta de integración: Aquí, puedes vincular tu Logic App a una Cuenta de Integración.
- Alto rendimiento: Esta configuración permite que tu Logic App maneje más solicitudes rápidamente.
- Retención del historial de ejecución: por cuánto tiempo se mantiene el historial de las ejecuciones de tu Logic App.
Puedes ver las diferentes conexiones API que tiene el flujo de trabajo. Dentro de cada una de estas conexiones tienen diferentes propiedades y la posibilidad de editar la conexión API donde se puede cambiar el tipo de autenticación.
Historial y Versiones: Tiene la opción de acceder al historial de las diferentes ejecuciones, muestra Configuraciones, Salida, Parámetros y el Código.
También tiene la opción de acceder a diferentes versiones del flujo de trabajo, donde puedes revisar el código y cambiar el flujo de trabajo presente por una versión anterior de este.
Autorización: Las Azure Logic Apps admiten políticas de autorización con Entra ID para asegurar los disparadores basados en solicitudes al requerir un token de acceso válido. Este token debe incluir reclamos específicos:
- Emisor (iss) para verificar el proveedor de identidad
- Audiencia (aud) para asegurar que el token está destinado a la Logic App
- Sujeto (sub) para identificar al llamador
- ID de JWT (identificador de token web JSON)
- Reclamo Personalizado
Cuando se recibe una solicitud, las Logic Apps validan el token contra estos reclamos y permiten la ejecución solo si coinciden con la política configurada. Esto se puede usar para permitir que otro inquilino active el flujo de trabajo o denegar el disparador de otras fuentes, por ejemplo, permitiendo el disparador solo si proviene de https://login.microsoftonline.com/.
Claves de Acceso: Cuando guardas un disparador basado en solicitudes por primera vez, las Logic Apps crean automáticamente un endpoint único con una firma SAS (creada a partir de la Clave de Acceso) que otorga permiso para llamar al flujo de trabajo. Esta firma SAS está incrustada en la URL del disparador. Esta clave se puede regenerar y dará una nueva firma SAS, pero las claves no se pueden listar.
La URL para invocarlo con la Clave de Acceso:
https://.logic.azure.com:443/workflows//triggers//paths/invoke?api-version=&sp=%2Ftriggers%2F%2Frun&sv=&sig=
Enumeración
{{#tabs }} {{#tab name="az cli" }}
# List
az logic workflow list --resource-group <ResourceGroupName>
# Get info
az logic workflow show --name <LogicAppName> --resource-group <ResourceGroupName>
# Get details of a specific Logic App workflow, including its connections and parameters
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}?api-version=2016-10-01&$expand=connections.json,parameters.json" \
--headers "Content-Type=application/json"
# Get details about triggers for a specific Logic App
az rest --method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers?api-version=2016-06-01"
# Get the callback URL for a specific trigger in a Logic App
az rest --method POST \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerName}/listCallbackUrl?api-version=2016-06-01"
# Get the history of a specific trigger in a Logic App
az rest --method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerName}/histories?api-version=2016-06-01"
# List all runs of a specific Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/runs?api-version=2016-06-01" \
--headers "Content-Type=application/json"
# Get all actions within a specific run of a Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/runs/{runName}/actions?api-version=2016-06-01" \
--headers "Content-Type=application/json"
# List all versions of a specific Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/versions?api-version=2016-06-01" \
--headers "Content-Type=application/json"
# Get details of a specific version of a Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/versions/{versionName}?api-version=2016-06-01" \
--headers "Content-Type=application/json"
# List all Logic Apps in the specified resource group
az logicapp list --resource-group <ResourceGroupName>
# Show detailed information about a specific Logic App
az logicapp show --name <LogicAppName> --resource-group <ResourceGroupName>
# List all application settings for a specific Logic App
az logicapp config appsettings list --name <LogicAppName> --resource-group <ResourceGroupName>
# Get a Parameters from an Azure App Service using Azure REST API
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{app-service-name}/hostruntime/admin/vfs/parameters.json?api-version=2018-11-01&relativepath=1"
# Get webhook-triggered workflows from an Azure Logic App using Azure REST API
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/hostruntime/runtime/webhooks/workflow/api/management/workflows?api-version=2018-11-01"
# Get workflows from an Azure Logic App using Azure REST API
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/workflows?api-version=2018-11-01"
# Get details of a specific workflow including its connections and parameters in Azure Logic Apps using Azure REST API
az rest --method GET --uri "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/workflows/{workflow-name}?api-version=2018-11-01&\$expand=connections.json,parameters.json"
{{#endtab }}
{{#tab name="Az Powershell" }}
Get-Command -Module Az.LogicApp
# List
Get-AzLogicApp -ResourceGroupName <ResourceGroupName>
# Get info
Get-AzLogicApp -ResourceGroupName <ResourceGroupName> -Name <LogicAppName>
# Get details of a specific Logic App workflow run action
Get-AzLogicAppRunAction -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -RunName "<RunName>"
# Get the run history for a specific Logic App
Get-AzLogicAppRunHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>"
# Get details about triggers for a specific Logic App
Get-AzLogicAppTrigger -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>"
# Get the callback URL for a specific trigger in a Logic App
Get-AzLogicAppTriggerCallbackUrl -ResourceGroupName "<ResourceGroupName>" -LName "<LogicAppName>" -TriggerName "<TriggerName>"
# Get the history of a specific trigger in a Logic App
Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -TriggerName "<TriggerName>"
{{#endtab }} {{#endtabs }}
Cuentas de Integración
Cuentas de Integración, son una característica de Azure Logic Apps. Las Cuentas de Integración se utilizan para facilitar integraciones a nivel empresarial al habilitar capacidades avanzadas de B2B, como EDI, AS2 y gestión de esquemas XML. Las Cuentas de Integración son un contenedor en Azure que almacena los siguientes artefactos utilizados para Logic Apps:
- Esquemas: Gestionar esquemas XML para validar y procesar mensajes en su cuenta de integración.
- Mapas: Configurar transformaciones basadas en XSLT para convertir formatos de datos dentro de sus flujos de trabajo de integración.
- Ensamblajes: Gestionar ensamblajes de cuentas de integración para optimizar la lógica y el procesamiento de datos.
- Certificados: Manejar certificados para cifrar y firmar mensajes, asegurando una comunicación segura.
- Socios: Gestionar información de socios comerciales para transacciones B2B, permitiendo integraciones sin problemas.
- Acuerdos: Configurar reglas y ajustes para intercambiar datos con socios comerciales (por ejemplo, EDI, AS2).
- Configuraciones por Lotes: Gestionar configuraciones de procesamiento por lotes para agrupar y procesar mensajes de manera eficiente.
- RosettaNet PIP: Configurar Procesos de Interfaz de Socios de RosettaNet (PIPs) para estandarizar la comunicación B2B.
Enumeración
{{#tabs }} {{#tab name="az cli" }}
# Integration account
az logic integration-account list --resource-group <resource-group-name>
az logic integration-account show --resource-group <resource-group-name> --name <integration-account-name>
az logic integration-account list-callback-url --resource-group <resource-group-name> --integration-account-name <integration-account-name>
# Batch-configuration
az logic integration-account batch-configuration list \
--resource-group <resource-group-name> \
--integration-account-name <integration-account-name>
az logic integration-account batch-configuration show \
--resource-group <resource-group-name> \
--integration-account-name <integration-account-name> \
--batch-configuration-name <batch-configuration-name>
# Map
az logic integration-account map list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>
az logic integration-account map show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--map-name <map-name>
# Partner
az logic integration-account partner list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>
az logic integration-account partner show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--name <partner-name>
# Session
az logic integration-account session list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>
az logic integration-account session show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--name <session-name>
# Assembly
# Session
az logic integration-account assembly list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>
az logic integration-account assembly show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--assembly-artifact-name <assembly-name>
{{#endtab }}
{{#tab name="Az Powershell" }}
Get-Command -Module Az.LogicApp
# Retrieve details of an integration account
Get-AzIntegrationAccount -ResourceGroupName <resource-group-name> -Name <integration-account-name>
# Retrieve the callback URL of an integration account
Get-AzIntegrationAccountCallbackUrl -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name>
# Retrieve details of a specific agreement in an integration account
Get-AzIntegrationAccountAgreement -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <agreement-name>
# Retrieve details of a specific assembly in an integration account
Get-AzIntegrationAccountAssembly -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <assembly-name>
# Retrieve details of a specific batch configuration in an integration account
Get-AzIntegrationAccountBatchConfiguration -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <batch-configuration-name>
# Retrieve details of a specific certificate in an integration account
Get-AzIntegrationAccountCertificate -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <certificate-name>
# Retrieve details of a specific map in an integration account
Get-AzIntegrationAccountMap -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <map-name>
# Retrieve details of a specific partner in an integration account
Get-AzIntegrationAccountPartner -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <partner-name>
# Retrieve details of a specific schema in an integration account
Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <schema-name>
{{#endtab }} {{#endtabs }}
Escalación de Privilegios
Lo mismo que la escalación de privilegios de las aplicaciones lógicas:
{{#ref}} ../az-privilege-escalation/az-logic-apps-privesc.md {{#endref}}
Post Explotación
{{#ref}} ../az-post-exploitation/az-logic-apps-post-exploitation.md {{#endref}}
{{#include ../../../banners/hacktricks-training.md}}