Skip to main content

Better Auth CVE-2026-114607

| EUVDEUVD-2026-108256 CRITICAL
Improper Authentication (CWE-287)
2026-10-22 GitHub_M
9.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Know victim email, no auth
  2. Delivery
    Start OAuth sign-in for that email
  3. Exploit
    Capture returned database-backed state value
  4. Execution
    Submit state to Magic Link verify endpoint
  5. Impact
    Obtain authenticated session as victim

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication mechanism validation
MITRE ATT&CK

2 techniques across 2 tactics: Defense Evasion, Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires a precise configuration combination, all of which must hold: (1) the Magic Link plugin enabled with storeToken set to the default 'plain', OR storeToken 'hashed' together with the global verification.storeIdentifier also set to 'hashed'; (2) at least one built-in social provider or Generic OAuth provider enabled; and (3) account.storeStateStrategy set to 'database' (the default whenever a database or secondary storage is configured). The attacker additionally must know the victim's email address. LIMITING FACTORS that block or reduce exploitation: cookie-backed OAuth state (account.storeStateStrategy='cookie') prevents this path (subject to a separate OAuth Proxy shared-secret caveat); setting storeToken to 'hashed' while leaving global verification.storeIdentifier unset or 'plain' prevents it; disabling either Magic Link or all social/Generic OAuth sign-in prevents it. Note: disableSignUp:true is explicitly NOT sufficient - it only blocks creation of new wrongly-verified accounts and does not stop takeover of existing accounts.

Impact

This is a genuine high-priority issue, not an inflated-CVSS artifact. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N, C:H/I:H) describes a network-reachable, unauthenticated, low-complexity authentication bypass that lets an attacker who merely knows a victim's email address obtain a full session for that account - consistent with the CWE-287 (Improper Authentication) classification and the 9.1 score. The vuln.today decision label is 'act_now', reinforcing urgency. However, key quantitative exploitation signals are MISSING: no EPSS probability is provided, there is no CISA KEV listing in the input, and no SSVC decision tree values (automatable, technical impact) are supplied beyond the vendor-style 'act_now' label. No public exploit code is present either - the four references are all remediation artifacts (GHSA advisory, fix PR #11494, fix commit, and the v1.7.7 release), not a working PoC. The practical risk tempering factor is configuration dependence: exploitation only applies to deployments matching a specific combination of Magic Link, OAuth provider, token-storage, and state-strategy settings (detailed below), several of which happen to be defaults, which is why the severity remains high rather than theoretical. Net: treat as a real, actively-fixable priority for affected Better Auth deployments; the high CVSS is justified by impact and preconditions, but the absence of EPSS/KEV data means widespread active exploitation is not confirmed.

Exploit ScenarioDerived

An attacker targets a Better Auth app that uses the Magic Link plugin alongside a social or Generic OAuth provider with database-backed OAuth state. The attacker initiates an OAuth sign-in for a victim's known email address, captures the OAuth state value the server returns, then submits that state value to the Magic Link verification endpoint as if it were a Magic Link token - because both resolve to the same stored verification identifier, the server grants a valid session for the victim without the attacker ever controlling the mailbox or completing the OAuth callback. No public exploit code is identified at time of analysis; the only published code is the vendor fix.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 22, 2026

Unauthenticated OAuth state values can be redeemed as Magic Link tokens in Better Auth 1.4.0-beta.18 through 1.7.6, letting an attacker who knows a victim's email address obtain a full session for that account without mailbox access or completing the provider callback. The flaw only applies to deployments that enable the Magic Link plugin with plain token storage (or hashed tokens plus globally hashed verification identifiers), enable a built-in social or Generic OAuth provider, and use database-backed OAuth state - the default when a database or secondary storage is configured. Successful abuse yields an existing user's session with all its permissions, or, when Magic Link sign-up is enabled, a new account incorrectly flagged as email verified; no public exploit code has been identified at time of analysis, but the vendor advisory and a public fix commit fully document the technique.

RemediationAI

