Medium+100 XPA07:2021 Identification and Authentication FailuresCWE-347
JWTAuthorizationRole Escalation
Scenario
Your API accepts JWT tokens and trusts the 'role' claim directly for authorization decisions.
The server maintains a list of trusted roles, but never checks whether the claimed role is in that list.
An attacker can craft a token with role='admin' and gain elevated privileges.
Trusting unverified role claims from tokens without a server-side allowlist enables horizontal and vertical privilege escalation — a common pattern in API authorization bypasses.
Your Tasks
Inspect authorise — it checks payload.role === requiredRole but never verifies the role is in trustedRoles.
Fix it: throw 'Untrusted role claim' if payload.role is not in trustedRoles.
If role IS in trustedRoles but doesn't match requiredRole, throw 'Insufficient role'.
If role is in trustedRoles and matches requiredRole, return {authorised:true}.
Examples
Example 1 — Untrusted role bypasses authorization (bug)