Описание
GraphQL Armor Cost-Limit Plugin Bypass via Introspection Query Obfuscation
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:
However, the node can be FieldNode | FragmentDefinitionNode | InlineFragmentNode | OperationDefinitionNode | FragmentSpreadNode
So, for example, sending the following query
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
to assert that the node must be a FieldNode
PoC
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.
Пакеты
@escape.tech/graphql-armor-cost-limit
< 2.4.2
2.4.2
5.3 Medium
CVSS3
Дефекты
5.3 Medium
CVSS3