Binary Security: Azure Logic Apps cross-tenant compromises (One Root Case)
Third post in a series on Azure Logic Apps API Connections, describing five critical cross-tenant privilege escalations that let an attacker use any other tenant's connection to reach its backend (Key Vault, Azure SQL, Jira, Salesforce). Techniques include path traversal via ARM DynamicInvoke and undocumented DynamicList endpoints, and abusing the host.api.runtimeUrl parameter in Consumption Logic Apps, including a validation-before-normalization bypass. The author reports $200,000 in bounties; Microsoft fixed all issues.
What it is
A write-up by the Binary Security author (third in a series, 2026) of five critical cross-tenant elevation-of-privilege bugs in Azure Logic Apps API Connections, reported to Microsoft, which fixed all of them. The author reports $200,000 in bounties. The page gives no CVE ids.
How it works
API Connections route calls through a shared Azure API Management (APIM) instance. APIM exchanges the caller's key for the stored backend token. If a caller can make APIM act on another tenant's connection, the victim's configured token is used against their backend.
- DynamicInvoke path traversal. ARM's
DynamicInvoke(or/extensions/proxy/) endpoint forwards to APIM with rights to all connections. A request path such aspath/%2e%2e/%2e%2e/%2e%2e/%2e%2e/apim/keyvault/<victim connection id>/secrets/<name>/valueread a secret from another tenant's Key Vault. Microsoft's first fix blocked certain paths rather than fixing the token scoping. - Undocumented DynamicList. The author extracted resource-provider code from a Standard Logic App host and found four undocumented functions beside
DynamicInvoke. OnlyDynamicInvokehad the path blacklist. ChangingdynamicInvoketoDynamicListin the URI worked, with each path segment passed as its own parameter (..,..,sql, victim connection id, and so on). This gave an arbitrary SQL query, including an INSERT, on a victim's Azure SQL database. Microsoft fixed it by blocking all those endpoints. The author says no other mitigation is in place, so the endpoints would presumably be exploitable again if reopened. The other two functions were not reported. - host.api.runtimeUrl in Consumption Logic Apps. Consumption apps create Version 1 connections, with no managed identity authorized per connection. Standard apps create Version 2 connections with that authorization. The runtime validates ownership of the connection in
host.connection, but thehost.api.runtimeUrlinput (set via code view or the API) can point elsewhere. If the host ends inazure-apihub.net, the Authorization header is added. This reached any Version 1 connection. - Validation before normalization. Microsoft's fix required the runtime URL to match the expected endpoint exactly. The check ran before path normalization, so a traversal in the URL passed validation while APIM resolved it to the victim's connection.
- Regression. The next fix for that traversal stopped validating the original runtimeUrl path, so the first runtimeUrl attack worked again.
flowchart LR
A[Attacker's own connection] --> B{Entry point}
B -->|ARM DynamicInvoke / DynamicList| C[Path traversal to APIM]
B -->|Consumption app host.api.runtimeUrl| D[Runtime URL override]
C --> E[APIM uses victim connection token]
D --> E
E --> F[Victim backend: Key Vault, SQL, Jira, Salesforce]Preconditions / Affected
- Attacker needs only their own API connection or Consumption Logic App, plus the victim's connection id.
- Impact depends on the backend token's privileges. The author guesses scoping is rarely minimal, and OAuth connections use the creating user's token.
- The page names Key Vault, Azure SQL, Jira and Salesforce as reachable backends.
What to do
The page gives no customer action. Microsoft fixed all five server-side, so nothing is stated to need patching. Least-privilege scoping of connection tokens and keys is the author's implied mitigation, and it is a guess about the cause, not a documented control.
Caveats
- The author reports disagreements with MSRC during the process, without detail.
- The page offers no detection guidance and no way to tell if a connection was abused.
- The Blue Hat Asia 2026 talk recording was not yet linked.
Organisations named here
- Blue Hat Asia 2026
- cross-tenant compromise
- DynamicInvoke
- DynamicList
- host.api.runtimeUrl
- MSRC
Technologies named here
- Azure Logic Apps
- Azure Key Vault
- Azure
- Azure Resource Manager
- ARM REST API DynamicInvoke
- ARM REST API DynamicList
- Azure API Management (APIM)
- Azure Logic Apps API Connections (Version 1 connections used by Consumption Logic Apps; cross-tenant compromise of connected backends)
- Azure Logic Apps Consumption (creates Version 1 connections, implicit access to every Version 1 API Connection)
- Azure Logic Apps Standard (dedicated host, creates Version 2 connections with managed identity authorization)
- Azure SQL
- Azure SQL databases (cross-tenant arbitrary query and write through API Connections)
- Logic Apps Code view and API endpoints
- Microsoft Security Response Center (MSRC)
- Swagger (OpenAPI)
Techniques named here
- Path traversal
- Confused deputy
- Cross-tenant connection hijacking
- Fix regression exploitation
- Runtime URL override via host.api.RuntimeUrl
- Source code review of extracted resource code
- SQL query injection through connector
- Undocumented endpoint discovery
- Validation before normalization bypass
Also named here
- Azure API Management
Related in Cloud & Infra


Orca Security: GenAI Risks in Cloud Environments
.png)
Google API keys keep working after you delete them
