Az - Logic Apps

Reading time: 15 minutes

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Informazioni di base

Azure Logic Apps è un servizio basato su cloud fornito da Microsoft Azure che consente agli sviluppatori di creare e eseguire flussi di lavoro che integrano vari servizi, fonti di dati e applicazioni. Questi flussi di lavoro sono progettati per automatizzare i processi aziendali, orchestrare attività e eseguire integrazioni di dati tra diverse piattaforme.

Logic Apps fornisce un designer visivo per creare flussi di lavoro con una ampia gamma di connettori predefiniti, che facilita la connessione e l'interazione con vari servizi, come Office 365, Dynamics CRM, Salesforce e molti altri. Puoi anche creare connettori personalizzati per le tue esigenze specifiche.

Quando crei un Logic App, devi creare o collegare un account di archiviazione esterno che memorizza lo stato del flusso di lavoro, la cronologia delle esecuzioni e gli artefatti. Questo storage può essere configurato con impostazioni diagnostiche per il monitoraggio e può essere protetto con restrizioni di accesso alla rete o integrato in una rete virtuale per controllare il traffico in entrata e in uscita.

Esempi

  • Automazione dei Data Pipeline: Logic Apps può automatizzare processi di trasferimento e trasformazione dei dati in combinazione con Azure Data Factory. Questo è utile per creare pipeline di dati scalabili e affidabili che spostano e trasformano i dati tra vari archivi di dati, come Azure SQL Database e Azure Blob Storage, supportando le operazioni di analisi e business intelligence.
  • Integrazione con Azure Functions: Logic Apps può lavorare insieme ad Azure Functions per sviluppare applicazioni sofisticate e basate su eventi che scalano secondo necessità e si integrano perfettamente con altri servizi Azure. Un esempio di caso d'uso è utilizzare un Logic App per attivare una Azure Function in risposta a determinati eventi, come modifiche in un account di archiviazione Azure, consentendo un'elaborazione dinamica dei dati.

Visualizza un LogicAPP

È possibile visualizzare un LogicApp con grafica:

o controllare il codice nella sezione "Visualizzazione codice Logic app".

Protezione SSRF

Anche se trovi il Logic App vulnerabile a SSRF, non sarai in grado di accedere alle credenziali dai metadati poiché Logic Apps non lo consente.

Ad esempio, qualcosa del genere non restituirà il token:

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

Opzioni di hosting

Ci sono diverse opzioni di hosting:

  • Consumption
  • Multi-tenant: fornisce risorse di calcolo condivise, opera nel cloud pubblico e segue un modello di prezzo pay-per-operation. Questo è ideale per carichi di lavoro leggeri e convenienti. Questo distribuisce un "Single Workflow".
  • Standard
  • Workflow Service Plan: risorse di calcolo dedicate con integrazione VNET per il networking e addebiti per ogni istanza del piano di servizio workflow. È adatto per carichi di lavoro più esigenti che richiedono un maggiore controllo.
  • App Service Environment V3 risorse di calcolo dedicate con piena isolamento e scalabilità. Si integra anche con VNET per il networking e utilizza un modello di prezzo basato sulle istanze di App Service all'interno dell'ambiente.
  • Hybrid progettato per l'elaborazione locale e il supporto multi-cloud. Consente risorse di calcolo gestite dal cliente con accesso alla rete locale e utilizza Kubernetes Event-Driven Autoscaling (KEDA). Si basa su un Container App Connected Environment.

Caratteristiche principali

  • Storage: Le Logic Apps richiedono un account Azure Storage esterno per memorizzare lo stato del workflow, la cronologia delle esecuzioni… e devono trovarsi nello stesso gruppo di risorse della Logic App.
  • Networking & Sicurezza: Le Logic Apps possono essere configurate con accesso pubblico o privato. Per impostazione predefinita, l'app è aperta a Internet ma può essere integrata con una Azure Virtual Network per una connettività isolata.
  • Application Insights: La gestione delle prestazioni delle applicazioni (APM) tramite Azure Monitor Application Insights può essere abilitata per monitorare le prestazioni, rilevare anomalie e fornire analisi.
  • Controllo degli accessi: Le Logic Apps supportano le identità gestite dal sistema e le identità gestite dall'utente.

"Single" Workflows

Un workflow è una sequenza strutturata di passaggi o attività automatizzate che eseguono un processo o obiettivo specifico. Definisce come diverse azioni, condizioni e decisioni interagiscono per raggiungere un risultato desiderato, semplificando le operazioni e riducendo lo sforzo manuale. I workflow possono integrare più sistemi, attivare eventi e regole, garantendo coerenza ed efficienza nei processi.

Azure Logic Apps offre la funzionalità di creare un singolo workflow senza la necessità di una Logic App stessa.

Ogni workflow ha diversi triggers. Questi triggers sono i passaggi che il workflow segue. Ogni trigger ha i propri parametri che possono variare a seconda del tipo di trigger:

  • Nome della connessione
  • Tipo di autenticazione che può essere, Access Key, Microsoft Entra ID, autenticazione del servizio integrato e identità gestita delle Logic Apps.

