Auth bypass in Ash-Project Ash SQL

CVE-2026-77454

Incorrect Authorization vulnerability in ash-project ash_sql allows a caller to bypass a scoping or authorization filter expressed as exists/2 over a relationship that declares both a limit (or from_many?) and a parent(...)-referencing filter or sort. AshSql.Join.related_query/3 skips the caller-supplied exists predicate for such relationships and delegates it to limit_from_many/5. When the relationship's own filter or sort references parent(...), limit_from_many/5 takes a branch that drops both the limit and the predicate, emitting a bare correlated EXISTS with no predicate. The check then matches any record that has any related row. Most severely, when the expression backs a policy (for example authorize_if expr(exists(memberships, user_id == ^actor(:id)))), the actor-scoping condition disappears and the policy passes for any actor with any related row. This issue affects ash_sql: from 0.4.1 before 0.7.1.

Vulnerability class: Broken Access Control

Published · last modified .

EPSS exploit prediction

EPSS: 0.002 (7.0th percentile), scored .

Very low probability of exploitation in the next 30 days; routine patching cadence is appropriate. 7th percentile — 7.0% of CVEs in the catalogue have a lower EPSS than this one. How to read EPSS.

EPSS trend (30 days)EPSS over the last 30 days for CVE-2026-77454: held from 0.001 to 0.002.

EPSS over last 30 days · oldest: 0.001 · newest: 0.002 · change: +0.001

Affected products

Weakness classification (CWE)

References