Not a U.S. government website. NDD is an independent vulnerability database by Volerion and is not affiliated with or endorsed by NIST or NVD.
VOLERION
Volerion Security Research

NOT DEFERRED DATABASE

VULNERABILITIES

CVE-2026-96581 Details

ANALYZED


This CVE record has been analyzed and enriched by NVDAPI.com as an independent party.

Description

Authorization Bypass Through User-Controlled Key vulnerability in ash-project ash allows a user of one tenant to read, overwrite and take over another tenant's records via an upserting create action. Under attribute multitenancy, Ash.Actions.Create (lib/ash/actions/create/create.ex) and Ash.Actions.Create.Bulk (lib/ash/actions/create/bulk.ex) upserted on the primary key, or on an all_tenants? identity, without scoping the conflicting record to the request's tenant. A caller of a create action with upsert? true that accepts the primary key, supplying a record id from another tenant, updated that record's upsert fields and received all of its attributes in the result. With the default upsert fields the tenant attribute was written too, moving the record into the caller's tenant. Read and update policies do not run for upserts, and tenant-scoped create policies pass because the tenant is the caller's own. This issue affects ash: from 1.22.0 before 3.37.2.

Metrics

CVSS 3.x Severity and Vector Strings:

References to Advisories, Solutions, and Tools

By selecting these links, you will be leaving this site. These are references gathered from the official CVE record and are not endorsed by Volerion.

Weakness Enumeration

CWE-IDCWE NameSource
CWE-639Authorization Bypass Through User-Controlled KeyEEF

Affected Products

ProductVersions
ash-project ash
>= 1.22.0, < 3.37.2 (semver)

CPE

  • cpe:2.3:a:ash_project:ash:*:*:*:*:*:rust:*:*

Remediation

  • Upgrade: 3.37.2moderate effort
  • Workaround:low effort

    Add `upsert_condition expr(<tenant attribute> == ^tenant())` to every create action that upserts on the primary key or on an `all_tenants?` identity, and do not combine it with `return_skipped_upsert?`. An upsert into another tenant's record then fails with `Ash.Error.Changes.StaleRecord` (or is skipped in a bulk create) and leaves that record unchanged. This does not help on the Mnesia data layer, which ignores upsert conditions in affected versions.

Change History

2 change records found show changes


QUICK INFO

CVE Dictionary Entry:
CVE-2026-96581
NVD Published Date:
Oct 26, 2026
NVD Last Modified:
Oct 26, 2026
Source:
EEF
CVE-2026-96581 Details - Not Deferred