I triggers hanno anche varie impostazioni:

  • Validazione dello schema: Garantisce che i dati in arrivo seguano una struttura predefinita.
  • Controllo della concorrenza: Limita il numero di esecuzioni parallele.
  • Condizioni del trigger: condizioni che devono essere soddisfatte prima che il trigger venga attivato.
  • Networking: Configura la dimensione dei chunk per il trasferimento dei dati e consente di sopprimere le intestazioni del workflow nelle risposte.
  • Sicurezza: Abilita Input/Output Sicuri per nascondere dati sensibili nei log e nelle uscite.

Impostazioni & Connessioni API:

Un workflow ha diverse impostazioni come:

  • Indirizzi IP in entrata consentiti: Questa impostazione consente di limitare chi può attivare o avviare la tua Logic App. Le opzioni sono Qualsiasi IP, Solo altre Logic Apps e Intervalli IP specifici.
  • Account di integrazione: Qui puoi collegare la tua Logic App a un Account di Integrazione.
  • Alta capacità: Questa impostazione consente alla tua Logic App di gestire più richieste rapidamente.
  • Conservazione della cronologia delle esecuzioni: per quanto tempo viene mantenuta la cronologia delle esecuzioni della tua Logic App.

Puoi vedere le diverse connessioni API che il workflow ha. All'interno di ciascuna di queste connessioni hanno diverse proprietà e la possibilità di modificare la connessione API dove il tipo di autenticazione può essere cambiato.

Cronologia & Versioni: Ha l'opzione di accedere alla cronologia delle diverse esecuzioni, mostra Impostazioni, Output, Parametri e il Codice.

Ha anche l'opzione di accedere a diverse versioni del workflow, dove puoi controllare il codice e cambiare il workflow attuale con una versione precedente di esso.

Autorizzazione: Le Azure Logic Apps supportano politiche di autorizzazione con Entra ID per proteggere i trigger basati su richieste richiedendo un token di accesso valido. Questo token deve includere specifiche dichiarazioni:

  • Emittente (iss) per verificare il fornitore di identità
  • Destinatario (aud) per garantire che il token sia destinato alla Logic App
  • Soggetto (sub) per identificare il chiamante
  • ID JWT (identificatore del token Web JSON)
  • Dichiarazione personalizzata

Quando viene ricevuta una richiesta, le Logic Apps convalidano il token rispetto a queste dichiarazioni e consentono l'esecuzione solo se corrispondono alla politica configurata. Questo può essere utilizzato per consentire a un altro tenant di attivare il workflow o negare l'attivazione da altre fonti, ad esempio consentendo l'attivazione solo se proviene da https://login.microsoftonline.com/.

Chiavi di accesso: Quando salvi un trigger basato su richiesta per la prima volta, le Logic Apps creano automaticamente un endpoint unico con una firma SAS (creata dall'Access Key) che concede il permesso di chiamare il workflow. Questa firma SAS è incorporata nell'URL del trigger. Questa chiave può essere rigenerata e fornirà una nuova firma SAS, ma le chiavi non possono essere elencate.

L'URL per invocarlo con l'Access Key:

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

Enumerazione

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"


Account di Integrazione

Account di Integrazione, sono una funzionalità di Azure Logic Apps. Gli Account di Integrazione vengono utilizzati per facilitare integrazioni a livello aziendale abilitando capacità B2B avanzate, come EDI, AS2 e gestione degli schemi XML. Gli Account di Integrazione sono un contenitore in Azure che memorizza i seguenti artefatti utilizzati per le Logic Apps:

  • Schemi: Gestisci schemi XML per convalidare e elaborare messaggi nel tuo account di integrazione.
  • Mappe: Configura trasformazioni basate su XSLT per convertire formati di dati all'interno dei tuoi flussi di lavoro di integrazione.
  • Assemblaggi: Gestisci gli assemblaggi dell'account di integrazione per semplificare la logica e l'elaborazione dei dati.
  • Certificati: Gestisci certificati per crittografare e firmare messaggi, garantendo comunicazioni sicure.
  • Partner: Gestisci le informazioni sui partner commerciali per transazioni B2B, abilitando integrazioni senza soluzione di continuità.
  • Accordi: Configura regole e impostazioni per lo scambio di dati con partner commerciali (ad es., EDI, AS2).
  • Configurazioni Batch: Gestisci configurazioni di elaborazione batch per raggruppare ed elaborare messaggi in modo efficiente.
  • RosettaNet PIP: Configura i Processi di Interfaccia Partner RosettaNet (PIP) per standardizzare la comunicazione B2B.

Enumerazione

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>


Escalation dei privilegi

Stesso metodo di privesc delle logic apps:

Az - Logic Apps Privesc

Post Sfruttamento

Az - Logic Apps Post Exploitation

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks