Az - Logic Apps

Reading time: 14 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 ist ein cloudbasierter Dienst von Microsoft Azure, der Entwicklern ermöglicht, 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 wie Office 365, Dynamics CRM, Salesforce und vielen anderen zu verbinden und zu interagieren. Sie können auch benutzerdefinierte Konnektoren für Ihre spezifischen Bedürfnisse erstellen.

Beim Erstellen einer Logic App müssen Sie entweder ein externes Speicherkonto erstellen oder verknüpfen, das den Workflow-Zustand, die Ausführungshistorie und Artefakte speichert. Dieser Speicher kann mit Diagnosetools zur Überwachung konfiguriert und mit Netzwerkzugriffsrestriktionen gesichert oder in ein virtuelles Netzwerk integriert werden, um den ein- und ausgehenden Datenverkehr zu steuern.

Beispiele

  • Automatisierung von Datenpipelines: Logic Apps können Datenübertragungs- und Transformationsprozesse in Kombination mit Azure Data Factory automatisieren. Dies ist nützlich, um skalierbare und zuverlässige Datenpipelines zu erstellen, die Daten zwischen verschiedenen Datenspeichern wie Azure SQL Database und Azure Blob Storage bewegen und transformieren, was Analysen und Geschäftsintelligenzoperationen unterstützt.
  • Integration mit Azure Functions: Logic Apps können zusammen mit Azure Functions verwendet werden, um anspruchsvolle, ereignisgesteuerte Anwendungen zu entwickeln, die nach Bedarf skalieren und nahtlos mit anderen Azure-Diensten integriert werden. Ein Beispielanwendungsfall ist die Verwendung einer Logic App, um eine Azure Function als Reaktion auf bestimmte Ereignisse, wie Änderungen in einem Azure Storage-Konto, auszulösen, was eine dynamische Datenverarbeitung ermöglicht.

Visualisieren einer LogicAPP

Es ist möglich, eine LogicApp grafisch darzustellen:

oder den Code im Abschnitt "Logic app code view" zu überprüfen.

SSRF-Schutz

Selbst wenn Sie die Logic App anfällig für SSRF finden, können Sie nicht auf die Anmeldeinformationen aus den Metadaten zugreifen, da Logic Apps dies nicht zulässt.

Zum Beispiel wird etwas wie dies das Token nicht zurückgeben:

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

Hosting-Optionen

Es gibt mehrere Hosting-Optionen:

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

Hauptmerkmale

  • Speicher: Logic Apps benötigen ein externes Azure Storage-Konto, um den Workflow-Zustand, die Ausführungshistorie… zu speichern und müssen sich in derselben Ressourcengruppe wie die Logic App befinden.
  • Netzwerk & Sicherheit: Logic Apps können mit öffentlichem oder privatem Zugriff konfiguriert werden. Standardmäßig ist die App für das Internet geöffnet, kann jedoch mit einem Azure Virtual Network für isolierte Konnektivität integriert werden.
  • Application Insights: Application Performance Management (APM) über Azure Monitor Application Insights kann aktiviert werden, um die Leistung zu verfolgen, Anomalien zu erkennen und Analysen bereitzustellen.
  • Zugriffskontrolle: Logic Apps unterstützen System Managed Identities & User Managed Identities.

"Single" Workflows

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. Workflows können mehrere Systeme integrieren, Ereignisse und Regeln auslösen und gewährleisten Konsistenz und Effizienz in den Prozessen.

Azure Logic Apps bietet die Funktionalität, einen einzelnen Workflow ohne die Notwendigkeit einer Logic App selbst zu erstellen.

Jeder Workflow hat unterschiedliche Trigger. Diese Trigger sind die Schritte, die der Workflow befolgt. Jeder Trigger hat seine Parameter, die je nach Art des Triggers variieren können:

  • Verbindungsname
  • Authentifizierungstyp, der Access Key, Microsoft Entra ID, integrierte Dienstprinzipal-Authentifizierung und Logic Apps Managed Identity sein kann.

