CVE-2026-77454 exists/2 predicate silently dropped on limited relationships with a parent() filter in AshSql
Attackers can bypass authorization policies in AshSql by exploiting a bug that silently drops exists predicates on limited relationships with parent filters.
- Exploited in the wild
- Not known
- Login needed
- Not needed
- Attackable
- Local or same network only
- Victim action needed
- Not needed
- Fix
- Available
What is CVE-2026-77454?
CVE-2026-77454 is a medium-severity missing authorization vulnerability in ash-project ash_sql, published on 30 Aug 2026. It can only be exploited from the same machine or local network, with no action from the victim.
Official description
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.
Weakness: CWE-863
Which versions are affected by CVE-2026-77454?
1 open source package ship an affected version, including ash_sql.
| Package | Affected | Fixed in |
|---|---|---|
ash_sql Hex | From 0.4.1 | 0.7.1 |
How do I fix CVE-2026-77454?
Upgrade ash_sql to 0.7.1 or later.
Upgrade, and check permissions on every request on the server, not only in the interface. More about Missing authorization.
Is CVE-2026-77454 being exploited?
It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-77454 exists.
Sources
Also known as EEF-CVE-2026-77454, GHSA-8v9m-8pxv-738c.