TL;DR: GraphQL’s single-endpoint model changes how broken authorization, resource exhaustion, and misconfiguration appear in API security reviews, according to StackHawk’s analysis of OWASP API Security Top 10 risks applied to GraphQL. The security model still depends on field-level controls, query complexity limits, and resolver-level testing, not REST-era assumptions.
At a glance
What this is: StackHawk maps OWASP API Security Top 10 risks onto GraphQL and shows why authorization, rate limiting, and schema-aware testing need different treatment than REST.
Why it matters: API and IAM teams need to account for GraphQL’s field-level authorization, query-depth abuse, and resolver behaviour because conventional endpoint-centric controls miss the real failure modes.
By the numbers:
- The OWASP API Security Top 10 list includes 10 core API risk categories, according to StackHawk.
Context
GraphQL changes the shape of API security risk because one endpoint can expose many fields, operations, and data paths at once. That shifts the control problem away from URL-based checks and toward field-level authorisation, schema governance, and resolver-level validation.
The article’s core governance gap is that API security reviews often assume REST-era control patterns will carry over cleanly. In practice, GraphQL can concentrate risk into a smaller surface while making misuse harder to spot, which matters for teams responsible for access control, secrets, and application-layer identity decisions.
Key questions
Q: Where does GraphQL authorization fail in practice?
A: GraphQL authorization most often fails at the field, object, or resolver layer when teams protect the endpoint but not the data path. A query can still return sensitive records if access checks are too coarse, inconsistent, or skipped inside nested execution. The practical test is whether every protected field and mutation has explicit authorization logic.
Q: Why do GraphQL queries create denial-of-service risk even with authentication in place?
A: Authentication only proves who sent the request. In GraphQL, a legitimate request can still be expensive if it is deeply nested, fans out through many resolvers, or repeatedly touches costly backend resources. That is why complexity analysis and depth limiting matter. They cap the work a single query can force the server to perform.
Q: What are the signs that GraphQL security testing is missing real risk?
A: Look for tools that depend on introspection alone, ignore field suggestions and schema leakage, or stop at basic request validation. If they cannot test authenticated roles, depth, batching, and mutation workflows, they are probably not exercising the actual attack surface.
Q: How should teams govern GraphQL alongside IAM and API security?
A: Teams should treat GraphQL as an access-control problem as well as an API design problem. IAM defines the intended privilege model, but GraphQL must enforce that model at the field and mutation level. Security teams should align identity rules, API policy, and resolver testing so the application layer does not expand access beyond the user’s entitlement.
Technical breakdown
Why GraphQL changes authorization control points
GraphQL requests are not secured just by protecting the endpoint. Because clients can ask for nested objects, multiple fields, and related records in one query, authorization has to be enforced at the object and field level, not only at the route level. That is why broken object level authorization and broken object property level authorization show up so clearly in GraphQL reviews. The control failure is usually not that auth is absent, but that it is applied too late or too coarsely to stop unintended data paths.
Practical implication: review resolver logic and field access rules, not only gateway or route authentication.
How query complexity turns into resource abuse
GraphQL’s flexibility lets a single request consume much more server work than a simple request-count limit assumes. Deeply nested queries, repeated lookups, and expensive resolver chains can create denial-of-service conditions even when request volumes look normal. This is why complexity analysis and depth limiting matter more than naive rate limiting in GraphQL environments. The security issue is not just traffic volume, but the work hidden inside each request. For identity teams, that also means abusive queries can become a path to service degradation even when authentication succeeds.
Practical implication: add query-cost controls and depth limits where GraphQL workload abuse is likely.
Why resolver testing matters more than schema documentation
A GraphQL schema describes what should be possible, but resolvers decide what actually happens when a field is requested or mutated. If resolvers are misconfigured, under-tested, or inconsistent about authorization, the schema can look correct while access control fails in practice. That is where misconfiguration risk becomes operational, because the single endpoint makes exposure broader than it first appears. GraphQL security therefore depends on testing the execution layer, not only documenting the contract.
Practical implication: test mutations and resolvers as security-critical code paths, not just API interfaces.
Threat narrative
Attacker objective: The attacker wants unauthorized access to protected data or a way to exhaust application resources through GraphQL execution.
- Entry occurs through a GraphQL endpoint that accepts complex client queries and mutations.
- Credential or object-level authorization weaknesses let an attacker request fields or records that should have been restricted.
- Query complexity or poorly controlled resolvers allow the attacker to drive excessive server work or reach unintended data paths.
- Impact can include unauthorized data exposure, service degradation, or abuse of the GraphQL application layer.
Breaches seen in the wild
- T-Mobile API breach 2023: An attacker pulled data on 37 million T-Mobile accounts through one API, without authorisation, for six weeks before detection.
Read and download The State of NHI & AI Agent Breach Report 2026, covering 200+ breaches impacting Non-Human Identities including AI Agents.
NHI Mgmt Group analysis
GraphQL security is really a control-placement problem, not a protocol problem. The article shows that the main failure mode is assuming endpoint-level protection is enough when the real decision point sits at the field, object, and resolver layer. That makes GraphQL governance closer to fine-grained access control than to ordinary API perimeter defense. Practitioners should treat execution-layer authorization as the primary control boundary.
Query complexity is the GraphQL equivalent of hidden blast radius. A single request can trigger far more backend work than request-count controls suggest, which means abuse can hide inside apparently low-volume traffic. That changes how teams think about availability risk, because denial of service may emerge from expensive query shape rather than obvious flood volume. Practitioners should govern GraphQL cost, not just GraphQL traffic.
Resolver misconfiguration is where schema confidence collapses. Schemas can look disciplined while resolver logic still leaks data or applies inconsistent checks. That is a familiar governance trap in modern application security: documentation says one thing, execution does another. Practitioners should verify the runtime path, because the schema is not the control.
API security and identity governance meet at the point of authorisation certainty. GraphQL exposes how brittle token-based access becomes when the application layer cannot reliably distinguish who may see which field. That matters for IAM and PAM teams as much as for developers, because identity alone does not prevent over-broad data retrieval. Practitioners should align API policy with identity intent, not just session validity.
From our research library:
- Secrets management is a top five cybersecurity priority for only 33% of organisations, behind cloud security (45%), API security (42%), and endpoint security (36%), according to the 2024 State of Secrets Management Survey.
- Only 44% of developers are reported to follow security best practices for secrets management, exposing a significant developer behaviour gap, according to the State of Secrets in AppSec.
- Read next: API Key Management Guide
What this signals
GraphQL authorization gaps are an application-layer governance issue, not just an API testing issue. Teams that rely on coarse endpoint controls will continue to miss field-level exposure and resolver drift, especially where one endpoint hides many distinct access decisions. The practical shift is to govern what each query can reach, not just whether the request was authenticated.
Query-cost controls should now be part of the identity and API control baseline. A valid caller can still overload a GraphQL service with a query that is cheap to send but expensive to execute. For practitioners, that means rate limiting alone is insufficient and query complexity policy should be treated as a core resilience control.
For practitioners
- Implement field-level authorization checks Map every sensitive field and mutation to explicit authorization logic, then test whether role changes, admin data, and nested objects can still be reached through alternate query paths.
- Enforce query complexity and depth limits Set cost controls that account for nested resolvers, repeated object lookups, and expensive mutations so one request cannot consume disproportionate backend resources.
- Test resolvers as security-critical code Add negative tests for broken object level authorization, broken property authorization, and misconfigured mutations so the execution layer is verified before release.
- Review API authentication assumptions Validate that token handling, API key use, and session trust still hold when GraphQL exposes many operations through one endpoint rather than separate URLs.
Key takeaways
- GraphQL changes API security by moving the main control problem from endpoints to fields, resolvers, and query behaviour.
- Authorization failures, resource exhaustion, and misconfiguration all become harder to spot when one request can reach many data paths.
- Practitioners need field-level access checks, complexity limits, and resolver testing to keep GraphQL aligned with intended privilege.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP API Security Top 10 addresses the attack and risk surface, while NIST CSF 2.0 sets the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| OWASP API Security Top 10 | API1 — Broken Object Level Authorization | The article centres on GraphQL authorization gaps that let users reach objects they should not see. |
| API2 — Broken Authentication | The article notes that authentication assumptions change when many operations sit behind one endpoint. | |
| API8 — Security Misconfiguration | GraphQL resolvers and schema settings can be misconfigured even when the schema appears sound. | |
| Recommendation — Test GraphQL resolvers for object-level authorization bypasses and block unintended record access. Validate token and API key handling across GraphQL operations rather than only at the endpoint. Harden GraphQL configuration and verify that runtime access rules match the intended schema contract. | ||
| NIST CSF 2.0 | PR.AA-05 — Access Permissions, Entitlements and Authorizations | GraphQL field-level access decisions need entitlement enforcement aligned to the identity model. |
| Recommendation — Align GraphQL field and mutation access rules with authorised entitlements and role boundaries. | ||
Key terms
- GraphQL Authorization: GraphQL authorization is the control layer that decides what a caller may read, create, update, or delete within a GraphQL API. It sits alongside authentication and should be enforced consistently across queries and mutations so application logic does not leak access decisions into individual resolvers.
- Query Complexity Limiting: A control that estimates the cost of a GraphQL query before execution and blocks requests that exceed a defined threshold. It helps prevent abuse where a single query or batch consumes excessive compute, database calls, or resolver work even if the request appears valid.
- Resolver: A resolver is the service that receives a domain lookup and returns the matching IP address or other DNS record. It sits at a critical control point because it can shape what users and workloads can reach, what gets logged, and which traffic paths are trusted.
- Field-Level Authorization: An access control approach that checks permission at the individual field rather than only at the object or endpoint level. In GraphQL, this is critical because different fields can expose different sensitivity levels, and a user may be allowed to see one field but not another.
Deepen your knowledge
NHI Mgmt Group covers identity security, NHI governance, and agentic AI through independent research, practitioner guides, and the NHI Foundation Level course. It is a useful next step for teams that need to connect identity controls to application and API governance.
Published by the NHIMG editorial team on August 2, 2026.
Updated on October 13, 2026.
NHI Mgmt Group, the independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org