Packages / @better-auth/oauth-provider / Security
OAuth 2.1 Provider: Unprivileged users can register OAuth clients
Affected releases · @better-auth/oauth-provider
- 1.x1.4.8 – 1.6.4Fixed in 1.6.5
On 1.x, the newest line:
npm install @better-auth/oauth-provider@1.6.5Affected
1.4.8 – 1.6.4
27 releases
Fixed
1.6.5 – 1.7.12
42 releases, latest
Is your project affected?
Paste your package.json, or type the range you declare for @better-auth/oauth-provider. It is read in your browser and sent nowhere.
What happens
Am I affected?
You're affected if all of the following are true:
Using @better-auth/oauth-provider at version specified below
You configured clientPrivileges in the plugin options expecting it to gate who can create OAuth clients
The /oauth2/create-client or /admin/oauth2/create-client endpoints are reachable by authenticated users you don't fully trust
If clientPrivileges is not configured, this bug has no security consequence for your deployment
Summary
The clientPrivileges option documents a create action, but the OAuth client creation endpoints did not invoke the hook before persisting new clients. Deployments that configured clientPrivileges to restrict client registration were not actually restricted — any authenticated user could reach the create endpoints and register an OAuth client with attacker-chosen redirect URIs and metadata.
Non-create operations (read, list, update, delete, rotate) enforced the hook correctly. Only the create path was missing the check.
Impact
Unauthorized registration of OAuth clients by any authenticated user, under deployments that expected clientPrivileges to block them.
Attacker-controlled redirect_uris on those clients enable phishing flows that present as registered first-party applications.
If the SERVER_ONLY admin creation endpoint is also exposed to low-privilege users (a separate deployment misconfiguration), additional sensitive fields including
skip_consentbecome writable.
Patches
Fixed in @better-auth/oauth-provider@1.6.5 Both create endpoints now call the clientPrivileges hook with action "create" before persisting the client record.
Workarounds
If you cannot upgrade immediately:
Block the /oauth2/create-client and /admin/oauth2/create-client routes at your reverse proxy or middleware layer for any user who should not be able to register clients.
Do not expose the admin creation endpoint (it is SERVER_ONLY by design and should not be reachable by end-user sessions).