{"id":"GHSA-xmf8-cvqr-rfgj","revision":null,"records":[{"revision":"5772cfeb3506422fa11dab0556e0eaca","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-73418","aliases":[],"title":"NextAuth.js: getToken() throws an uncaught exception on malformed Bearer authorization headers","description":"NextAuth.js provides authentication for Next.js. Prior to @auth/core 0.41.3 and next-auth 4.24.15 and 5.0.0-beta.32, the exported getToken() helper in the next-auth/jwt and @auth/core/jwt modules can throw an uncaught exception when it reads a malformed Authorization: Bearer header. When no session cookie is present, getToken() URL-decodes the bearer value before validating it, and malformed percent encoding causes decodeURIComponent() to throw instead of treating the token as invalid. Because getToken() is commonly called in API routes, middleware, and server-side request handlers, a single unauthenticated request can trigger an unhandled exception in code paths that authenticate requests, causing a per-request denial of service without exposing tokens, sessions, or other data and without bypassing authentication. This issue is fixed in @auth/core 0.41.3 and next-auth 4.24.15 and 5.0.0-beta.32.","state":0,"publishedAt":"2026-08-12T20:21:11.318+00:00","modifiedAt":"2026-08-13T12:53:44.683+00:00","affected":[{"ecosystem":"Vendor product","name":"next-auth","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"nextauthjs\",\n                    \"product\": \"next-auth\",\n                    \"versions\": [\n                        {\n                            \"version\": \">= 4.0.6, <= 4.24.14\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \">= 5.0.0-beta.0, <= 5.0.0-beta.31\",\n                            \"status\": \"affected\"\n                        }\n                    ]\n                }"},{"ecosystem":"Vendor product","name":"core","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"@auth\",\n                    \"product\": \"core\",\n                    \"versions\": [\n                        {\n                            \"version\": \">= 0.1.0, < 0.41.3\",\n                            \"status\": \"affected\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","score":7.5,"severity":"HIGH"}],"references":["https://github.com/nextauthjs/next-auth/security/advisories/GHSA-xmf8-cvqr-rfgj","https://github.com/nextauthjs/next-auth/pull/13469","https://github.com/nextauthjs/next-auth/commit/5bca2399a79ba8d116ca5179b4b1ebcd152e7f05","https://github.com/nextauthjs/next-auth/commit/e707770f00c52b3479e43422b0200b059149ed53","https://github.com/nextauthjs/next-auth/releases/tag/%40auth%2Fcore%400.41.3","https://github.com/nextauthjs/next-auth/releases/tag/next-auth%404.24.15","https://github.com/nextauthjs/next-auth/releases/tag/next-auth%405.0.0-beta.32"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-73418","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-73418","identifiers":["CVE-2026-73418"]},"retained":false,"historicalAffected":[]},{"revision":"773f20267a3647deaa784cf9e9739356","observedAt":"2026-11-14T03:06:46.038+00:00","statement":{"source":"euvd","id":"EUVD-2026-57552","aliases":["CVE-2026-73418"],"title":"NextAuth.js provides authentication for Next.js. Prior to @auth/core 0.41.3 and next-auth 4.24.15 and 5.0.0-beta.32, the exported getToken() helper in the next-auth/jwt and @auth/core/jwt modules can throw an uncaught exception when it read…","description":"NextAuth.js provides authentication for Next.js. Prior to @auth/core 0.41.3 and next-auth 4.24.15 and 5.0.0-beta.32, the exported getToken() helper in the next-auth/jwt and @auth/core/jwt modules can throw an uncaught exception when it reads a malformed Authorization: Bearer header. When no session cookie is present, getToken() URL-decodes the bearer value before validating it, and malformed percent encoding causes decodeURIComponent() to throw instead of treating the token as invalid. Because getToken() is commonly called in API routes, middleware, and server-side request handlers, a single unauthenticated request can trigger an unhandled exception in code paths that authenticate requests, causing a per-request denial of service without exposing tokens, sessions, or other data and without bypassing authentication. This issue is fixed in @auth/core 0.41.3 and next-auth 4.24.15 and 5.0.0-beta.32.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","score":7.5,"severity":null}],"references":["https://github.com/nextauthjs/next-auth/security/advisories/GHSA-xmf8-cvqr-rfgj","https://github.com/nextauthjs/next-auth/pull/13469","https://github.com/nextauthjs/next-auth/commit/5bca2399a79ba8d116ca5179b4b1ebcd152e7f05","https://github.com/nextauthjs/next-auth/commit/e707770f00c52b3479e43422b0200b059149ed53","https://github.com/nextauthjs/next-auth/releases/tag/%40auth%2Fcore%400.41.3","https://github.com/nextauthjs/next-auth/releases/tag/next-auth%404.24.15","https://github.com/nextauthjs/next-auth/releases/tag/next-auth%405.0.0-beta.32"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-57552","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Aug 12, 2026, 8:21:11 PM","dateUpdated":"Aug 13, 2026, 12:53:44 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-57552","identifiers":["EUVD-2026-57552","CVE-2026-73418"]},"retained":false,"historicalAffected":[]},{"revision":"1f69e05794d246a4aac3d01500f57411","observedAt":"2026-10-25T15:19:09.409+00:00","statement":{"source":"nvd","id":"CVE-2026-73418","aliases":[],"title":"NextAuth.js provides authentication for Next.js. Prior to @auth/core 0.41.3 and next-auth 4.24.15 and 5.0.0-beta.32, the exported getToken() helper in the next-auth/jwt and @auth/core/jwt modules can throw an uncaught exception when it read…","description":"NextAuth.js provides authentication for Next.js. Prior to @auth/core 0.41.3 and next-auth 4.24.15 and 5.0.0-beta.32, the exported getToken() helper in the next-auth/jwt and @auth/core/jwt modules can throw an uncaught exception when it reads a malformed Authorization: Bearer header. When no session cookie is present, getToken() URL-decodes the bearer value before validating it, and malformed percent encoding causes decodeURIComponent() to throw instead of treating the token as invalid. Because getToken() is commonly called in API routes, middleware, and server-side request handlers, a single unauthenticated request can trigger an unhandled exception in code paths that authenticate requests, causing a per-request denial of service without exposing tokens, sessions, or other data and without bypassing authentication. This issue is fixed in @auth/core 0.41.3 and next-auth 4.24.15 and 5.0.0-beta.32.","state":0,"publishedAt":"2026-08-12T21:17:40.89+00:00","modifiedAt":"2026-09-09T20:58:37.713+00:00","affected":[],"metrics":[{"system":"CVSS 3.1 · security-advisories@github.com · Secondary","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","score":7.5,"severity":"HIGH"}],"references":["https://github.com/nextauthjs/next-auth/commit/5bca2399a79ba8d116ca5179b4b1ebcd152e7f05","https://github.com/nextauthjs/next-auth/commit/e707770f00c52b3479e43422b0200b059149ed53","https://github.com/nextauthjs/next-auth/pull/13469","https://github.com/nextauthjs/next-auth/releases/tag/%40auth%2Fcore%400.41.3","https://github.com/nextauthjs/next-auth/releases/tag/next-auth%404.24.15","https://github.com/nextauthjs/next-auth/releases/tag/next-auth%405.0.0-beta.32","https://github.com/nextauthjs/next-auth/security/advisories/GHSA-xmf8-cvqr-rfgj"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-73418","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Awaiting Analysis","weaknesses":["CWE-20","CWE-248"],"productCriteria":[],"sourceDates":{"published":"2026-08-12T21:17:40.890","lastModified":"2026-09-09T20:58:37.713"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-73418","identifiers":["CVE-2026-73418"]},"retained":false,"historicalAffected":[]},{"revision":"ddc6058253c0483498824977a073976c","observedAt":"2026-10-24T13:17:17.793+00:00","statement":{"source":"osv","id":"GHSA-xmf8-cvqr-rfgj","aliases":["CVE-2026-73418"],"title":"Auth.js: getToken() throws an uncaught exception on malformed Bearer authorization headers","description":"## Summary\n\nThe exported `getToken()` helper (`next-auth/jwt` and `@auth/core/jwt`) can throw an uncaught exception when it reads a malformed `Authorization: Bearer …` header. When no session cookie is present, `getToken()` URL-decodes the bearer value before validating it, and malformed percent-encoding causes the decode step to throw rather than being treated as an invalid token. Because `getToken()` is commonly called in API routes, middleware, and other request handlers, a single unauthenticated request can trigger an unhandled exception in code paths that authenticate requests.\n\n## Am I affected?\n\nYou are affected if **all** of the following hold:\n\n- You use `next-auth` `<= 5.0.0-beta.25` (or `@auth/core` exposing the same `getToken()` implementation).\n- Your application calls `getToken()` directly — for example in a Route Handler, middleware, or server-side request handler.\n- You do not wrap that `getToken()` call in your own `try/catch`.\n\nYou are **not** affected if you only use the framework's `auth()` helper and never call `getToken()` yourself, or if every `getToken()` call site already has its own exception handling.\n\n## Impact\n\n- Denial of service: an unauthenticated request carrying a malformed Bearer authorization header can raise an unhandled exception in any handler that calls `getToken()`.\n- The impact is per-request and limited to availability; it does not expose tokens, sessions, or other data, and does not bypass authentication.\n\nCWE-20: Improper Input Validation.\n\n## Patched version\n\nThe fix makes `getToken()` treat a malformed Bearer value as an invalid token and return `null`, matching how other undecodable tokens are already handled. Upgrade to the first release containing this fix (to be published; this advisory will be updated with the exact patched version before publication) and no code changes are required.\n\n## Workarounds\n\nIf you cannot upgrade immediately, either:\n\n- **Config/code-level:** wrap your `getToken()` calls so a thrown error is treated as \"no token\", e.g.\n\n  ```ts\n  let token = null\n  try {\n    token = await getToken({ req, secret })\n  } catch {\n    token = null\n  }\n  ```\n\n- Or strip/normalize the incoming `Authorization` header at the edge (proxy, middleware) before it reaches `getToken()`, rejecting values whose Bearer portion is not valid percent-encoding.\n\n## Credit\n\nReported by @deprrous. Thank you for the responsible disclosure.","state":0,"publishedAt":"2026-07-23T14:42:55+00:00","modifiedAt":"2026-09-10T03:51:12.5498677+00:00","affected":[{"ecosystem":"npm","name":"@auth/core","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0.1.0"},{"kind":"fixed","version":"0.41.3"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"npm","name":"next-auth","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"5.0.0-beta.0"},{"kind":"fixed","version":"5.0.0-beta.32"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"npm","name":"next-auth","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"4.0.6"},{"kind":"fixed","version":"4.24.15"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/nextauthjs/next-auth/security/advisories/GHSA-xmf8-cvqr-rfgj","https://nvd.nist.gov/vuln/detail/CVE-2026-73418","https://github.com/nextauthjs/next-auth/pull/13467","https://github.com/nextauthjs/next-auth/pull/13469","https://github.com/nextauthjs/next-auth/commit/5bca2399a79ba8d116ca5179b4b1ebcd152e7f05","https://github.com/nextauthjs/next-auth/commit/e707770f00c52b3479e43422b0200b059149ed53","https://github.com/nextauthjs/next-auth","https://github.com/nextauthjs/next-auth/releases/tag/@auth/core@0.41.3","https://github.com/nextauthjs/next-auth/releases/tag/next-auth@4.24.15","https://github.com/nextauthjs/next-auth/releases/tag/next-auth@5.0.0-beta.32"],"sourceUrl":"https://github.com/advisories/GHSA-xmf8-cvqr-rfgj","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-xmf8-cvqr-rfgj","identifiers":["GHSA-xmf8-cvqr-rfgj","CVE-2026-73418"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-15T13:01:41.3445250+00:00","complete":true,"records":1781,"lastAttemptAt":"2026-11-15T13:01:41.344525+00:00","lastSuccessAt":"2026-11-15T13:01:46.2867767+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:46.2867777+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-7de4d7559a5263003f03d9f70577ab06f92ba4178309f26fce53e22a4a959294-24e910670d68255a90dfc1d94d37ac5394a0a43e960361a78142e746e5b8e0e9","complete":true,"records":425790,"lastAttemptAt":"2026-11-15T13:01:16.7308429+00:00","lastSuccessAt":"2026-11-15T13:01:16.7018281+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:16.7308429+00:00","snapshotPublishedAt":"2026-11-15T12:22:01+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-22fdf2f18680459ca2a348502073ed9f","complete":false,"records":13821,"lastAttemptAt":"2026-11-15T13:05:32.5655976+00:00","lastSuccessAt":"2026-11-15T13:05:32.6955744+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:05:32.6955744+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-15T13:01:41.3445250+00:00","complete":true,"records":1125,"lastAttemptAt":"2026-11-15T13:01:41.344525+00:00","lastSuccessAt":"2026-11-15T13:01:46.3027206+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:46.3027219+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-00496e381624434cb51cd6ee97f87d5f","complete":true,"records":13833,"lastAttemptAt":"2026-11-15T13:02:04.5706057+00:00","lastSuccessAt":"2026-11-15T13:02:04.555+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:02:04.555+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13874,"expectedIdentifiers":13874,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-64eea06dbd27de8464d5dbce1b78cc794cc59e2d901516ae0d3ea76e624cdae0","complete":true,"records":9955,"lastAttemptAt":"2026-11-15T13:01:38.1237717+00:00","lastSuccessAt":"2026-11-14T13:57:23.1208135+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:38.1237717+00:00","snapshotPublishedAt":"2026-11-14T13:17:57+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-f4424d7d4861b1af1404bd15abcb83f295dcd003412a9340ca99dc8200aa148a","complete":true,"records":2014,"lastAttemptAt":"2026-11-15T13:01:22.067621+00:00","lastSuccessAt":"2026-11-13T19:57:08.2864435+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:22.067621+00:00","snapshotPublishedAt":"2026-11-13T19:33:10+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-6086d649bcb454cdf302d7d9275177bda73550e1b6e446b3520e9b6266d3582c","complete":true,"records":3148,"lastAttemptAt":"2026-11-15T13:01:41.1317031+00:00","lastSuccessAt":"2026-11-15T11:05:17.1034234+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:41.1317031+00:00","snapshotPublishedAt":"2026-11-15T10:03:04+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-ff18f36f13fcca3a20a3fb9274b59b8872d18869a99071730e1e79b625c8f612","complete":true,"records":232475,"lastAttemptAt":"2026-11-15T13:01:28.8971106+00:00","lastSuccessAt":"2026-11-15T11:05:10.4195883+00:00","error":null,"lastVerifiedAt":"2026-11-15T13:01:28.8971106+00:00","snapshotPublishedAt":"2026-11-15T10:33:06+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}