Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessQuery resource with runtime read policy
-
DeliveryAuthorizer reduces all record scenarios to impossible (denial certain)
-
ExploitEmpty-scenario branch retains denied record instead of dropping it
-
ExecutionDenied records returned as authorized output
-
ImpactAttacker receives confidential records they are explicitly forbidden from reading
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 | Exploitation requires that the targeted Ash resource explicitly declares one or more read policies with access_type :runtime - a non-default configuration where checks are evaluated per-record rather than compiled into database filters. Resources using only the default filter-based read policies are NOT vulnerable. The actor performing the query requires no special privileges beyond whatever the application grants to issue a read - if the application permits unauthenticated reads, unauthenticated actors are equally affected; if reads require application-level authentication, that authentication must first be satisfied. The flaw is limited strictly to read actions; create, update, and destroy policy paths are unaffected. Exploitation is further bounded to Ash versions 3.4.44 through 3.32.1. |
| Impact | The CVSS 4.0 vector (AV:L/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N) scores 5.9, with high confidentiality impact constrained by AT:P (attack requirements present: the resource must be configured with access_type :runtime) and AV:L. The AV:L designation likely reflects that this is a library-level flaw rather than a directly exposed network service, but it may understate real-world exposure: Ash-based applications are frequently network-accessible APIs where any application user - authenticated or not, depending on the app's own auth posture - could retrieve unauthorized records through a normal API call. No EPSS score was provided; exploitation probability cannot be independently quantified. The issue is not in CISA KEV and no public exploit code has been identified, suggesting targeted rather than opportunistic exploitation risk at present. The primary limiting factor is that only resources explicitly opting into access_type :runtime policies are affected; the default filter-based policy path is not vulnerable. Overall real-world priority is moderate: low in environments without runtime-typed read policies, high in those that rely on runtime checks for record-level confidentiality. |
| Exploit ScenarioDerived | A user of an Ash-based application issues a standard read request against a resource that has an access_type :runtime read policy - such as a policy that restricts records to the current user's own data. The Ash authorizer evaluates per-record scenarios, determines all authorization paths are impossible for a denied record, and due to the empty-scenario bug, appends those records to the authorized result. The caller receives records they are explicitly denied, indistinguishable from legitimately authorized results, requiring only a normal API call and no special tooling. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 01, 2026
Record-level authorization bypass in Ash (ash-project) versions 3.4.44 through 3.32.1 silently leaks denied records to any actor when resources use access_type :runtime read policies. A logic error in Ash.Policy.Authorizer.check_result/1 causes the empty-scenario branch - reached when all policy paths for a record are impossible and the record must be forbidden - to instead keep and return the record as authorized. No public exploit has been identified at time of analysis; the vendor confirmed the issue and released a fix in version 3.32.2.
RemediationAI
Upgrade Ash to version 3.32.2 or later, which contains the one-line authorizer fix in lib/ash/policy/authorizer/authorizer.ex (commit 6eddb8ab26e45023faf0c79ebd152bb40aefda02 at https://github.com/ash-project/ash/commit/6eddb8ab26e45023faf0c79ebd152bb40aefda02). The vendor security advisory is at https://github.com/ash-project/ash/security/advisories/GHSA-4259-gvr2-4xhq. If immediate upgrade is not feasible, a compensating control is to convert affected resources from access_type :runtime read policies to filter-based policies (the default), which bypass the vulnerable code path entirely; this trade-off is that filter-based checks must be expressible as data-layer query conditions and cannot use arbitrary Elixir business logic, so migration may not be possible for all resources. Alternatively, restrict access to the affected read actions at the application or network layer - for example, by requiring elevated authentication or IP allowlisting - until the patch is applied.
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
Ash is an Elixir framework for building resources, APIs, and applications declaratively. Its authorization system (Ash.Policy.Authorizer) evaluates read access via a scenario-based model: policies are either filter-based (compiled into database queries before retrieval) or runtime checks (evaluated per-record after retrieval). CWE-863 (Incorrect Authorization) manifests in check_result/1 at lib/ash/policy/authorizer/authorizer.ex: when scenario reduction determines that all policy paths for a given record are impossible - meaning no check combination can authorize it - the empty-scenario branch incorrectly executed {[record | data], authorizer, any_forbidden?}, appending the record to the authorized result list. The one-line fix changes this to {data, authorizer, true}, dropping the record and setting the forbidden flag. CPE cpe:2.3:a:ash-project:ash covers all affected releases from 3.4.44 up to (exclusive) 3.32.2.
Know when Ash 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:L/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
AV:N for network-exposed Ash APIs; AC:H for the required access_type :runtime configuration; PR:N since any actor is affected regardless of privilege; C:H for full unauthorized record disclosure; no integrity or availability impact.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Incorrect Authorization vulnerability in ash-project ash returns records that a runtime read policy denies to any actor.
When a resource has an access_type :runtime read policy (a check evaluated per record rather than compiled to a filter), Ash.Policy.Authorizer decides each record in check_result/1 (lib/ash/policy/authorizer/authorizer.ex) by discarding impossible policy scenarios and inspecting what remains. When every scenario for a record was impossible, meaning no policy can authorize it and it must be forbidden, the empty-scenario branch instead kept the record ({[record | data], authorizer, any_forbidden?}) and returned it as authorized. As a result, records the runtime read policy denies are returned to any actor. The fix forbids a record whose scenarios are all impossible.
This issue affects ash: from 3.4.44 before 3.32.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
Private argument injection in the Ash Elixir framework (versions 3.0.0 through 3.29.2) allows end users to set action ar
An issue was discovered in the ash crate before 0.33.1 for Rust. Rated critical severity (CVSS 9.8), this vulnerability
Atom table exhaustion in the Ash framework (Elixir) allows an unauthenticated remote attacker to crash a BEAM node by su
Cross-tenant record takeover in the Ash framework (Elixir) for versions 1.22.0 up to 3.37.2: when a resource uses attrib
An authorization bypass in the Ash framework (Elixir) lets authenticated, lower-privileged actors recover values they ar
Information disclosure in the Ash framework for Elixir (versions 2.6.0 up to but not including 3.34.6) lets an authentic
An incorrect authorization flaw in the Elixir Ash framework (versions 3.24.0 up to but not including 3.37.1) lets an aut
Persistent record-level denial of service in the ash Elixir resource framework (versions 3.6.3-3.32.1) lets any actor wh
Integer overflow in Ash Framework's vector encoding corrupts stored vectors in any Elixir application using Ash versions
CPU exhaustion in Ash Framework's string type constraint handler allows denial of service against Elixir applications th
Memory exhaustion via decompression bomb in Ash Framework's keyset pagination can terminate Erlang nodes running version
Unbounded string storage in Ash Framework versions 0.10.0 through 3.32.x allows unauthenticated attackers to bypass max_
EUVD-2026-68966
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB