TL;DR: Missing request-level authorization let researchers submit unauthorized transactions and retrieve customer PII, according to Salt. GraphQL flows need server-side identity binding on each sensitive object, or authenticated sessions can still permit cross-account actions.
Editorial analysis by NHI Mgmt Group, based on content published by Salt: “API Threat Research: GraphQL Authorization Flaws in Financial Technology Platform”.
Key questions
Q: Why do encrypted API sessions still leak data when authorization is missing?
A: Encryption protects the connection, not the decision about who may access a resource.
Q: What are the signs that a partner API is creating hidden authorization risk?
A: Look for unauthenticated endpoints, excessive response fields, and receipt or record lookups that work with only a transaction ID.
Q: What breaks when GraphQL APIs do not enforce object-level authorization?
A: The application can authenticate a user and still allow that user to access or change records they do not own.
Practitioner guidance
- Enforce object-level authorization on every GraphQL resolver Verify resource ownership on each resolver and nested field, especially where a single query can expose or change multiple objects.
- Bind transaction requests to server-side identity context Compare the caller’s authenticated identity to the target account, recipient, and transaction scope before execution.
- Review partner API endpoints as part of the authorization boundary Inventory third-party APIs that return receipts, account details, or transaction metadata, then test whether they enforce authentication, least privilege, and response minimisation.
Bottom line: GraphQL flexibility can hide authorization failures until an attacker manipulates object identifiers or nested queries.
Glossary terms: GraphQL Authorization, Broken Object-Level Authorization, API Response Minimisation, Third-Party API Governance
Explore further
View Full Forum → | NHI Foundation Course → | Our Services → | Read the full analysis →
GraphQL authorization debt is the real control problem here. The issue is not that GraphQL is inherently insecure, but that its flexibility raises the cost of getting authorization right on every resolver and downstream API call. Where teams rely on session authentication alone, they accumulate authorization debt across fields, objects, and partner flows. Practitioners should treat GraphQL as an authorization architecture challenge, not just an API syntax choice.
A question worth separating out:
Q: How should teams govern third-party APIs that sit inside payment flows?
A: They should treat them as part of the transaction control boundary, not as simple data sources. That means validating authentication, limiting returned fields, and testing whether the partner endpoint can be used to infer or alter customer activity without explicit permission.
👉 Read our full editorial: GraphQL authorization failures expose transaction and PII risk