Clerk: Authorization bypass when combining organization, billing, or reverification checks
Clerk JavaScript is the official JavaScript repository for Clerk authentication. has(), auth.protect(), and related authorization predicates in @clerk/shared, @clerk/nextjs, @clerk/backend, and other framework SDKs can return true for certain combined authorization checks when the result should be false, allowing a gated action to proceed for a user who does not satisfy the full set of requested conditions. This call shape can be bypassed if certain conditions are met: a has() or auth.protect() call that combines a reverification check with any of role, permission, feature, or plan, or that combines a billing check (feature or plan) with a role or permission check. This vulnerability is fixed in @clerk/clerk-js 5.125.10 and 6.7.5.
Problem Types
| Type | CWE ID | Description |
|---|
| CWE | CWE-754 | CWE-754: Improper Check for Unusual or Exceptional Conditions |
| CWE | CWE-863 | CWE-863: Incorrect Authorization |
Type: CWE
Description: CWE-754: Improper Check for Unusual or Exceptional Conditions
Type: CWE
Description: CWE-863: Incorrect Authorization
Metrics
| Version | Base score | Base severity | Vector |
|---|
| 4.0 | 7.6 | HIGH | CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N |
Version: 4.0
Base score: 7.6
Base severity: HIGH
Vector: CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N