CVE-2026-82724
HighCVSS 7.6Summary
An 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. This affects ash_phoenix from 2.1.26 before 2.3.25.
Risk Assessment
An attacker could bypass tenant-based authorization mechanisms, gaining access to resources of other tenants or performing operations without proper permissions, potentially leading to data isolation breaches.
Recommendation
Immediately upgrade ash_phoenix to version 2.3.25 or later, which includes a fix. Until then, manually verify the tenant in hooks or restrict access to features using SubdomainHook.
Other vulnerabilities in ash_phoenix
See all- CVE-2026-82727Low
In ash_phoenix (from 1.2.17 before 2.3.25), a vulnerability allows disclosure of sensitive information in error messages. The entire raw submitted param map is written into an exception message, potentially exposing secrets in logs and crash reports.
- CVE-2026-82726Medium
A Permissive Regular Expression vulnerability in ash-project ash_phoenix lets a remote client select the tenant an Ash application uses, or degrade the request, by sending a crafted Host header. AshPhoenix.Helpers.get_subdomain/2 stripped the root domain with String.replace(host, ~r/.?#{root_host}/, ""), causing wildcard matching and global unanchored replacement. The issue affects ash_phoenix from 2.1.26 before 2.3.25.
- CVE-2026-82725Low
In ash_phoenix (from 0.6.0-rc.1 before 2.3.25), a vulnerability allows authorization bypass through user-controlled key. An attacker can filter across non-public relationships, potentially revealing private data.
Original NVD description (English source)
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.

