Unlike credential stuffing, brute force doesn't need a stolen password list. It tries every possible combination — or a dictionary of common passwords — against a single account.
Against a login API with no protection, a script can try tens of thousands of passwords per minute. A 6-digit numeric PIN has one million combinations. At 10,000 attempts per minute, that's 100 minutes to guarantee success.
Rate limiting often counts HTTP requests, not individual queries inside them. GraphQL allows sending an array of queries in a single request — called query batching.
100 login attempts, 1 HTTP request. The rate limiter sees 1. The login endpoint processes 100. This bypass works on any GraphQL API that allows batching without counting inner operations.