{"schema":"threatline.record/2","record":{"id":"GHSA-r4xp-prcw-77qf","aliases":["CVE-2026-110864","GHSA-r4xp-prcw-77qf"],"summary":"better-auth: OAuth Proxy lets an attacker sign in as another user","details":"## Am I affected?\n\nYou may be affected if you use `better-auth` from 1.5.0-beta.12 through versions before 1.7.7 with the OAuth Proxy plugin. You are affected only if **all** of these are also true:\n\n- On a participating environment, the OAuth Proxy plugin has no dedicated `secret`, or its `secret` equals that environment's global Better Auth secret.\n- Sign-in state is stored in a cookie (`account.storeStateStrategy: \"cookie\"`). With a database or secondary storage, this is only the case if you chose it explicitly.\n- Implicit account linking is on (the default).\n\nYou are not affected by this path if every participating environment uses a proxy `secret` distinct from its global Better Auth secret, if sign-in state is stored in the database, or if you use a version before 1.5.0-beta.12.\n\n## Summary\n\nThe OAuth Proxy plugin trusts any user profile it can decrypt. In the affected setup, Better Auth encrypts sign-in state, including data the caller chose, with the same secret and hands it to anyone who starts a social sign-in. An attacker can use this to get a fake profile for another user's email address that the proxy accepts as real.\n\n## Impact\n\nAn attacker without an account who knows a user's verified email address can sign in as that user, with that user's permissions. They can read private data, change the account, and link a provider account of their choice to it. They need no provider sign-in and no action from the victim. No availability impact is established, and a reported open redirect was not confirmed.\n\n## Patches\n\nThe fix is merged for the planned `better-auth` 1.7.7 release. That package is not available yet.\n\nUpgrade all nodes handling the same cookie-backed OAuth or SAML state flow and all OAuth Proxy participants together, including the production coordinator and preview or development deployments. Keep installed Better Auth packages released alongside `better-auth` on the same release version. Restart pending sign-in and account-linking flows; pre-upgrade state cookies and proxy payloads are rejected. Public options and API signatures are unchanged.\n\n## Workarounds\n\nUntil you upgrade to the fixed release, apply one of these:\n\n- Set one strong OAuth Proxy `secret` across every environment that takes part in the proxy flow, and keep it different from each environment's global Better Auth secret.\n- Set `account.storeStateStrategy: \"database\"`. This is already the default when a database or secondary storage is configured. If Magic Link is also enabled, switching can expose a separate cross-purpose verification-record path in affected releases. Ensure the two flows resolve to distinct stored identifiers; with built-in options, use Magic Link `storeToken: \"hashed\"` with global `verification.storeIdentifier` unset or `\"plain\"`, or disable Magic Link or both built-in social and Generic OAuth sign-in.\n- Remove the OAuth Proxy plugin if you do not need it.\n\nSetting `account.accountLinking.disableImplicitLinking: true` stops this path from taking over an existing account. It does not fix the underlying flaw: the callback can still accept attacker-made data as a provider identity. Apply one of the steps above as well.","categories":["Libraries & packages"],"product":"better-auth","vendor":"","ecosystem":"npm","affected_ranges":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-r4xp-prcw-77qf","source_modified_at":"2026-10-27T15:32:17Z","fetched_at":"2026-10-27T16:27:21.584480Z","package":{"ecosystem":"npm","name":"better-auth"},"range":">= 1.5.0-beta.12, < 1.7.7"},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-r4xp-prcw-77qf","source_modified_at":"2026-10-27T15:47:24.832632558Z","fetched_at":"2026-10-27T16:27:21.584480Z","package":{"name":"better-auth","ecosystem":"npm","purl":"pkg:npm/better-auth"},"ranges":[{"type":"SEMVER","events":[{"introduced":"1.5.0-beta.12"},{"fixed":"1.7.7"}]}],"versions":[]}],"fixed_versions":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-r4xp-prcw-77qf","source_modified_at":"2026-10-27T15:32:17Z","fetched_at":"2026-10-27T16:27:21.584480Z","package":{"ecosystem":"npm","name":"better-auth"},"version":"1.7.7"},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-r4xp-prcw-77qf","source_modified_at":"2026-10-27T15:47:24.832632558Z","fetched_at":"2026-10-27T16:27:21.584480Z","package":{"name":"better-auth","ecosystem":"npm","purl":"pkg:npm/better-auth"},"version":"1.7.7"}],"cvss":7.4,"severity":"High","kev":{"listed":false},"epss":{"probability":null,"percentile":null,"score_date":null},"published_at":"2026-10-27T15:32:16Z","modified_at":"2026-10-27T15:47:24.832632558Z","provenance":[{"source":"GitHub Advisory Database","url":"https://github.com/advisories/GHSA-r4xp-prcw-77qf","fetched_at":"2026-10-27T16:27:21.584480Z","source_modified_at":"2026-10-27T15:32:17Z"},{"source":"OSV","url":"https://osv.dev/vulnerability/GHSA-r4xp-prcw-77qf","fetched_at":"2026-10-27T16:27:21.584480Z","source_modified_at":"2026-10-27T15:47:24.832632558Z"}],"sources":["GitHub Advisory Database","OSV"],"references":[{"url":"https://github.com/better-auth/better-auth/security/advisories/GHSA-r4xp-prcw-77qf","source":"GitHub Advisory Database"},{"url":"https://github.com/better-auth/better-auth/pull/11494","source":"GitHub Advisory Database"},{"url":"https://github.com/better-auth/better-auth/commit/ac54bfd67821a7607533af2059858b12bc54e26a","source":"GitHub Advisory Database"},{"url":"https://github.com/better-auth/better-auth/releases/tag/v1.7.7","source":"GitHub Advisory Database"},{"url":"https://github.com/advisories/GHSA-r4xp-prcw-77qf","source":"GitHub Advisory Database"}],"locations":[],"motoko_assessment":{"status":"requires_architecture_review","automatic_remediation":false},"classification":{"method":"product-first software-layer rules","rules_version":"2.1","matched_on":"ecosystem","confidence":"heuristic","reviewed":false},"change_timestamp":"2026-10-27T15:47:24.832632558Z","content_hash":"a647c41a23e22b4338adeb907bc70e233f7f87b1d69a5fa82e61e205b2d0a6bc"}}
