Skip to main content

Better Auth EUVDEUVD-2026-101744

| CVE-2026-110861 MEDIUM
Improper Restriction of Excessive Authentication Attempts (CWE-307)
2026-10-14 disclosure@vulncheck.com GHSA-wrjq-vqr4-qw7r
6.3
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

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

  1. Access
    Identify Better Auth endpoint on PostgreSQL
  2. Delivery
    Prepare credential/code guess list
  3. Exploit
    Fire concurrent request bursts
  4. Execution
    Win non-atomic check-then-update race
  5. Persist
    Exceed configured rate limit
  6. Impact
    Brute-force auth or OTP

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Brute-force prevention, rate limiting
Exploitation Conditions

Requires the target to use Better Auth's database-backed rate limiting with a PostgreSQL store on an affected version (better-auth/@better-auth/drizzle-adapter 1.6.17-1.7.6, or @better-auth/kysely-adapter 1.6.17 before 1.7.0), and rate limiting must be enabled on the targeted endpoints (password sign-in, two-factor verification, one-time code, password reset). Exploitation further depends on the attacker achieving genuine request concurrency within the narrow check-then-update window - reflected in AC:H/AT:P - so server-side request serialization, low connection concurrency, or an external throttle (WAF/reverse-proxy rate limit) materially limits success. No special authentication is required (PR:N), but the impact is bounded to defeating throttling rather than direct data or system compromise.

Impact

This is a moderate-severity integrity/control weakness, not a high-urgency flaw. The single provided scoring signal is a CVSS 4.0 base vector (6.3, AV:N/AC:H/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N): network-reachable and pre-authentication (PR:N), but with high attack complexity (AC:H) and a present attack requirement (AT:P) that reflects the race-window timing/concurrency needed to win the TOCTOU condition. No EPSS score, no CISA KEV listing, and no public POC were provided, so there is no evidence of active or at-scale exploitation; the signals are mutually consistent (a timing-dependent logic flaw scored at only Low confidentiality impact), not conflicting. The practical risk is that this flaw erodes a security control (rate limiting) rather than granting direct code execution or data access - its danger is as a force-multiplier for brute-force/credential-stuffing against sign-in, 2FA, OTP, and password-reset endpoints. Net priority: patch in the normal cycle for internet-facing deployments on PostgreSQL, elevated if those auth endpoints are high-value, but it does not warrant emergency response on the data provided. Note the input 'Information Disclosure' tag overstates impact - this is a rate-limit bypass (CWE-307), with only incidental confidentiality exposure through successful brute force.

Exploit ScenarioDerived

An attacker scripts many concurrent authentication attempts against a vulnerable Better Auth deployment on PostgreSQL, firing bursts so that multiple requests read the rate-limit counter before any of them writes the increment, letting far more attempts through than the configured limit. By repeatedly bursting, they brute-force or credential-stuff password sign-in, 2FA codes, or one-time codes well beyond intended throttling. No public exploit code was identified at time of analysis, and the narrow race window (AC:H/AT:P) makes reliable exploitation timing-sensitive.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 15, 2026

Rate-limit bypass in Better Auth (better-auth and @better-auth/drizzle-adapter 1.6.17 through 1.7.6, plus @better-auth/kysely-adapter 1.6.17 up to but not including 1.7.0) lets remote unauthenticated attackers defeat throttling on password sign-in, two-factor verification, one-time-code and password-reset endpoints by firing bursts of concurrent requests that all pass the limit check before any counter update lands. It is rated moderate (CVSS 4.0 6.3; independent assessment CVSS 3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N) because success depends on achieving genuine request concurrency inside a narrow check-then-update window, and the realized impact is defeat of throttling that can enable credential or one-time-code guessing rather than direct data or system compromise. No CISA KEV listing and no public exploit identified at time of analysis; the bypass only applies where the deployment uses Better Auth database-backed rate limiting with a PostgreSQL store and has rate limiting enabled on the targeted endpoints.

RemediationAI

