Description
Better Auth is an authentication and authorization library for TypeScript. From 1.6.0 until 1.6.11, the @better-auth/oauth-provider POST /oauth2/token endpoint for the authorization_code grant redeems a single-use authorization code through a non-atomic find-then-delete sequence, allowing two concurrent requests to pass the read step and mint independent access tokens, refresh tokens, and ID tokens; legacy /oauth2/token and /mcp/token paths in oidc-provider and mcp plugins share the same primitive. This issue is fixed in version 1.6.11.
Published: 2026-07-15
Score: 7.6 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Better Auth’s OAuth2 token exchange endpoint relies on a non‑atomic find‑then‑delete sequence when redeeming authorization codes. Two concurrent POST /oauth2/token requests for the same code can both detect it as present before it is removed, resulting in two independent sets of tokens (access, refresh, and ID). This enables the same authorization code to be reused, creating duplicate privileges, replay possibilities, and violating the designed single‑use policy. Additionally, legacy /oauth2/token and /mcp/token paths in the oidc‑provider and mcp plugins share this same primitive, expanding the risk surface.

Affected Systems

The flaw exists in the Better Auth library for TypeScript, specifically from version 1.6.0 up to and including 1.6.11, affecting the @better-auth/oauth-provider POST /oauth2/token endpoint handling the authorization_code grant. Legacy /oauth2/token and /mcp/token paths in the oidc‑provider and mcp plugins use the same vulnerable logic. Upgrading to v1.6.11 or later removes the issue.

Risk and Exploitability

The CVSS score of 7.6 indicates a high severity vulnerability, while the EPSS score of less than 1% signals a low likelihood of active exploitation as of this analysis. The issue is not cataloged in CISA’s KEV, and no public exploits have been reported. Nevertheless, any client or attacker capable of inducing concurrent token exchanges—including in high‑traffic or network‑constrained environments—could abuse this race condition, potentially generating multiple valid token sets from a single authorization code.

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

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Better Auth to version 1.6.11 or newer to apply the atomic find‑and‑delete logic, preventing concurrent exchanges of the same authorization code.
  • Enforce stricter concurrency limits or rate‑limit the POST /oauth2/token endpoint to reduce the window where a race condition can occur.
  • Ensure client applications immediately invalidate or delete any reference to the authorization code after the first exchange to mitigate exposure from any lingering race window.

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

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-7w99-5wm4-3g79 @better-auth/oauth-provider's OAuth authorization-code grant allows concurrent redemption when two token requests race the find-then-delete primitive
History

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

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

Wed, 15 Jul 2026 18: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 17:30:00 +0000

Type Values Removed Values Added
Description Better Auth is an authentication and authorization library for TypeScript. From 1.6.0 until 1.6.11, the @better-auth/oauth-provider POST /oauth2/token endpoint for the authorization_code grant redeems a single-use authorization code through a non-atomic find-then-delete sequence, allowing two concurrent requests to pass the read step and mint independent access tokens, refresh tokens, and ID tokens; legacy /oauth2/token and /mcp/token paths in oidc-provider and mcp plugins share the same primitive. This issue is fixed in version 1.6.11.
Title Better Auth OAuth Provider: Race Condition in Authorization Code Exchange Enables Multi-Use Code Redemption
Weaknesses CWE-362
CWE-367
References
Metrics cvssV4_0

{'score': 7.6, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

Better-auth Better Auth
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-07-15T18:07:49.190Z

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

Link: CVE-2026-53518

cve-icon Vulnrichment

Updated: 2026-07-15T18:07:45.571Z

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