Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessKnow victim email, no auth
-
DeliveryStart OAuth sign-in for that email
-
ExploitCapture returned database-backed state value
-
ExecutionSubmit state to Magic Link verify endpoint
-
ImpactObtain 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
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.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.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
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.
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
More in Better Auth
View allBetter Auth is an authentication library for TypeScript. Rated high severity (CVSS 7.9), this vulnerability is remotely
Authorization bypass in the @better-auth/oauth-provider plugin for Better Auth (versions >= 1.4.8-beta.7 and < 1.6.5, pl
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
Authentication bypass in Better Auth before 1.6.11 stems from insecure cryptographic defaults in the legacy oidcProvider
Denial of service in Better Auth (npm) before 1.4.2 lets an unauthenticated remote attacker poison the router's base pat
Authentication bypass in Better Auth's OAuth Proxy plugin (versions 1.5.0-beta.12 through 1.7.6) lets unauthenticated re
Path normalization bypass in Better Auth before v1.4.5 allows unauthenticated remote attackers to circumvent `disabledPa
Authorization bypass in @better-auth/scim versions 1.5.0 through 1.7.0-beta.3 allows any authenticated user to fully tak
Pre-account hijacking in better-auth (npm) allows a remote attacker to gain persistent, password-based access to any vic
Multiple authentication bypass vulnerabilities in @better-auth/sso before version 1.6.21 enable low-privileged attackers
Two domain-ownership authentication bypass flaws in @better-auth/sso allow authenticated organization owners to compromi
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
EUVD-2026-108256
NVD
CVE.org
EPSS
GitHub
Exploit-DB