Description
Better Auth is an authentication and authorization library for TypeScript. From 1.4.8-beta.7 until 1.6.11, the @better-auth/oauth-provider POST /oauth2/token endpoint on the refresh_token grant performs a non-atomic read, validate, revoke, and mint sequence on the oauthRefreshToken row, allowing concurrent requests with the same parent refresh token to pass the revoked check and create forked refresh-token families; the vulnerable range also includes embedded better-auth plugin versions before 1.6.0. This issue is fixed in version 1.6.11.
Published: 2026-07-15
Score: 8.1 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Better Auth is a TypeScript authentication and authorization library that, during the OAuth2 refresh_token grant, implements a non‑atomic read, validate, revoke, and mint sequence on the oauthRefreshToken row. This race condition permits concurrent requests using the same parent refresh token to bypass the revocation check and create forked refresh‑token families. The result is the creation of multiple independent refresh token chains that an attacker can replay, leading to the unauthorized issuance of new access tokens for the same user session and compromising confidentiality. The flaw applies to the @better‑auth/oauth‑provider POST /oauth2/token endpoint in all releases from 1.4.8‑beta.7 through 1.6.11, and also affects embedded Better Auth plugin versions prior to 1.6.0; the issue is fixed in version 1.6.11.

Affected Systems

Vulnerable products are the @better‑auth/oauth‑provider package and the core Better Auth library. Any instance running a version between 1.4.8‑beta.7 and 1.6.11, inclusive, as well as embedded Better Auth plugin versions before 1.6.0, is impacted. The vulnerability is exposed only at the OAuth token endpoint that handles the refresh_token grant.

Risk and Exploitability

The CVSS score of 8.1 indicates high severity, while the EPSS below 1% suggests a low public exploitation probability. The vulnerable endpoint can be triggered in parallel without privileged access, enabling an attacker to concurrently request token refreshes that evade revocation checks. Successful exploitation results in the generation of rogue refresh‑token families and the issuance of unauthorized access tokens, potentially compromising the confidentiality and integrity of protected resources.

Generated by OpenCVE AI on July 31, 2026 at 03:08 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Better Auth to version 1.6.11 or later; this patch removes the non‑atomic token rotation logic.
  • Implement server‑side rate‑limiting or serialize refresh‑token requests so that only one request for a given parent token can be processed at a time.
  • Validate token revocation status immediately before minting a new token and audit the oauthRefreshToken table for any revoked or stale entries.

Generated by OpenCVE AI on July 31, 2026 at 03:08 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-392p-2q2v-4372 Better Auth: OAuth refresh-token rotation forks the token family on concurrent redemption
History

Wed, 15 Jul 2026 22:15:00 +0000

Type Values Removed Values Added
First Time appeared Better-auth
Better-auth better Auth
Better-auth oauth-provider
Vendors & Products Better-auth
Better-auth better Auth
Better-auth oauth-provider

Wed, 15 Jul 2026 20:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Wed, 15 Jul 2026 18:00:00 +0000

Type Values Removed Values Added
Description Better Auth is an authentication and authorization library for TypeScript. From 1.4.8-beta.7 until 1.6.11, the @better-auth/oauth-provider POST /oauth2/token endpoint on the refresh_token grant performs a non-atomic read, validate, revoke, and mint sequence on the oauthRefreshToken row, allowing concurrent requests with the same parent refresh token to pass the revoked check and create forked refresh-token families; the vulnerable range also includes embedded better-auth plugin versions before 1.6.0. This issue is fixed in version 1.6.11.
Title Better Auth OAuth Provider: Refresh Token Rotation Race Condition Allows Concurrent Replay and Token Family Forking
Weaknesses CWE-362
CWE-367
References
Metrics cvssV3_1

{'score': 8.1, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N'}


Subscriptions

Better-auth Better Auth Oauth-provider
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-07-15T19:21:22.553Z

Reserved: 2026-06-09T17:30:33.456Z

Link: CVE-2026-53517

cve-icon Vulnrichment

Updated: 2026-07-15T19:21:01.003Z

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-07-31T03:15:04Z

Weaknesses
  • CWE-362

    Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')

  • CWE-367

    Time-of-check Time-of-use (TOCTOU) Race Condition