CVE-2026-82749 in ashinfo

Summary

by MITRE • 09/01/2026

Incorrect Authorization vulnerability in ash-project ash widens a relationship's parent(...) scoping filter to match unintended records when the referenced parent field cannot be resolved.

Loading a relationship whose filter references parent(...) resolves that expression against the parent record. resolve_parent_in_filter/3 (lib/ash/actions/read/relationships.ex) resolved an unresolvable parent reference (for example when the referenced field was not selected on the source query) to nil rather than failing. A scoping predicate such as org_id == parent(org_id) then becomes an IS NULL match, and a guard like is_nil(parent(org_id)) or org_id == parent(org_id) activates its unrestricted branch, so the relationship returns records the scope was meant to exclude. The fix fails the read with an error when a parent(...) reference cannot be resolved, instead of defaulting to nil.

This issue affects ash: from 3.13.2 before 3.32.2.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Analysis

by VulDB Data Team • 09/01/2026

The vulnerability identified in the Ash framework represents a critical failure in authorization logic within relationship scoping mechanisms, specifically affecting versions ranging from 3.13.2 up to but not including 3.32.2. This flaw stems from an incorrect handling of parent reference resolution during read operations on relationships that utilize dynamic filtering based on associated records. In typical application architectures using Ash, developers define relationships between resources where access control policies rely heavily on the context provided by a parent record. For instance, a policy might dictate that a user can only view child records if their organization identifier matches the organization identifier of the parent resource. This type of conditional authorization is fundamental to maintaining data isolation and preventing unauthorized cross-tenant or cross-context data leakage. The core technical flaw lies in how the framework processes expressions involving parent references when those references cannot be resolved within the current query context.

The root cause of this vulnerability resides in the resolve_parent_in_filter function, which is responsible for evaluating dynamic filters that depend on attributes from a related parent record. When the source query does not explicitly select or include the specific field required to resolve the parent reference, the framework fails gracefully by returning nil instead of raising an error. This design choice inadvertently creates a security bypass because many scoping predicates and guard clauses are written with the assumption that if a value is missing or null, it should either be ignored or treated as matching all records in certain logical branches. Specifically, when a predicate such as org_id equals parent(org_id) encounters a nil result for the parent reference, the comparison often evaluates to true under SQL NULL semantics or application-level logic that treats equality with nil as a match condition. Consequently, the scoping filter effectively becomes an IS NULL check against the target field, which can inadvertently include records that were explicitly meant to be excluded by the authorization policy.

Furthermore, this issue is exacerbated when guard clauses are employed within the relationship definitions. A common pattern involves checking if a parent attribute exists before applying strict filters, such as using a condition like is_nil(parent(org_id)) or org_id equals parent(org_id). In these scenarios, if the parent reference resolves to nil due to missing data in the source query, the first part of the OR statement becomes true. This activates an unrestricted branch that bypasses further validation checks, allowing the relationship to return records regardless of their actual authorization status. The vulnerability essentially transforms a restrictive scope into an open one whenever there is any ambiguity or omission regarding the parent field selection. This behavior violates the principle of least privilege and fails to enforce intended access controls, leading to potential data exposure across organizational boundaries or user contexts that should remain isolated from each other.

The operational impact of this flaw can be severe in multi-tenant applications or systems with complex hierarchical data structures where authorization depends on parent-child relationships. Attackers who can manipulate query parameters or exploit application logic flaws to cause the parent reference resolution to fail may gain access to sensitive records belonging to other tenants, users, or organizational units. This constitutes a significant breach of confidentiality and integrity, as it allows unauthorized entities to read data they should not have visibility into. The vulnerability aligns with CWE-269, which describes Improper Privilege Management, specifically in the context where an actor obtains privileges that are restricted by policy but bypassed due to implementation errors. Additionally, this behavior can be mapped to MITRE ATT&CK techniques related to privilege escalation or unauthorized access through misconfigured permissions, as it allows lateral movement within data structures without proper authentication checks for each specific record accessed.

To mitigate this vulnerability, organizations must upgrade the Ash framework to version 3.32.2 or later, where the fix ensures that read operations fail with an error if a parent reference cannot be resolved rather than defaulting to nil. This change enforces strictness in authorization logic by preventing ambiguous states from silently passing security checks. Developers should also review existing relationship definitions and scoping filters to ensure they do not rely on implicit null handling for critical access control decisions. It is advisable to explicitly select all necessary parent fields required for filter resolution within source queries to avoid triggering the unresolvable state entirely. Furthermore, implementing comprehensive logging around authorization failures can help detect any attempts to exploit this condition during testing or in production environments before full patching occurs. Regular security audits focusing on how dynamic filters interact with missing data contexts are essential to maintaining robust access control mechanisms in applications built upon this framework.

Responsible

EEF

Reservation

08/31/2026

Disclosure

09/01/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Want to stay up to date on a daily basis?

Enable the mail alert feature now!