CVE-2026-115635 PUBLISHED

AshPostgres returns another tenant's record for a skipped upsert when return_skipped_upsert? is set

Assigner: EEF
Reserved: 23.10.2026 Published: 25.10.2026 Updated: 25.10.2026

Incorrect Authorization vulnerability in ash-project ash_postgres allows a user to read another tenant's record through a skipped upsert.

When Ash.bulk_create/4 or a single create runs as an upsert with return_skipped_upsert?: true and the upsert is skipped (for example because its upsert_condition does not hold), AshPostgres.DataLayer reads the existing row back by the upsert identity in do_bulk_create/3 and upsert/4. That lookup did not apply the resource's attribute multitenancy, so on a resource using strategy :attribute it could match and return the row of another tenant with the same identity values, exposing its fields to the caller.

This issue affects ash_postgres: from 2.6.22 before 2.15.2.

Metrics

CVSS Vector: 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
CVSS Score: 6

Product Status

Vendor ash-project
Product ash_postgres
Versions Default: unaffected
  • affected from 2.6.22 to 2.15.2 (excl.)
Vendor ash-project
Product ash_postgres
Versions Default: unaffected
  • affected from af0903f1380468bbe1b61fe65acb33772b5e24a5 to 8aa81220c401cae412d21078d11b3519ea25d3a9 (excl.)

Affected Configurations

Reachable when a resource uses attribute multitenancy, an action performs upserts with return_skipped_upsert?: true, and a caller can supply identity values that another tenant also uses.

Credits

  • Will Townsend finder
  • Will Townsend reporter
  • Zach Daniel / Ash Project remediation developer

References

Problem Types

  • CWE-863 Incorrect Authorization CWE

Impacts

  • A user of one tenant whose upsert is skipped receives another tenant's record with the same identity values.