Vulnerabilities in pkg:npm/@clerk/expo
PACKAGECVE-2026-42349 is a HIGH (CVSS 8.1) clerk has an authorization bypass vulnerability (CWE-863: Incorrect Authorization) affecting @clerk/clerk js libraries in the npm ecosystem. The issue involves clerk has an authorization bypass when combining organization, billing, or reverification checks. Remediation is available by upgrading affected packages to version 6.7.5, 3.47.5, 4.8.3, 2.33.3, 3.2.14, 6.39.3, 7.2.4, 5.125.10, 5.61.6, 6.4.3, 1.17.21, 2.0.16, 2.17.11, 3.0.18, 1.13.29, 2.2.5, 2.19.36, 3.2.2, 2.4.13, 3.1.4, 0.29.11, 1.1.4, 2.9.15, 3.1.15, 2.6.31, 3.1.16, 1.7.79, 2.1.6, 0.1.16.
pkg:npm/@clerk/expo
Vulnerability advisories affecting package pkg:npm/@clerk/expo. Select an advisory below to view technical details or fixes.
| Advisory ID | CVE / NVD | Severity | Summary |
|---|---|---|---|
| GHSA-w24r-5266-9c3c | CVE-2026-42349 | HIGH | Clerk has an authorization bypass when combining organization, billing, or reverification checks |
CVE-2026-42349 at a Glance
Security Impact
CVSS: 8.1
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N).
How to Fix CVE-2026-42349
To remediate this vulnerability, upgrade all affected @clerk/clerk js dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
npm install @clerk/clerk-js@6.7.5
npm install @clerk/shared@3.47.5
npm install @clerk/shared@4.8.3
npm install @clerk/backend@2.33.3
npm install @clerk/backend@3.2.14
npm install @clerk/nextjs@6.39.3
npm install @clerk/nextjs@7.2.4
npm install @clerk/clerk-js@5.125.10
npm install @clerk/clerk-react@5.61.6
npm install @clerk/react@6.4.3
npm install @clerk/vue@1.17.21
npm install @clerk/vue@2.0.16
npm install @clerk/astro@2.17.11
npm install @clerk/astro@3.0.18
npm install @clerk/nuxt@1.13.29
npm install @clerk/nuxt@2.2.5
npm install @clerk/clerk-expo@2.19.36
npm install @clerk/expo@3.2.2
npm install @clerk/react-router@2.4.13
npm install @clerk/react-router@3.1.4
npm install @clerk/tanstack-react-start@0.29.11
npm install @clerk/tanstack-react-start@1.1.4
npm install @clerk/chrome-extension@2.9.15
npm install @clerk/chrome-extension@3.1.15
npm install @clerk/fastify@2.6.31
npm install @clerk/fastify@3.1.16
npm install @clerk/express@1.7.79
npm install @clerk/express@2.1.6
npm install @clerk/hono@0.1.16
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
npm ls @clerk/clerk-js
How to Check if You Are Affected
To determine whether your Node.js application is affected by CVE-2026-42349, inspect your project dependencies using npm:
npm ls @clerk/clerk-js
Analyze the terminal output to locate any version of @clerk/clerk js in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 6.7.5), your application is affected.
Note: The npm ls @clerk/clerk-js command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-863: Incorrect Authorization, where the product performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check. In @clerk/clerk js, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-42349 Affected @clerk/clerk js Versions
29 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
@clerk/clerk-js
|
npm |
≥ 6.0.0
< 6.7.5
|
6.7.5
|
|
@clerk/shared
|
npm |
≥ 3.0.0
< 3.47.5
|
3.47.5
|
|
@clerk/shared
|
npm |
≥ 4.0.0
< 4.8.3
|
4.8.3
|
|
@clerk/backend
|
npm |
≥ 2.0.0
< 2.33.3
|
2.33.3
|
|
@clerk/backend
|
npm |
≥ 3.0.0
< 3.2.14
|
3.2.14
|
|
@clerk/nextjs
|
npm |
≥ 6.0.0
< 6.39.3
|
6.39.3
|
|
@clerk/nextjs
|
npm |
≥ 7.0.0
< 7.2.4
|
7.2.4
|
|
@clerk/clerk-js
|
npm |
≥ 5.22.0
< 5.125.10
|
5.125.10
|
|
@clerk/clerk-react
|
npm |
≥ 5.9.0
< 5.61.6
|
5.61.6
|
|
@clerk/react
|
npm |
≥ 6.0.0
< 6.4.3
|
6.4.3
|
|
@clerk/vue
|
npm |
≥ 1.0.0
< 1.17.21
|
1.17.21
|
|
@clerk/vue
|
npm |
≥ 2.0.0
< 2.0.16
|
2.0.16
|
|
@clerk/astro
|
npm |
≥ 2.0.0
< 2.17.11
|
2.17.11
|
|
@clerk/astro
|
npm |
≥ 3.0.0
< 3.0.18
|
3.0.18
|
|
@clerk/nuxt
|
npm |
≥ 1.0.0
< 1.13.29
|
1.13.29
|
|
@clerk/nuxt
|
npm |
≥ 2.0.0
< 2.2.5
|
2.2.5
|
|
@clerk/clerk-expo
|
npm |
≥ 2.2.11
< 2.19.36
|
2.19.36
|
|
@clerk/expo
|
npm |
≥ 3.0.0
< 3.2.2
|
3.2.2
|
|
@clerk/react-router
|
npm |
≥ 0.0.1
< 2.4.13
|
2.4.13
|
|
@clerk/react-router
|
npm |
≥ 3.0.0
< 3.1.4
|
3.1.4
|
|
@clerk/tanstack-react-start
|
npm |
≥ 0.0.1
< 0.29.11
|
0.29.11
|
|
@clerk/tanstack-react-start
|
npm |
≥ 1.0.0
< 1.1.4
|
1.1.4
|
|
@clerk/chrome-extension
|
npm |
≥ 1.3.5
< 2.9.15
|
2.9.15
|
|
@clerk/chrome-extension
|
npm |
≥ 3.0.0
< 3.1.15
|
3.1.15
|
|
@clerk/fastify
|
npm |
≥ 1.0.42
< 2.6.31
|
2.6.31
|
|
@clerk/fastify
|
npm |
≥ 3.0.0
< 3.1.16
|
3.1.16
|
|
@clerk/express
|
npm |
≥ 0.1.0
< 1.7.79
|
1.7.79
|
|
@clerk/express
|
npm |
≥ 2.0.0
< 2.1.6
|
2.1.6
|
|
@clerk/hono
|
npm |
≥ 0.0.2
< 0.1.16
|
0.1.16
|
References
Frequently Asked Questions
What is CVE-2026-42349?
Which @clerk/clerk js versions are affected?
What version fixes CVE-2026-42349?
Is @clerk/clerk-js affected?
Is @clerk/shared affected?
What is the CVSS score of CVE-2026-42349?
What CWE is associated with CVE-2026-42349?
How can I check npm dependencies for CVE-2026-42349?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-w24r-5266-9c3c",
"modified" : "2026-06-09T10:49:55Z",
"published" : "2026-04-30T18:20:02Z",
"aliases" : [ "CVE-2026-42349" ],
"summary" : "Clerk has an authorization bypass when combining organization, billing, or reverification checks",
"details" : "### Summary\n\n`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.\n\nSessions are not compromised and no existing user can be impersonated. The bypass is limited to the authorization decision returned by the predicate. `clerkMiddleware` continues to authenticate requests correctly, `auth()` reflects the real authentication state, and token verification is unaffected.\n\n### Who is affected\n\nAll apps that combine more than one authorization dimension in a single `has()` or `auth.protect()` call should upgrade to the patched versions. Patches are drop-in with no API changes. The information below describes the scope of the bypass and helps developers understand whether their apps are potentially affected, but is not a reason to delay the upgrade.\n\nThis 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.\n\n\n```ts\n// Reverification combined with role / permission / feature / plan\nawait auth.protect({ permission: 'org:settings:delete', reverification: 'strict' });\nconst canAct = has({ role: 'org:admin', reverification: 'strict' });\n\n// Billing (feature / plan) combined with role / permission\nconst canAct = has({ permission: 'org:admin', feature: 'premium' });\n```\n\nSingle-condition checks are not affected and continue to fail closed as expected:\n\n```ts\nawait auth.protect({ permission: 'org:settings:delete' });\nhas({ reverification: 'strict' });\n```\n\nThe callback form of `auth.protect` is not affected unless the callback itself invokes one of the affected shapes:\n\n```ts\nawait auth.protect(has => has({ permission: 'org:X' }) && has({ reverification: 'strict' }));\n```\n\nApp patterns that rely only on single-condition checks, or that combine them via the callback form, are unaffected. Authentication, session state, and token verification continue to work correctly regardless of this bypass.\n\n`@clerk/shared` is usually not imported directly in application code, but the fix lives there and reaches an app through its framework package. If developers import `createCheckAuthorization` from `@clerk/shared` directly, their apps are also affected. Run `npm why @clerk/shared` (or the app's package manager's equivalent) to check the installed version.\n\n### Additional `auth.protect()` bypass\n\nA second, related bypass lives in `@clerk/nextjs`: `auth.protect()` silently discarded authorization params (`role`, `permission`, `feature`, `plan`, `reverification`) whenever the same argument object also contained `unauthenticatedUrl`, `unauthorizedUrl`, or `token`.\n\n### Recommended actions\n\nUpgrade to the latest patch release of the consuming app's framework package on its current major. Both Core 2 and Core 3 release lines have patches. See the \"Affected packages\" section above for the exact vulnerable ranges and patched versions per package.\n\nIf a consuming app pins `@clerk/clerk-js` directly, upgrade it to the patched version. Most apps load `@clerk/clerk-js` from Clerk's CDN through their framework package and will receive the fix automatically, with no upgrade step required.\n\n### Workaround\n\nIf developers cannot upgrade immediately, split combined `has()` or `auth.protect()` calls into sequential single-condition checks:\n\n```ts\n// Replace\nawait auth.protect({ permission: 'org:X', reverification: 'strict' });\n// With\nawait auth.protect({ reverification: 'strict' });\nawait auth.protect({ permission: 'org:X' });\n```\n\nEach single-condition check fails closed as expected, so evaluating them independently and denying if either fails produces the correct result.\n\n### Timeline\n\nThis issue was reported on 18 APR 2026, patched on 22 APR 2026, and publicly disclosed on 22 APR 2026.\n\nThanks to AISafe for the responsible disclosure of this vulnerability.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N"
}, {
"type" : "CVSS_V4",
"score" : "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"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/shared"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "3.0.0"
}, {
"fixed" : "3.47.5"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 3.47.4"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/shared"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "4.0.0"
}, {
"fixed" : "4.8.3"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 4.8.2"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/backend"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "2.0.0"
}, {
"fixed" : "2.33.3"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 2.33.2"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/backend"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "3.0.0"
}, {
"fixed" : "3.2.14"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 3.2.13"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/nextjs"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "6.0.0"
}, {
"fixed" : "6.39.3"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 6.39.2"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/nextjs"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "7.0.0"
}, {
"fixed" : "7.2.4"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 7.2.3"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/clerk-js"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "5.22.0"
}, {
"fixed" : "5.125.10"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 5.125.9"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/clerk-js"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "6.0.0"
}, {
"fixed" : "6.7.5"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 6.7.4"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/clerk-react"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "5.9.0"
}, {
"fixed" : "5.61.6"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 5.61.5"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/react"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "6.0.0"
}, {
"fixed" : "6.4.3"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 6.4.2"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/vue"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "1.0.0"
}, {
"fixed" : "1.17.21"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 1.17.20"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/vue"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "2.0.0"
}, {
"fixed" : "2.0.16"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 2.0.15"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/astro"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "2.0.0"
}, {
"fixed" : "2.17.11"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 2.17.10"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/astro"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "3.0.0"
}, {
"fixed" : "3.0.18"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 3.0.17"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/nuxt"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "1.0.0"
}, {
"fixed" : "1.13.29"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 1.13.28"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/nuxt"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "2.0.0"
}, {
"fixed" : "2.2.5"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 2.2.4"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/clerk-expo"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "2.2.11"
}, {
"fixed" : "2.19.36"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 2.19.35"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/expo"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "3.0.0"
}, {
"fixed" : "3.2.2"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 3.2.1"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/react-router"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0.0.1"
}, {
"fixed" : "2.4.13"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 2.4.12"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/react-router"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "3.0.0"
}, {
"fixed" : "3.1.4"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 3.1.3"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/tanstack-react-start"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0.0.1"
}, {
"fixed" : "0.29.11"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 0.29.10"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/tanstack-react-start"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "1.0.0"
}, {
"fixed" : "1.1.4"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 1.1.3"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/chrome-extension"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "1.3.5"
}, {
"fixed" : "2.9.15"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 2.9.14"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/chrome-extension"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "3.0.0"
}, {
"fixed" : "3.1.15"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 3.1.14"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/fastify"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "1.0.42"
}, {
"fixed" : "2.6.31"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 2.6.30"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/fastify"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "3.0.0"
}, {
"fixed" : "3.1.16"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 3.1.15"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/express"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0.1.0"
}, {
"fixed" : "1.7.79"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 1.7.78"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/express"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "2.0.0"
}, {
"fixed" : "2.1.6"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 2.1.5"
}
}, {
"package" : {
"ecosystem" : "npm",
"name" : "@clerk/hono"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0.0.2"
}, {
"fixed" : "0.1.16"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 0.1.15"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/clerk/javascript/security/advisories/GHSA-w24r-5266-9c3c"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-42349"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/clerk/javascript"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-754", "CWE-863" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-04-30T18:20:02Z",
"nvd_published_at" : "2026-05-11T17:16:33Z"
}
}