Trigger haben auch verschiedene Einstellungen:

  • Schema-Validierung: Stellt sicher, dass eingehende Daten einer vordefinierten Struktur folgen.
  • Parallelitätskontrolle: Begrenzung der Anzahl paralleler Ausführungen.
  • Triggerbedingungen: Bedingungen, die erfüllt sein müssen, bevor der Trigger ausgelöst wird.
  • Netzwerk: Konfiguriert die Chunk-Größe für den Datentransfer und ermöglicht das Unterdrücken von Workflow-Headern in Antworten.
  • Sicherheit: Aktiviert sichere Eingaben/Ausgaben, um sensible Daten in Protokollen und Ausgaben zu verbergen.

Einstellungen & API-Verbindungen:

Ein Workflow hat verschiedene Einstellungen wie:

  • Erlaubte eingehende IP-Adressen: Diese Einstellung ermöglicht es Ihnen, einzuschränken, wer Ihre Logic App auslösen oder starten kann. Die Optionen sind Any IP, nur andere Logic Apps und spezifische IP-Bereiche.
  • Integrationskonto: Hier können Sie Ihre Logic App mit einem Integrationskonto verknüpfen.
  • Hohe Durchsatzrate: Diese Einstellung ermöglicht es Ihrer Logic App, mehr Anfragen schnell zu bearbeiten.
  • Aufbewahrung der Ausführungshistorie: wie lange die Historie der Ausführungen Ihrer Logic App aufbewahrt wird.

Sie können die verschiedenen API-Verbindungen sehen, die der Workflow hat. Innerhalb jeder dieser Verbindungen haben sie unterschiedliche Eigenschaften und die Möglichkeit, die API-Verbindung zu bearbeiten, wobei der Authentifizierungstyp geändert werden kann.

Historie & Versionen: Es gibt die Option, auf die Historie der verschiedenen Ausführungen zuzugreifen, die Einstellungen, Ausgaben, Parameter und den Code anzeigt.

Es gibt auch 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.

Autorisierung: Azure Logic Apps 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 empfangen wird, 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: Wenn Sie einen anforderungsbasierten Trigger zum ersten Mal speichern, erstellt Logic Apps automatisch einen eindeutigen Endpunkt mit einer SAS-Signatur (erstellt aus dem Zugriffsschlüssel), die die Berechtigung zum Aufrufen des Workflows gewährt. Diese SAS-Signatur ist in der URL des Triggers eingebettet. Dieser Schlüssel kann regeneriert werden und es wird eine neue SAS-Signatur erstellt, aber die Schlüssel können nicht aufgelistet werden.

Die URL, um ihn mit dem Zugriffsschlüssel aufzurufen:

https://.logic.azure.com:443/workflows//triggers//paths/invoke?api-version=&sp=%2Ftriggers%2F%2Frun&sv=&sig=

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:

  • Schemata: Verwaltet XML-Schemata zur Validierung und Verarbeitung von Nachrichten in Ihrem Integrationskonto.
  • Maps: Konfigurieren Sie XSLT-basierte Transformationen, um Datenformate innerhalb Ihrer Integrations-Workflows zu konvertieren.
  • Assemblies: Verwaltet Integrationskonten-Assemblies, um Logik und Datenverarbeitung zu optimieren.
  • Zertifikate: Verwaltet Zertifikate zur Verschlüsselung und Signierung von Nachrichten, um eine sichere Kommunikation zu gewährleisten.
  • Partner: Verwaltet Informationen über Handelspartner für B2B-Transaktionen und ermöglicht nahtlose Integrationen.
  • Vereinbarungen: Konfigurieren Sie Regeln und Einstellungen für den Austausch von Daten mit Handelspartnern (z. B. EDI, AS2).
  • Batch-Konfigurationen: Verwaltet Batch-Verarbeitungs-Konfigurationen, um Nachrichten effizient zu gruppieren und zu verarbeiten.
  • RosettaNet PIP: Konfigurieren Sie RosettaNet Partner Interface Processes (PIPs), um die B2B-Kommunikation zu standardisieren.

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

Nach der Ausnutzung

Az - Logic Apps Post Exploitation

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