Skip to content

Commit 33c7ffe

Browse files
jasnowRubySec CI
authored andcommitted
Updated advisory posts against rubysec/ruby-advisory-db@365ed20
1 parent 4fba3e8 commit 33c7ffe

1 file changed

Lines changed: 67 additions & 0 deletions

File tree

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
---
2+
layout: advisory
3+
title: 'CVE-2026-44476 (doorkeeper-openid_connect): Dynamic Client Registration feature
4+
creates public clients with client_secret'
5+
comments: false
6+
categories:
7+
- doorkeeper-openid_connect
8+
advisory:
9+
gem: doorkeeper-openid_connect
10+
cve: 2026-44476
11+
ghsa: m6vc-f87m-cc2h
12+
url: https://www.cve.org/CVERecord?id=CVE-2026-44476
13+
title: Dynamic Client Registration feature creates public clients with client_secret
14+
date: 2026-06-04
15+
description: |-
16+
### Impact
17+
18+
The `DynamicClientRegistrationController#register` action hard-codes
19+
`confidential: false` when creating applications
20+
(dynamic_client_registration_controller.rb:18-25), yet the response
21+
includes a client_secret and advertises `token_endpoint_auth_methods_supported:
22+
["client_secret_basic", "client_secret_post"]`.
23+
24+
Because Doorkeeper's `Application.by_uid_and_secret` treats a
25+
blank/missing secret as valid for non-confidential (public) clients, an
26+
attacker who knows only the client_id (which is public information)
27+
can authenticate as the dynamically-registered client at the token endpoint.
28+
29+
**Note** that Dynamic Client Registration is opt-in feature which is
30+
disabled by default so only projects that explicitly enabled it are affected.
31+
32+
**Steps to Reproduce**
33+
34+
1. Enable dynamic client registration in the initializer
35+
2. POST /oauth/registration with client_name, redirect_uris, and scope
36+
3. Observe: response returns client_secret, but the created
37+
Doorkeeper::Application has confidential: false
38+
4. Call `Doorkeeper::Application.by_uid_and_secret(client_id, nil)` — it
39+
returns the application (credentials bypass)
40+
5. POST /oauth/token with grant_type=client_credentials and only
41+
client_id (no client_secret) — the token endpoint issues an access token
42+
without any secret verification
43+
44+
### Workarounds
45+
46+
Upgrade existing applications created with a Dynamic Client registration
47+
to have `confidential: true`
48+
cvss_v3: 6.3
49+
unaffected_versions:
50+
- "< 1.9.0"
51+
patched_versions:
52+
- ">= 1.10.0"
53+
related:
54+
url:
55+
- https://www.cve.org/CVERecord/SearchResults?query=CVE-2026-44476
56+
- https://rubygems.org/gems/doorkeeper-openid_connect/versions/1.10.0
57+
- https://github.com/doorkeeper-gem/doorkeeper-openid_connect/releases/tag/v1.10.0
58+
- https://advisories.gitlab.com/gem/doorkeeper-openid_connect/CVE-2026-44476
59+
- https://github.com/doorkeeper-gem/doorkeeper-openid_connect/security/advisories/GHSA-m6vc-f87m-cc2h
60+
- https://github.com/advisories/GHSA-m6vc-f87m-cc2h
61+
notes: |
62+
- Looking for CVE reference:
63+
- https://www.cve.org/CVERecord?id=CVE-2026-44476 (reserved)
64+
- https://nvd.nist.gov/vuln/detail/CVE-2026-44476 (not found)
65+
- https://cve.report/search.php?search=CVE-2026-44476 (not listed)
66+
- https://www.cvedetails.com/index.php (not found; no URL parameter)
67+
---

0 commit comments

Comments
 (0)