GHSA-733v-p3h5-qpq7 GraphQL Armor Cost-Limit Plugin Bypass via Introspection Query Obfuscation
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.
| Package | Affected | Fixed in |
|---|---|---|
@escape.tech/graphql-armor-cost-limit npm | All versions | 2.4.2 |
@escape.tech/graphql-armor-cost-limit npm | All versions | 2.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.