{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2026-110861", "assignerOrgId": "83251b91-4cc7-4094-a5c7-464a1b83ea10", "state": "PUBLISHED", "assignerShortName": "VulnCheck", "dateReserved": "2026-10-14T22:18:33.239Z", "datePublished": "2026-10-14T22:52:45.713Z", "dateUpdated": "2026-10-14T22:52:45.713Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "83251b91-4cc7-4094-a5c7-464a1b83ea10", "shortName": "VulnCheck", "dateUpdated": "2026-10-14T22:52:45.713Z" }, "datePublic": "2026-09-30T00:00:00.000Z", "title": "Better Auth drizzle-adapter 1.6.17 before 1.7.7 Rate Limit Bypass via Race Condition", "descriptions": [ { "lang": "en", "value": "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." } ], "problemTypes": [ { "descriptions": [ { "lang": "en", "description": "Improper Restriction of Excessive Authentication Attempts", "cweId": "CWE-307", "type": "CWE" } ] } ], "affected": [ { "vendor": "better-auth", "product": "drizzle-adapter", "defaultStatus": "unaffected", "packageURL": "pkg:npm/%40better-auth/drizzle-adapter", "versions": [ { "version": "1.6.17", "status": "affected", "versionType": "semver", "lessThan": "1.7.7" }, { "version": "1.7.7", "status": "unaffected", "versionType": "semver" } ] }, { "vendor": "better-auth", "product": "kysely-adapter", "defaultStatus": "unaffected", "packageURL": "pkg:npm/%40better-auth/kysely-adapter", "versions": [ { "version": "1.6.17", "status": "affected", "versionType": "semver", "lessThan": "1.7.0" }, { "version": "1.7.0", "status": "unaffected", "versionType": "semver" } ] }, { "vendor": "better-auth", "product": "better-auth", "defaultStatus": "unaffected", "packageURL": "pkg:npm/better-auth", "versions": [ { "version": "1.6.17", "status": "affected", "versionType": "semver", "lessThan": "1.7.7" }, { "version": "1.7.7", "status": "unaffected", "versionType": "semver" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:a:better-auth:better_auth:*:*:*:*:*:*:*:*", "versionStartIncluding": "1.6.17", "versionEndExcluding": "1.7.7" } ] } ] } ], "metrics": [ { "format": "CVSS", "cvssV4_0": { "version": "4.0", "vectorString": "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", "attackVector": "NETWORK", "attackComplexity": "HIGH", "attackRequirements": "PRESENT", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "LOW", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "baseScore": 6.3, "baseSeverity": "MEDIUM" } }, { "format": "CVSS", "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE", "baseScore": 3.7, "baseSeverity": "LOW" } } ], "references": [ { "url": "https://github.com/better-auth/better-auth/security/advisories/GHSA-44jh-23m7-hpcf", "tags": [ "vendor-advisory" ], "name": "GitHub Security Advisory (GHSA-44jh-23m7-hpcf)" }, { "name": "VulnCheck Advisory: Better Auth drizzle-adapter 1.6.17 before 1.7.7 Rate Limit Bypass via Race Condition", "tags": [ "third-party-advisory" ], "url": "https://www.vulncheck.com/advisories/better-auth-drizzle-adapter-1.6.17-before-1.7.7-rate-limit-bypass-via-race-condition" } ], "credits": [ { "lang": "en", "value": "designorant", "type": "reporter" } ], "x_generator": { "engine": "vulncheck-endgame" } } } }