{"id":"CVE-2026-44476","aliases":["GHSA-m6vc-f87m-cc2h"],"url":"https://o3.security/vulnerability/CVE-2026-44476","summary":"Doorkeeper OpenID Connect: Dynamic Client Registration feature creates public clients with client_secret","details":"### Impact\n\nThe `DynamicClientRegistrationController#register` action hard-codes `confidential: false` when creating applications (dynamic_client_registration_controller.rb:18-25), yet the response includes a client_secret and advertises `token_endpoint_auth_methods_supported: [\"client_secret_basic\", \"client_secret_post\"]`.\n\nBecause Doorkeeper's `Application.by_uid_and_secret` treats a blank/missing secret as valid for non-confidential (public) clients, an\nattacker who knows only the client_id (which is public information) can authenticate as the dynamically-registered client at the token endpoint.\n\n**Note** that Dynamic Client Registration is opt-in feature which is disabled by default so only projects that explicitly enabled it are affected.\n\n**Steps to Reproduce**\n\n1. Enable dynamic client registration in the initializer\n2. POST /oauth/registration with client_name, redirect_uris, and scope\n3. Observe: response returns client_secret, but the created\nDoorkeeper::Application has confidential: false\n4. Call `Doorkeeper::Application.by_uid_and_secret(client_id, nil)` — it\nreturns the application (credentials bypass)\n5. POST /oauth/token with grant_type=client_credentials and only\nclient_id (no client_secret) — the token endpoint issues an access token\nwithout any secret verification\n\n\n### Patches\nPatched in 1.10.0\n\n### Workarounds\nUpgrade existing applications created with a Dynamic Client registration to have `confidential: true`","published":"2026-08-25T22:47:54.774Z","modified":"2026-09-11T03:30:21.185215509Z","cvss":null,"epss":null,"cisaKev":null,"exploitsKnown":null,"affectedPackages":[{"ecosystem":"RubyGems","name":"doorkeeper-openid_connect","fixedVersion":"1.10.0"}],"fix":{"url":"https://github.com/doorkeeper-gem/doorkeeper-openid_connect/commit/561af83dcf","label":"doorkeeper-gem/doorkeeper-openid_connect@561af83"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/44xxx/CVE-2026-44476.json"},{"type":"ADVISORY","url":"https://github.com/doorkeeper-gem/doorkeeper-openid_connect/security/advisories/GHSA-m6vc-f87m-cc2h"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-44476"},{"type":"FIX","url":"https://github.com/doorkeeper-gem/doorkeeper-openid_connect/commit/561af83dcf"},{"type":"PACKAGE","url":"https://github.com/doorkeeper-gem/doorkeeper-openid_connect"},{"type":"WEB","url":"https://github.com/doorkeeper-gem/doorkeeper-openid_connect/releases/tag/v1.10.0"},{"type":"WEB","url":"https://github.com/rubysec/ruby-advisory-db/blob/master/gems/doorkeeper-openid_connect/CVE-2026-44476.yml"},{"type":"WEB","url":"https://www.cve.org/CVERecord?id=CVE-2026-44476"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-09-11T03:30:21.185215509Z"}}