Am I affected?

type your ash_graphql version to check

Description

Allocation of Resources Without Limits or Throttling vulnerability in ash-project ash_graphql allows an unauthenticated client to bypass the configured GraphQL query-complexity limit and force an unbounded database read.

AshGraphql.Graphql.Resolver.query_complexity/3 multiplies child complexity by the requested page size only when the argument map contains :limit (offset pagination). Relay connections and keyset pagination use first and last, which never match that clause and fall through to the catch-all that returns child_complexity + 1. A nested relay query such as posts(first: 500) { edges { node { comments(first: 500) { ... } } } } therefore scores as trivially cheap while materializing the full fan-out, passing an Absinthe max_complexity cap that rejects the equivalent limit-based query. The fix adds first and last clauses clamped to the action's page size.

This issue affects ash_graphql: from 0.16.23 before 1.11.0.

Weaknesses & attack patterns

Weakness

CWE-770 · Allocation of Resources Without Limits or Throttling in catalog → MITRE ↗

Attack patterns

CAPEC-130 · Excessive Allocation MITRE ↗

Affected — Hex / ash_graphql Hex.pm ↗ Repository ↗

0.16.23 < 1.11.0 affected
every other version: unaffected
cpe cpe:2.3:a:ash-project:ash_graphql:*:*:*:*:*:*:*:*
modules · source files · routines
modules 'Elixir.AshGraphql.Graphql.Resolver'
source files lib/graphql/resolver.ex
routines 'Elixir.AshGraphql.Graphql.Resolver':query_complexity/3

Affected — GitHub / ash-project/ash_graphql Repository ↗

d8a3e1b < c3229f6 affected
every other version: unaffected
cpe cpe:2.3:a:ash-project:ash_graphql:*:*:*:*:*:*:*:*
modules · source files · routines
modules 'Elixir.AshGraphql.Graphql.Resolver'
source files lib/graphql/resolver.ex
routines 'Elixir.AshGraphql.Graphql.Resolver':query_complexity/3

References

Credits

Peter Ullrich Finder Reporter
Zach Daniel / Ash Project Remediation developer
Jonatan Männchen / EEF Coordinator

CVSS breakdown

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
« All CVEs