GraphQL
Tools
Install this and point it to the target
Initial Testing
Enumeration
Introspection to view the entire structure of the storage, and available queries to run
Exploit Examples
Mutation to modify data
Querying IDOR
Use IDOR to see if you can access data that is not listed
Batching Attacks
To bypass rate-limiting, a you can send multiple queries in a single GraphQL payload

Exploits Write Ups
Vulnerability lies in not ensuring the order ID belongs to a user ID. When an order is deleted, the amount is refunded to any user ID that is entered in the field
SQL injection leading to crafting arbitrary GraphQL queries. Introspection leaked the schema, which allowed the attacker to query sensitive data.
Basic introspection leading to querying of sensitive information
Mitigations
If your API is not intended for use by the general public, disable introspection on it.
If your API is intended for use by the general public then you will likely need to leave introspection enabled. However, you should review the API's schema to make sure that it does not expose unintended fields to the public.
Make sure that suggestions are disabled. This prevents attackers from being able to use Clairvoyance or similar tools to glean information about the underlying schema. You cannot disable suggestions directly in Apollo.
Make sure that your API's schema does not expose any private user fields, such as email addresses or user IDs.
Last updated