Skip to main content

AshPostgres CVE-2026-115627

| EUVDEUVD-2026-109569 MEDIUM
Incorrect Authorization (CWE-863)
2026-10-25 EEF
6.0
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as a tenant user
  2. Delivery
    Load many_to_many/through relationship with lateral join
  3. Exploit
    Join resource read action and tenant filter skipped
  4. Execution
    Other tenants' join rows matched
  5. Impact
    Read 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

ash_postgres 0.38.0 <2.15.2
ash_postgres 7115bec58678f13b1ac2fb4822a0ba1aea9dbec5 <8c25c945c39a45299193fe70b09fc2fa2aacac7b

Affected Packages

euvd ash_postgres fix: 2.15.2

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

Vendor (EEF) PRIMARY 6.0 MEDIUM
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
vuln.today AI 5.3 MEDIUM

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.

3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

EPSS Score
0.2%
Top 84% exploitable
Prevalence
Low
Elixir/Ash ecosystem Postgres data layer; niche language, limited enterprise footprint
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment CIRCL GitHub VulDB

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

More in Elixir

View all
CVE-2026-54451 HIGH POC
8.2 Jul 15

Unbounded recursion in the Elixir `protobuf` Hex package (versions >= 0.8.0, < 0.16.1) lets unauthenticated remote attac

CVE-2026-91187 CRITICAL
9.3 Sep 24

Improper JWT signature verification in Dashbit's nimble_zta (0.1.2 up to but not including 0.1.3) lets an unauthenticate

CVE-2026-76949 CRITICAL
9.1 Sep 17

Session-swapping authentication bypass in the Elixir library AshAuthentication (versions 4.10.0 before 4.15.0 and 5.0.0-

CVE-2026-91039 CRITICAL
9.1 Sep 17

Authentication bypass in the Elixir library ash_authentication lets an attacker who operates one federated identity-prov

CVE-2026-88952 CRITICAL
9.1 Sep 17

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

CVE-2026-77866 CRITICAL
9.0 Sep 15

Server-Side Request Forgery protection bypass in the Elixir safeurl library (versions 0.1.0 and later) allows unauthenti

CVE-2026-108529 HIGH
8.7 Oct 26

Unauthenticated remote CPU exhaustion in mtrudel Bandit's HTTP/2 server (versions before 1.14.0) is achievable by holdin

CVE-2026-110499 HIGH
8.7 Oct 26

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

CVE-2026-111101 HIGH
8.7 Oct 26

Unauthenticated remote denial of service in the Elixir HTTP server Bandit (mtrudel/bandit) from 0.1.0 before 1.14.0 lets

CVE-2026-113436 HIGH
8.7 Oct 26

Unauthenticated remote attackers can consume disproportionate server CPU on Bandit (mtrudel/bandit, Elixir/Erlang) by se

CVE-2026-104635 HIGH
8.2 Oct 09

Memory-exhaustion denial of service in the elixir-protobuf library (protobuf) from 0.8.0 onward allows an unauthenticate

CVE-2026-94201 HIGH
8.2 Oct 05

Atom table exhaustion in the Ash framework (Elixir) allows an unauthenticated remote attacker to crash a BEAM node by su

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy