CVE-2026-81636: Query-complexity limit bypass via first/last pagination arguments in AshGraphql enables denial of service

Published Aug 30, 2026
·
Updated

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

AshGraphql.Graphql.Resolver.querycomplexity/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 childcomplexity + 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 maxcomplexity 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 ashgraphql: from 0.16.23 before 1.11.0.

Affected Software

1 affected component
ash_graphql>=0.16.23<1.11.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade ash_graphql to a version that resolves this vulnerability.

    Fixed in 1.11.0
  2. Configuration

    Update AshGraphql so query_complexity/3 includes first and last pagination arguments and clamps them to the action's page size (this prevents bypass of the GraphQL query-complexity limit via first/last relay/keyset pagination).

    AshGraphql.Graphql.Resolver.query_complexity/3 :limit pagination handling (including clamping for first/last) = clamp first and last to the action's page size

Event History

Aug 30, 2026
CVE Published
via MITRE·06:25 PM
Data Sourced
via MITRE·06:25 PM
DescriptionWeakness

Frequently Asked Questions

1

Which deployments are exposed?

Deployments using ash_graphql versions from 0.16.23 before 1.11.0 are affected when GraphQL query-complexity limiting is relied on to constrain database work. The bypass applies to Relay connections and keyset pagination using first or last arguments.

2

Does an attacker need authentication or special access?

No. An unauthenticated client can exploit the issue by submitting a nested GraphQL query with large first or last pagination values.

3

Why does the configured max_complexity limit not stop the request?

The vulnerable complexity calculation multiplies nested child complexity for offset pagination using limit, but treats first and last pagination requests as only child complexity plus one. As a result, a high-fan-out nested Relay or keyset query can be accepted as cheap while causing an unbounded database read.

4

What version resolves the issue?

Upgrade ash_graphql to version 1.11.0 or later. The fix accounts for first and last arguments and clamps them to the action's page size.

5

How can I assess whether requests may be exploiting this?

Review GraphQL requests for nested Relay connection or keyset pagination queries that supply unusually large first or last values, especially where query-complexity enforcement accepted them. Equivalent queries using limit may be rejected by the complexity cap while the first or last variants are accepted.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203