---
id: "CVE-2026-115627"
kind: "vulnerability"
aliases: ["CVE-2026-115627"]
title: "Ash Postgres: multitenant lateral joins leak records across tenants"
severity: "medium"
cvss: 6.0
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["ash", "elixir", "multitenancy", "package", "postgres"]
not_affected_if: ["no-attribute-multitenancy", "single-tenant"]
published_at: "2026-10-25T20:16:32+00:00"
first_seen_at: "2026-10-25T20:35:47+00:00"
updated_at: "2026-10-25T20:37:44+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-115627", "first_seen_at": "2026-10-25T20:35:47+00:00"}]
---

# Ash Postgres: multitenant lateral joins leak records across tenants

When a many-to-many or through relationship is loaded with a lateral join, ash_postgres skips the attribute multitenancy filter on the join resources. A caller can therefore load destination records linked only through another tenant's join rows.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the `ash_postgres` version in `mix.lock` or `mix deps` and see whether it is from `0.38.0` up to but not including `2.15.2`.
- Look for `attribute` multitenancy on resources used in many_to_many or through relationships that are loaded with a limit or sort.

## Fix

- Upgrade `ash_postgres` to `2.15.2` or later.

## Timeline

- 2026-10-25T20:35:47+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-115627

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
