Quick answers
- Is CVE-2026-53517 exploited in the wild?
- No. Junglewise Threat Intelligence has no report of CVE-2026-53517 being exploited in the wild.
- How severe is CVE-2026-53517?
- High severity, with a CVSS score of 8.1, published 15 July 2026.
- Which products and versions are affected?
- Better-Auth Memory-Adapter >=1.6.0, <1.6.11; Better-Auth OAuth Provider Plugin >= 1.6.0, < 1.6.11; Better-Auth Oauth-Provider >= 1.6.0, < 1.6.11, >=1.6.0, <1.6.11; @better-auth/oauth-provider (npm) >= 1.6.0, < 1.6.11, SEMVER:introduced=1.6.0,fixed=1.6.11; and 1 more.
- Is there a fix for CVE-2026-53517?
- Yes. @better-auth/oauth-provider (npm): upgrade to 1.6.11 or later; better-auth (npm): upgrade to 1.6.0 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
- How is CVE-2026-53517 attacked?
- It is attacked over the network, in a software library.
- Am I affected by CVE-2026-53517?
- Check whether you run Better-Auth Memory-Adapter, Better-Auth OAuth Provider Plugin, Better-Auth Oauth-Provider or one of the others listed at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.
How to fix
- @better-auth/oauth-provider (npm): upgrade to 1.6.11 or later
npm install @better-auth/oauth-provider@1.6.11 - better-auth (npm): upgrade to 1.6.0 or later
npm install better-auth@1.6.0
Technical details
The vulnerability is a time-of-check time-of-use (TOCTOU) race condition and concurrent-execution synchronization failure (CWE-362, CWE-367) in the POST /oauth2/token endpoint's refresh_token grant handler. The adapter.update predicate checks only the oauthRefreshToken row's id field, not the revoked flag, allowing two concurrent updates to both succeed. The revocation check is not atomic with the token mint operation, so both concurrent requests pass validation before either marks the parent token revoked. The result is a forked refresh-token family: multiple valid tokens derived from one parent, each with independent lifetimes (default 7 days) that reset on each rotation. An attacker holding any branch survives single-token revocations. The fix (version 1.6.11) implements atomic compare-and-swap (UPDATE ... WHERE id = ? AND revoked IS NULL with rowcount validation) in the rotation primitive, ensuring only one concurrent request succeeds and the parent row stays marked revoked. A unique constraint on oauthRefreshToken.token also prevents collisions from buggy token-generation callbacks.
Affected products
- Better Auth @better-auth/oauth-provider >=1.6.0, <1.6.11
- Better Auth better-auth >=1.4.8-beta.7, <1.6.0
- Better Auth @better-auth/memory-adapter >=1.6.0, <1.6.11
Identifiers
- CVE-2026-53517
- GHSA-392p-2q2v-4372
Timeline
- 2026-07-07: disclosed: GHSA-392p-2q2v-4372 published
- 2026-05-12: patched: Fix merged in @better-auth/oauth-provider@1.6.11
References
- https://github.com/better-auth/better-auth/security/advisories/GHSA-392p-2q2v-4372
- https://github.com/better-auth/better-auth/commit/c6918ecc9e3a75892169415d7f6c95b591b6a52d
- https://github.com/better-auth/better-auth
- https://github.com/better-auth/better-auth/releases/tag/v1.6.0
- https://github.com/better-auth/better-auth/releases/tag/v1.6.11