Vendor-released patch: upgrade better-auth to 1.7.7 (release tag v1.7.7, fix in PR #11494 / commit ac54bfd), keeping installed Better Auth adapters, plugins and integrations on the same release version. Upgrade all servers that share verification storage in a coordinated cutover, and upgrade every OAuth Proxy participant (production, preview and development) together, because mixed old and new nodes cannot exchange existing state or proxy payloads and there is no fallback to the previous shared key; links and database-backed sign-ins started before the upgrade cannot complete, so users must request new Magic Links and pending OAuth, SAML and account-linking flows must be restarted. Update custom verification.storeIdentifier.overrides rules and any storage integrations that inspect verification identifiers to match the new magic-link: and auth-state: prefixes, keeping the purpose prefix in values produced by custom hashers. If upgrading immediately is not possible, the vendor's documented workarounds are to set account.storeStateStrategy to "cookie" (if OAuth Proxy is also used, first configure a dedicated OAuth Proxy secret shared across participating environments that differs from each environment's global Better Auth secret, since cookie-backed state can otherwise expose a separate OAuth Proxy account-takeover path), or to set the Magic Link plugin storeToken to "hashed" while leaving global verification.storeIdentifier unset or "plain" (global identifier hashing alone does not help), or to disable Magic Link sign-in or disable social and Generic OAuth sign-in - note that disableSignUp: true on the Magic Link plugin is explicitly insufficient, as it only blocks creation of new wrongly-verified accounts and does not prevent takeover of existing ones. No database schema or user/account migration is required by the fix.

Affected VersionsENISA

better-auth 1.4.0-beta.18, < 1.7.7

Affected Packages

euvd better_auth fix: 1.7.7

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Better Auth stores short-lived secrets - Magic Link tokens and database-backed OAuth/SAML state - in a shared verification storage layer, keyed by a verification identifier derived from the token via the plugin's storeToken transform and the global verification.storeIdentifier hashing setting. In affected releases those identifiers carried no record of their purpose, so a Magic Link verification record and an OAuth state record generated from the same underlying value could resolve to the same stored identifier, and the Magic Link verification path would accept an OAuth state value as a valid token. This is CWE-287 (Improper Authentication): the check confirms the value exists but not that it was issued for the flow being completed, so proof of email ownership is bypassed. The upstream fix (PR #11494, commit ac54bfd) introduces purpose-specific isolation - Magic Link records are prefixed magic-link: and database-backed OAuth/SAML state auth-state: before the identifier is created or hashed, and OAuth state cookies plus OAuth Proxy payloads are encrypted with purpose-specific keys. The npm package better-auth (CPE cpe:2.3:a:better-auth:better-auth) is affected from 1.4.0-beta.18 up to but excluding 1.7.7; installed adapters, plugins and integrations must be kept on the same release version because mixed versions cannot exchange existing state.

Know when Better Auth gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 9.1 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
vuln.today AI 9.1 CRITICAL

Remote unauthenticated attacker needing only a known email (PR:N, UI:N, AV:N); the config prerequisites are deployment-side defaults rather than per-attack complexity, so AC:L; full account takeover gives C:H/I:H, no availability impact.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

2
Patch available
Oct 22, 2026 - 18:18 EUVD
CVE Published
Oct 22, 2026 - 16:47 cve.org
CRITICAL 9.1

DescriptionCVE.org

Better Auth is an authentication and authorization library for TypeScript. From 1.4.0-beta.18 until 1.7.7, deployments that enable Magic Link with storeToken set to plain, or with storeToken set to hashed and the global verification.storeIdentifier setting also set to hashed, enable a built-in social or Generic OAuth provider, and use account.storeStateStrategy set to database can accept an OAuth sign-in state value as a Magic Link token. These settings can cause Magic Link verification records and OAuth state to resolve to the same stored identifier, allowing an unauthenticated attacker to start OAuth sign-in for a known email address and redeem the returned state through Magic Link without controlling the mailbox or completing the provider callback. The attacker can obtain a normal session for an existing user, or create an account incorrectly marked as email verified when sign-up is enabled. This issue is fixed in version 1.7.7.

Technical POC Analysis

Bug class: CWE-287, Improper Authentication.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

CVE-2026-114607 in Better Auth (versions 1.4.0-beta.18 through 1.7.6) allows attackers to bypass authentication and hijack user accounts by exploiting OAuth state values as Magic Link tokens. This affects any organization using the Magic Link plugin alongside social/Generic OAuth providers and database-backed state, potentially granting unauthorized access to user sessions or creating fraudulent verified accounts. Leadership should prioritize remediation because account takeover can lead to data breaches, privilege escalation, and compliance violations.

Business Impact: High
Compensating Controls

Until a patch is available, disable the Magic Link plugin, or if that is not possible, avoid using plain token storage and globally hashed verification identifiers by configuring hashed tokens and unique verification identifiers per user. Additionally, restrict OAuth provider usage to only trusted providers and monitor for anomalous authentication events.

Threat Intelligence Overview

EPSS Score
0.3%
Top 73% exploitable
Prevalence
Medium
popular TypeScript/npm auth library, but not ubiquitous infrastructure-tier software
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

46
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +46
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

CVE-2024-56734 HIGH POC
7.9 Dec 30

Better Auth is an authentication library for TypeScript. Rated high severity (CVSS 7.9), this vulnerability is remotely

CVE-2026-41427 HIGH POC
7.1 Apr 24

Authorization bypass in the @better-auth/oauth-provider plugin for Better Auth (versions >= 1.4.8-beta.7 and < 1.6.5, pl

CVE-2026-67330 CRITICAL
9.4 Aug 01

Privilege-escalating account takeover in the @better-auth/scim plugin (versions 1.4.0-beta.27 through 1.6.21 and 1.7.0-b

CVE-2026-67336 CRITICAL
9.4 Aug 01

Authentication bypass in Better Auth before 1.6.11 stems from insecure cryptographic defaults in the legacy oidcProvider

CVE-2025-71401 CRITICAL
9.3 Aug 02

Denial of service in Better Auth (npm) before 1.4.2 lets an unauthenticated remote attacker poison the router's base pat

CVE-2026-110864 CRITICAL
9.1 Oct 14

Authentication bypass in Better Auth's OAuth Proxy plugin (versions 1.5.0-beta.12 through 1.7.6) lets unauthenticated re

CVE-2025-71399 HIGH
8.8 Aug 02

Path normalization bypass in Better Auth before v1.4.5 allows unauthenticated remote attackers to circumvent `disabledPa

CVE-2026-67331 HIGH
8.7 Aug 01

Authorization bypass in @better-auth/scim versions 1.5.0 through 1.7.0-beta.3 allows any authenticated user to fully tak

CVE-2026-67327 HIGH
8.7 Aug 01

Pre-account hijacking in better-auth (npm) allows a remote attacker to gain persistent, password-based access to any vic

CVE-2026-67328 HIGH
8.6 Aug 01

Multiple authentication bypass vulnerabilities in @better-auth/sso before version 1.6.21 enable low-privileged attackers

CVE-2026-80192 HIGH
8.6 Aug 25

Two domain-ownership authentication bypass flaws in @better-auth/sso allow authenticated organization owners to compromi

CVE-2026-109346 HIGH
8.5 Oct 12

Better Auth versions 1.3.8-beta.3 to before 1.7.0-rc.3 with the deviceAuthorization plugin enabled are vulnerable to a U

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy