Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privilege tenant user
-
DeliveryNavigate to LiveView page with SubdomainHook
-
Exploiton_mount calls handle_subdomain with nil tenant
-
ExecutionAuthorization callback evaluates nil, takes permissive path
-
ImpactRead or modify cross-tenant data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires three specific conditions: (1) the target application uses ash_phoenix 2.1.26 through 2.3.24 with AshPhoenix.LiveView.SubdomainHook attached in on_mount; (2) the application has implemented a consumer SubdomainHook authorization callback that enforces tenant-scoped access checks (applications that use SubdomainHook only for tenant assignment without an authorization gate are not exposed to the authorization bypass, though they may experience nil-related crashes); (3) the attacker holds a valid authenticated session to reach the protected LiveView endpoint, consistent with PR:L in the CVSS 4.0 vector. The key limiting factors are: the Elixir/Ash ecosystem deployment requirement narrows the exposed population; authentication is required, ruling out unauthenticated internet-scale exploitation; and the bypass is only triggered at the LiveView connection and navigation level, not through arbitrary HTTP requests. Applications whose SubdomainHook callback crashes unhandled on nil rather than branching permissively present reduced cross-tenant data access risk, but may still expose error information. |
| Impact | The CVSS 4.0 score of 7.6 with vector AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N reflects a network-exploitable flaw moderated by AT:P - the specific precondition that the application deploys SubdomainHook with tenant-scoped authorization callbacks. For any application that does meet that condition, however, the bypass is total and systematic: every authenticated user bypasses all tenant isolation checks on initial LiveView connection and retains that bypass for the full session. High confidentiality and integrity impacts (VC:H/VI:H) are well-calibrated given the cross-tenant data read and write potential. EPSS data is absent from the provided intelligence, which limits probabilistic exploitation forecasting. The vulnerability is not listed in CISA KEV and no public exploit code has been identified at time of analysis, suggesting opportunistic mass exploitation is not currently occurring. Real-world priority should be governed by whether the application relies on SubdomainHook for compliance-grade tenant isolation - even a mid-sized municipal IT team in swidnica operating a multi-tenant Ash Framework SaaS would be well-advised to treat this as urgent given that the bypass is unconditional once the deployment condition is met, and the fix is a straightforward library upgrade with no breaking API changes. |
| Exploit ScenarioDerived | An authenticated user in a multi-tenant application built on ash_phoenix connects to a LiveView page protected by SubdomainHook. On initial mount, on_mount invokes the tenant authorization callback with a nil tenant; the callback's consumer gate evaluates nil and either crashes with a handled error or takes a permissive branch, granting the session access to resources outside the attacker's assigned tenant. Because the check is not re-run on subsequent in-session navigations, the attacker retains cross-tenant access for the lifetime of the LiveView connection, able to read and modify other tenants' data through the application's normal UI. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAI
Tenant authorization bypass in ash_phoenix's SubdomainHook allows an authenticated user to cross tenant boundaries and access or modify data belonging to other tenants. The flaw is rooted in a LiveView lifecycle ordering error: AshPhoenix.LiveView.SubdomainHook.on_mount/4 called the consumer-defined authorization callback before Phoenix LiveView's handle_params phase had run, guaranteeing the callback always received a nil tenant and either crashed or silently permitted the request. Critically, the flawed check was never re-evaluated on subsequent in-session navigations, so the bypass persisted for the lifetime of the LiveView connection. No public exploit has been identified at time of analysis, but the bypass is systematic and total for all affected deployments using SubdomainHook with tenant-scoped authorization callbacks.
RemediationAI
Upgrade ash_phoenix to version 2.3.25 or later, which restructures SubdomainHook so that both tenant assignment and the handle_subdomain authorization callback run inside handle_params on every navigation, ensuring the real tenant is always present when authorization is evaluated. The fix commit is b396e1aa5c6bdec39255f19cf938b539e6d28b71 and the vendor advisory is at https://github.com/ash-project/ash_phoenix/security/advisories/GHSA-39c8-xcwr-gqff. If an immediate upgrade is not possible, the most effective compensating control is to replace SubdomainHook with a manual implementation that performs both tenant assignment and authorization exclusively inside handle_params callbacks - this eliminates the lifecycle race entirely but requires reimplementing subdomain resolution logic. Alternatively, adding a redundant tenant authorization check inside handle_params as a defence-in-depth measure reduces risk without removing SubdomainHook, though it does not fully close the nil-evaluation path on initial mount. There is no known configuration-level toggle to disable the vulnerable code path while retaining SubdomainHook's functionality.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
ash_phoenix is an Elixir library that integrates the Ash Framework with Phoenix LiveView, providing multi-tenancy primitives including AshPhoenix.LiveView.SubdomainHook, which resolves a tenant from the request subdomain and enforces tenant-scoped authorization. The root cause (CWE-863 Incorrect Authorization) is a misunderstanding of the Phoenix LiveView callback lifecycle: on_mount runs before handle_params, but the original code attached a handle_params hook to assign the tenant and then immediately called handle_subdomain within the same on_mount. The socket assign for the tenant was therefore always unset at the moment handle_subdomain executed, causing apply(m, f, [socket, nil | a]) to invoke the consumer authorization callback with a nil tenant. Consumer gates expecting a valid tenant evaluated nil instead - either crashing or branching permissively - and the check was never repeated on later navigation events within the session. The commit diff at b396e1aa5c6bdec39255f19cf938b539e6d28b71 confirms the fix: a single handle_params hook now resolves the subdomain, writes the tenant assign, and calls handle_subdomain with the real tenant value on every navigation, closing both the initial bypass and the no-re-evaluation gap. CPE cpe:2.3:a:ash-project:ash_phoenix identifies the affected package.
Know when Ash Phoenix gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
AC:H because exploitation requires the specific deployment condition of SubdomainHook with tenant auth callbacks; S:C because the impact crosses tenant security boundaries; PR:L per CVSS 4.0 input confirming authenticated access required.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Incorrect Authorization vulnerability in ash-project ash_phoenix invokes the SubdomainHook authorization callback with a nil tenant, so tenant-scoped access checks never see the tenant they are meant to enforce.
AshPhoenix.LiveView.SubdomainHook.on_mount/4 attached a handle_params hook to assign the tenant and then immediately called handle_subdomain in the same on_mount. The tenant assign is only written when LiveView later runs handle_params, strictly after on_mount returns, so handle_subdomain read an unset assign and ran as apply(m, f, [socket, nil | a]). A consumer gate that halts when the user does not belong to the tenant instead evaluated nil, either crashing or taking a permissive branch, and it was never re-run once the real subdomain was assigned or on later navigations. The fix runs handle_subdomain inside the handle_params hook with the real tenant on every navigation.
This issue affects ash_phoenix: from 2.1.26 before 2.3.25.
Technical POC Analysis
CWE-863 (Incorrect Authorization): a Phoenix LiveView lifecycle ordering error that makes a tenant authorization gate structurally incapable of seeing the tenant.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
More in Ash Phoenix
View allTenant hijacking and request degradation in AshPhoenix (ash_phoenix 2.1.26 through 2.3.24) allows unauthenticated remote
Sensitive form parameters leak into server logs, crash reports, and the Phoenix development error page in ash_phoenix ve
FilterForm in ash_phoenix (versions 0.6.0-rc.1 through 2.3.24) exposes private relationship data to authenticated users
EUVD-2026-68336
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB