Podatność SSRF w bibliotece Better Auth (TypeScript) pozwala uwierzytelnionemu atakującemu na wymuszenie żądań serwera do dowolnych adresów URL poprzez kontrolowane przez niego endpointy OIDC. W połączeniu z opcją trustEmailVerified możliwe jest przejęcie kont innych użytkowników.
▸ Pokaż oryginał (EN)
Better Auth is an authentication and authorization library for TypeScript. Prior to 1.6.11, the @better-auth/sso plugin's POST /sso/register and POST /sso/update-provider endpoints accept attacker-controlled oidcConfig.userInfoEndpoint, tokenEndpoint, and jwksEndpoint URLs when skipDiscovery: true is set, store them on the ssoProvider row without origin validation, and fetch them during OIDC callback, allowing non-blind server-side request forgery and possible account linking when trustEmailVerified: true is configured. This issue is fixed in version 1.6.11.
Plugin @better-auth/sso udostępnia endpointy POST /sso/register oraz POST /sso/update-provider, które przy włączonej opcji skipDiscovery: true akceptują dostarczone przez atakującego wartości pól oidcConfig.userInfoEndpoint, tokenEndpoint oraz jwksEndpoint. Adresy te są zapisywane w rekordzie ssoProvider bez jakiejkolwiek weryfikacji pochodzenia (origin validation). Podczas wywołania zwrotnego OIDC (OIDC callback) serwer wykonuje żądania HTTP do tych niezaufanych adresów, co stanowi tzw. non-blind SSRF — atakujący może odczytać odpowiedź serwera. Jeśli dodatkowo skonfigurowana jest opcja trustEmailVerified: true, możliwe jest powiązanie konta (account linking) z kontem innego użytkownika poprzez zwrócenie odpowiednio spreparowanych danych z kontrolowanego endpointu.
Atakujący może wykonywać żądania z serwera do wewnętrznych zasobów sieciowych (SSRF), odczytywać ich odpowiedzi, a przy określonej konfiguracji (trustEmailVerified: true) przejąć konta innych użytkowników poprzez nieuprawnione account linking.
Należy zaktualizować bibliotekę Better Auth do wersji 1.6.11 lub nowszej, w której problem został naprawiony. Patch dostępny jest w referencjach producenta (GitHub release v1.6.11).
Biblioteka Better Auth z pluginem @better-auth/sso w wersjach przed 1.6.11, przy konfiguracji z włączoną opcją skipDiscovery: true. Opcja trustEmailVerified: true dodatkowo rozszerza zakres możliwego ataku.
Podatność wymaga posiadania przez atakującego konta z uprawnieniami do rejestracji lub aktualizacji dostawcy SSO (PR: L w wektorze CVSS). Szczególnie krytyczna w środowiskach z włączoną opcją trustEmailVerified: true, gdzie możliwe jest przejęcie kont innych użytkowników.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:NBetter Auth
APPBetter-Auth0.1.0 – 1.6.11 (bez)Better Auth Better Auth\/sso
APPBetter-Auth< 1.6.11
Powiązane podatności
Better Auth: pominięcie weryfikacji client_secret w endpointach OAuth token
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