GraphQL security testing

What is GraphQL Security Testing?

GraphQL security testing focuses on identifying vulnerabilities in GraphQL APIs - a modern query language that allows clients to request exactly the data they need. Unlike REST APIs with fixed endpoints, GraphQL uses a single endpoint with flexible queries, creating unique attack vectors including query complexity attacks, introspection exploitation, and schema manipulation that don't exist in traditional REST APIs.

Vulnerable Scenario Example

# Normal GraphQL query
query GetUser {
  user(id: "123") {
    name
    email
  }
}

# Attack: Deeply nested query causing DoS
query MaliciousQuery {
  user(id: "123") {
    posts {
      comments {
        author {
          posts {
            comments {
              author {
                posts {
                  comments {
                    # ... continues for 100+ levels
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Attack Result: The deeply nested query consumes excessive server resources, potentially causing denial of service while appearing as a legitimate GraphQL query.

How GraphQL Attacks Work

GraphQL's flexibility becomes a security weakness when not properly configured. Attackers exploit the self-documenting nature through introspection, craft complex queries to overload servers, and manipulate query structure to bypass traditional security controls designed for REST APIs.

GraphQL Attack Flow

  1. Schema Discovery - Use introspection to map available types and fields

  2. Query Crafting - Build complex queries to exploit business logic or cause DoS

  3. Authentication Testing - Test query-level access controls and field authorization

  4. Injection Attacks - Inject malicious code through query variables and arguments

  5. Business Logic Abuse - Exploit nested relationships and query complexity

Impact and Consequences

  • Denial of Service - Complex queries consuming excessive server resources

  • Data Exposure - Unauthorized access to sensitive fields and nested data

  • Schema Information Disclosure - Complete API structure revealed via introspection

  • Authorization Bypass - Field-level access control circumvention

  • Injection Attacks - SQL, NoSQL, and command injection through variables

  • Business Logic Exploitation - Abuse of nested relationships and resolvers

Core GraphQL Vulnerabilities

Query Complexity and DoS Attacks

GraphQL's nested query structure can be exploited to create resource-intensive requests.

Depth-Based DoS:

Alias-Based DoS:

Circular Query Attack:

GraphQL Introspection Exploitation

GraphQL's introspection feature reveals the complete schema, exposing all available queries, mutations, and sensitive fields.

Basic Introspection Query:

Detailed Schema Discovery:

Authorization and Access Control Bypass

GraphQL field-level authorization can be bypassed through various query manipulation techniques.

Field-Level Authorization Bypass:

Batch Authorization Bypass:

Injection Vulnerabilities in GraphQL

GraphQL variables and arguments can be exploited for various injection attacks.

SQL Injection via Variables:

NoSQL Injection:

Command Injection:

GraphQL Testing Methodology

Schema Discovery and Reconnaissance

Introspection Testing:

Alternative Discovery Methods:

Authentication and Authorization Testing

Authentication Bypass:

Field-Level Authorization Testing:

Query Complexity Testing

Automated DoS Testing:

Injection Testing

Variable Injection Testing:

Advanced GraphQL Attack Techniques

Batched Query Attacks

Resource Exhaustion via Batching:

Subscription Abuse

WebSocket Subscription DoS:

Mutation Testing

Privilege Escalation via Mutations:

Error-Based Information Disclosure

Schema Discovery via Errors:

GraphQL Security Testing Tools

Specialized GraphQL Tools

GraphQL-Specific Scanners:

  • GraphQL Voyager - Schema visualization and analysis

  • GraphQL Playground - Interactive query testing

  • InQL - Burp Suite extension for GraphQL testing

  • GraphQLmap - Automated GraphQL security testing

Manual Testing Setup

GraphQL Testing with curl:

Burp Suite Configuration:

Last updated

Was this helpful?