Vendor-released patch: upgrade better-auth and @better-auth/drizzle-adapter to 1.7.7 or later, and @better-auth/kysely-adapter to 1.7.0 or later, per GHSA-44jh-23m7-hpcf (https://github.com/better-auth/better-auth/security/advisories/GHSA-44jh-23m7-hpcf); no workaround or configuration flag is documented as fully restoring atomicity, so the version bump is the primary fix. If immediate upgrade is not possible, layer compensating controls and accept their trade-offs: enforce per-account and per-IP attempt limits at a reverse proxy or WAF in front of the authentication routes, accepting that this is typically IP-based and therefore both bypassable from distributed source addresses and prone to blocking legitimate users behind NAT; or move rate-limit state to a store that provides native atomic counter increments such as Redis with INCR or INCRBY and expiry, accepting the added dependency, operational complexity and the need to fail closed if the external store is unavailable; or, for teams able to modify the database layer, wrap the counter read-modify-write in an atomic conditional upsert or SELECT FOR UPDATE and/or raise the transaction isolation level to SERIALIZABLE with retry on serialization failure, accepting reduced throughput and additional retry logic on hot authentication endpoints. Regardless of the chosen path, alert on anomalous burst patterns against sign-in, two-factor, one-time-code and password-reset routes, and consider shorter token lifetimes for the affected flows while unpatched.

Affected VersionsENISA

kysely-adapter 1.6.17 <1.7.0
drizzle-adapter 1.6.17 <1.7.7
better-auth 1.6.17 <1.7.7

Affected Packages

euvd better_auth fix: 1.7.7
euvd drizzle_adapter fix: 1.7.7
euvd kysely_adapter fix: 1.7.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 3 packages 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 is a TypeScript authentication framework whose optional rate limiter can persist counters in a database through adapter packages such as @better-auth/drizzle-adapter and @better-auth/kysely-adapter. On PostgreSQL, the limiter performs a read of the current attempt count, decides whether the configured threshold has been reached, and then writes the incremented value; because that check and the subsequent update are separate statements, the sequence is a classic time-of-check to time-of-use race (CWE-307, improper restriction of excessive authentication attempts). Under PostgreSQL's default READ COMMITTED isolation, concurrent requests can each read a pre-limit count and each proceed, so a burst of simultaneous requests against a protected endpoint consumes fewer counted attempts than were actually issued, and the configured limit is exceeded. The weakness is a missing atomic operation: a solution requires either an atomic conditional increment or upsert with an affected-row check, a SELECT FOR UPDATE row lock around the read-modify-write, or SERIALIZABLE isolation with retry handling. No CPE identifiers were supplied in the available data, so affected components are identified by npm package name and version range from the vendor advisory. The CVSS 4.0 vector supplied (AV:N/AC:H/AT:P/PR:N/UI:N) and the independent CVSS 3.1 vector (AC:H, AT:P equivalent) both reflect that exploitation demands reliable concurrency within a small window rather than a simple sequential request loop.

Know when PostgreSQL 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 (vulncheck) PRIMARY 6.3 MEDIUM
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
vuln.today AI 3.7 LOW

Network-reachable and pre-auth (AV:N/PR:N), but winning the concurrency race is timing-dependent (AC:H); impact is limited to weakened throttling enabling brute force, so C:L and I:N/A:N.

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

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
High
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Oct 15, 2026 - 02:16 EUVD

DescriptionCVE.org

Better Auth @better-auth/drizzle-adapter and better-auth from 1.6.17 before 1.7.7, and @better-auth/kysely-adapter from 1.6.17 before 1.7.0, contain a race condition in database-backed rate limiting on PostgreSQL where the limit check is not atomic with the counter update. Remote attackers can send bursts of concurrent requests that pass the check together, exceeding configured limits on password sign-in, two-factor verification, one-time code, password reset, and other rate-limited endpoints.

Threat Intelligence Overview

EPSS Score
0.2%
Top 89% exploitable
Prevalence
Medium
popular open-source TypeScript/Node auth library, growing but not universal
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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
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
No
Human Impact· derived
Medium

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2025-1094 HIGH POC
8.1 Feb 13

PostgreSQL libpq functions PQescapeLiteral(), PQescapeIdentifier(), PQescapeString(), and PQescapeStringConn() improperl

CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2013-1899 MEDIUM POC
6.5 Apr 04

Argument injection vulnerability in PostgreSQL 9.2.x before 9.2.4, 9.1.x before 9.1.9, and 9.0.x before 9.0.13 allows re

CVE-2026-20253 CRITICAL POC
9.8 Jun 10

Unauthenticated arbitrary file write in Splunk Enterprise (below 10.2.4 and 10.0.7) and Splunk Cloud Platform (below 10.

CVE-2026-9586 CRITICAL POC
9.3 Jul 17

Unauthenticated SQL injection in Sangoma Switchvox SMB Edition 8.3 (build 104997) lets remote attackers execute arbitrar

CVE-2017-7546 CRITICAL
9.8 Aug 16

PostgreSQL versions before 9.2.22, 9.3.18, 9.4.13, 9.5.8 and 9.6.4 are vulnerable to incorrect authentication flaw allow

CVE-2015-1352 MEDIUM POC
5.0 Mar 30

The build_tablename function in pgsql.c in the PostgreSQL (aka pgsql) extension in PHP through 5.6.7 does not validate t

CVE-2024-10553 CRITICAL POC
9.8 Mar 20

A vulnerability in the h2oai/h2o-3 REST API versions 3.46.0.4 allows unauthenticated remote attackers to execute arbitra

CVE-2019-9193 HIGH POC
7.2 Apr 01

In PostgreSQL 9.3 through 11.2, the "COPY TO/FROM PROGRAM" function allows superusers and users in the 'pg_execute_serve

CVE-2026-40887 CRITICAL POC
9.1 Apr 14

Unauthenticated SQL injection in Vendure Shop API allows remote attackers to execute arbitrary SQL commands against the

CVE-2022-24760 CRITICAL POC
10.0 Mar 12

Parse Server is an open source http web server backend. Rated critical severity (CVSS 10.0), this vulnerability is remot

CVE-2025-56157 CRITICAL POC
9.8 Dec 18

Hard-coded default PostgreSQL credentials shipped in the docker-compose.yaml of langgenius Dify through version 1.5.1 al

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