GHSA-733v-p3h5-qpq7 GraphQL Armor Cost-Limit Plugin Bypass via Introspection Query Obfuscation

Not scored Published

Attackers can bypass GraphQL cost limits by naming queries __schema, potentially causing denial of service in applications using the default configuration.

Exploited in the wild
Not known
Login needed
Not needed
Attackable
Over the internet
Victim action needed
Not needed
Fix
Available

What is GHSA-733v-p3h5-qpq7?

GHSA-733v-p3h5-qpq7 is a vulnerability in @escape.tech/graphql-armor-cost-limit, published on 25 Apr 2025. An attacker can exploit it over the internet without logging in, with no action from the victim.

Official description

Summary

A query cost restriction using the cost-limit can be bypassed if ignoreIntrospection is enabled (which is the default configuration) by naming your query/fragment __schema.

Details

At the start of the computeComplexity function, we have the following check for ignoreIntrospection option:

    if (this.config.ignoreIntrospection && 'name' in node && node.name?.value === '__schema') {
      return 0;
    }

However, the node can be FieldNode | FragmentDefinitionNode | InlineFragmentNode | OperationDefinitionNode | FragmentSpreadNode

So, for example, sending the following query

query hello {
  books {
    title
  }
}

would create an OperationDefinitionNode with node.name.value == 'hello'

The proper way to handle this would be to check for the __schema field, which would create a FieldNode.

The fix is

    if (
      this.config.ignoreIntrospection &&
      'name' in node &&
      node.name?.value === '__schema' &&
      node.kind === Kind.FIELD
    ) {
      return 0;
    }

to assert that the node must be a FieldNode

PoC

query  {
  ...__schema
}

fragment __schema on Query {
  books {
    title
    author
  }
}
query __schema {
  books {
    title
    author
  }
}

Impact

Applications using GraphQL Armor Cost Limit plugin with ignoreIntrospection enabled.

Fix:

Fixed on 772. A quick patch would be to set ignoreIntrospection to false.

Which versions are affected by GHSA-733v-p3h5-qpq7?

2 open source packages ship an affected version, including @escape.tech/graphql-armor-cost-limit.

PackageAffectedFixed in
@escape.tech/graphql-armor-cost-limit npmAll versions2.4.2
@escape.tech/graphql-armor-cost-limit npmAll versions2.4.2

How do I fix GHSA-733v-p3h5-qpq7?

Upgrade @escape.tech/graphql-armor-cost-limit to 2.4.2 or later.

Is GHSA-733v-p3h5-qpq7 being exploited?

There is no known exploitation of GHSA-733v-p3h5-qpq7 in the wild and no public exploit code.

Sources

Is GHSA-733v-p3h5-qpq7 in your software?

Upload an SBOM and sbomify checks it against every vulnerability here, every day.

Check your SBOMs for free