Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as a tenant user
-
DeliveryLoad many_to_many/through relationship with lateral join
-
ExploitJoin resource read action and tenant filter skipped
-
ExecutionOther tenants' join rows matched
-
ImpactRead destination records of unrelated tenants
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 | Exploitable only when a many_to_many relationship's join resource - or any resource along a through path - uses Ash multitenancy strategy :attribute and actually holds rows from multiple tenants, AND the relationship is loaded via a lateral join triggered by a per-record limit, offset, or sort on that relationship. The caller must be an authenticated tenant user (PR:L). Limiting factors: other multitenancy strategies (e.g. schema/context) are not affected; relationships loaded without a lateral join are not affected; and only ash_postgres versions 0.38.0 through 2.15.1 are vulnerable (fixed in 2.15.2). The vendor states upgrading to 2.15.2 is the fix; no alternative mitigation is given in the sources. |
| Impact | This is a genuine but bounded cross-tenant data-isolation flaw rather than a drop-everything emergency. The CVSS 4.0 vector (6.0, Medium) shows network reach (AV:N) but requires an authenticated low-privileged tenant user (PR:L) and a present attack requirement (AT:P), reflecting that specific conditions outside the attacker's control must hold. Impact is confidentiality-only (VC:H, VI:N, VA:N, no scope change) - an attacker reads another tenant's destination records but cannot modify or deny service. No EPSS score and no KEV status are provided in the input, and there is no public exploit identified at time of analysis; the vendor/CNA priority is 'this_month', consistent with a real but non-urgent authorization bug. The signals are internally consistent: medium CVSS, no active-exploitation indicators, and a configuration-dependent trigger all point to a prioritize-and-patch item for affected multi-tenant Ash deployments rather than mass-exploitation risk. Note: EPSS and KEV data are absent from the input, so widespread-exploitation likelihood cannot be quantified from available signals. |
| Exploit ScenarioDerived | An authenticated user of Tenant A loads a many_to_many (or through) relationship with a per-record limit, offset, or sort, causing AshPostgres to build a lateral join that skips the join resource's read action and therefore its attribute-multitenancy filter. Because join rows from other tenants are matched, the user receives destination records linked only through Tenant B's rows - records their tenant should never see. No public proof-of-concept is identified in the provided sources; exploitation requires only normal application usage against a vulnerable configuration. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 25, 2026
Cross-tenant record disclosure in AshPostgres 0.38.0 through 2.15.1 lets an authenticated tenant user load destination records that are only related to a source record through another tenant's join rows, when a many_to_many or through relationship is loaded with a lateral join. The exposure is bounded: it requires the join resource (or a resource along the through path) to use Ash's :attribute multitenancy strategy and to actually hold rows for several tenants, plus a load path that triggers a lateral join via a per-record limit, offset or sort on the relationship; schema- or context-based multitenancy and non-lateral loads are not affected. No public exploit code was identified at time of analysis, the issue is not in CISA KEV, and the vendor-released fix is AshPostgres 2.15.2.
RemediationAI
Upgrade the ash_postgres dependency to 2.15.2 or later (for example {:ash_postgres, "~> 2.15.2"}), which is the vendor-stated fix; the patched release is documented in the GitHub advisory GHSA-gr2r-f49c-9gm2 and the EEF CNA page. The associated commits are 8c25c945c39a45299193fe70b09fc2fa2aacac7b (patch) and 7115bec58678f13b1ac2fb4822a0ba1aea9dbec5, and because the fix tightens the Ash dependency from approximately 1.41 and above 1.41.11 to approximately 1.42, plan a coordinated bump of the ash package alongside ash_postgres and re-run relationship-load tests in staging. The vendor documents no alternative mitigation in the available sources, so until the upgrade lands, exposure reduction depends on the code paths in use: systems whose join resources rely on :attribute multitenancy with mixed-tenant rows should avoid loading many_to_many and through relationships through lateral-join paths (per-record limit, offset or sort), accepting the loss of that per-record pagination/sorting behavior, and auditing whether schema- or context-based multitenancy could be used for those resources instead - noting that such a migration changes the database schema and query semantics and is not a drop-in toggle.
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
AshPostgres is the PostgreSQL data layer for the Ash framework (Elixir/Ecto). Ash resolves multitenancy in two main ways: :attribute multitenancy, where a tenant column is filtered inside a resource's read action, and schema/context strategies applied elsewhere in the query pipeline. For many_to_many relationships and through paths, AshPostgres.DataLayer constructs lateral joins in lateral_join_query/3 and through_step_queries/4; in vulnerable versions those helpers built the query for the join resource (and for each intermediate resource on a through path) directly, without invoking that resource's read action - the point at which attribute multitenancy is enforced. The result is an incorrect authorization condition (CWE-863): rows from other tenants in the join table were joined, and the load returned destination records that the caller's tenant is not actually related to. The upstream commit 7115bec5 restructures the path handling to carry the full resource path, threads relationship context and relationship filters into the generated queries (Ash.Query.set_context/2, Ash.Query.do_filter/2), tightens the can?/2 lateral-join check to verify every resource in the path shares the same data layer and repo, and reworks maybe_get_resource_query/2 to apply context and filter for destination and through resources. The fix also bumps the Ash dependency constraint in mix.exs from approximately 1.41 and above 1.41.11 to approximately 1.42, so upgrades may need to move the ash package in lockstep with ash_postgres. Trigger specifics beyond the lateral-join plus :attribute-multitenancy combination are not further described in the available sources.
Know when Elixir 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:N/VA:N/SC:N/SI:N/SA:N
Authenticated tenant user (PR:L) plus a required multitenant/lateral-join configuration maps AT:P to AC:H; cross-tenant read only, so C:H, I:N, A:N, no scope change.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Incorrect Authorization vulnerability in ash-project ash_postgres allows a user to load destination records linked to a source record only through another tenant's join rows.
When a many_to_many relationship, or a through relationship, is loaded with a lateral join (for example with a per-record limit or sort), AshPostgres.DataLayer builds the query for the join resource, and for each resource along a through path, in lateral_join_query/3 and through_step_queries/4 without running that resource's read action, which is where attribute multitenancy is applied. When those resources use strategy :attribute multitenancy, rows belonging to other tenants were joined, so the load returned destination records that the caller's tenant is not related to.
This issue affects ash_postgres: from 0.38.0 before 2.15.2.
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.
Unbounded recursion in the Elixir `protobuf` Hex package (versions >= 0.8.0, < 0.16.1) lets unauthenticated remote attac
Improper JWT signature verification in Dashbit's nimble_zta (0.1.2 up to but not including 0.1.3) lets an unauthenticate
Session-swapping authentication bypass in the Elixir library AshAuthentication (versions 4.10.0 before 4.15.0 and 5.0.0-
Authentication bypass in the Elixir library ash_authentication lets an attacker who operates one federated identity-prov
Account takeover in AshAuthentication (Elixir/Ash) 4.14.0 through 4.14.x and 5.0.0-rc.10 through 5.0.0-rc.13 lets unauth
Server-Side Request Forgery protection bypass in the Elixir safeurl library (versions 0.1.0 and later) allows unauthenti
Unauthenticated remote CPU exhaustion in mtrudel Bandit's HTTP/2 server (versions before 1.14.0) is achievable by holdin
Unbounded per-connection memory and CPU growth in the Elixir Bandit HTTP/2 server (0.3.6 up to 1.14.0) lets an unauthent
Unauthenticated remote denial of service in the Elixir HTTP server Bandit (mtrudel/bandit) from 0.1.0 before 1.14.0 lets
Unauthenticated remote attackers can consume disproportionate server CPU on Bandit (mtrudel/bandit, Elixir/Erlang) by se
Memory-exhaustion denial of service in the elixir-protobuf library (protobuf) from 0.8.0 onward allows an unauthenticate
Atom table exhaustion in the Ash framework (Elixir) allows an unauthenticated remote attacker to crash a BEAM node by su
EUVD-2026-109569
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB