Biblioteka Better Auth w wersjach przed 1.6.11 zawiera podatność auth bypass w pluginach oidcProvider i mcp, polegającą na braku weryfikacji client_secret przy obsłudze żądań odświeżenia tokenu OAuth. Atakujący posiadający ważny refresh_token może wystawiać nowe access tokeny i refresh tokeny bez znajomości tajnego klucza klienta.
▸ Pokaż oryginał (EN)
Better Auth is an authentication and authorization library for TypeScript. Prior to 1.6.11, the legacy oidcProvider and mcp plugins expose OAuth token endpoints whose refresh_token grant authenticates only possession of the bound refreshToken row and matching client_id, without verifying the confidential client's client_secret, allowing an attacker with a valid refresh_token to mint access tokens and rotated refresh tokens through /api/auth/oauth2/token or /api/auth/mcp/token. The @better-auth/oauth-provider package is not affected. This issue is fixed in version 1.6.11.
Endpointy /api/auth/oauth2/token oraz /api/auth/mcp/token obsługujące grant typu refresh_token weryfikują jedynie posiadanie prawidłowego rekordu refreshToken i zgodność client_id, pomijając sprawdzenie client_secret wymaganego dla poufnych klientów OAuth. Narusza to standardowy model uwierzytelniania klientów poufnych (CWE-306, CWE-287, CWE-863) oraz brak weryfikacji integralności danych uwierzytelniających (CWE-345). Wystarczy więc, że atakujący wejdzie w posiadanie aktywnego refresh_token — może on wtedy samodzielnie rotować tokeny i uzyskiwać nowe access tokeny.
Atakujący z dostępem do cudzego refresh_token może przejąć sesję OAuth ofiary — mintować nowe access tokeny i rotowane refresh tokeny — uzyskując tym samym nieautoryzowany dostęp do zasobów chronionych przez daną aplikację.
Należy zaktualizować bibliotekę Better Auth do wersji 1.6.11 lub nowszej, w której problem został naprawiony. Szczegóły dostępne w oficjalnych referencjach projektu (GitHub Security Advisory GHSA-pw9m-5jxm-xr6h oraz release v1.6.11).
Biblioteka Better Auth w wersjach przed 1.6.11 używająca pluginów oidcProvider lub mcp (legacy); pakiet @better-auth/oauth-provider nie jest podatny.
Podatność naprawiona w wersji 1.6.11 (commit 1f2ff4215c4affff0b140b0c0a712c0dde35659c, PR #9576). Pakiet @better-auth/oauth-provider pozostaje nienaruszony.
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XBetter Auth
APPBetter-Auth< 1.6.11
Powiązane podatności
SSRF w Better Auth — niezweryfikowane endpointy OIDC w pluginie SSO
Better Auth: błędna autoryzacja w pluginie deviceAuthorization umożliwia przejęcie sesji urządzenia
Race condition w Better Auth umożliwia wielokrotne użycie kodu autoryzacyjnego OAuth2
Better Auth: Auth Bypass przez nieprawidłowe wiązanie konta OAuth
Race condition w Better Auth — wielokrotne użycie refresh token