Doorkeeper OpenID Connect
CVE-2026-70665
MEDIUM
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister OAuth client via DCR with attacker-chosen elevated scopes
-
DeliveryServer persists client without scope validation
-
ExploitAttacker sends authorization link to privileged user
-
ExecutionUser authorizes client
-
PersistAttacker receives access token carrying inflated scopes
-
ImpactAccess privileged API resources beyond intended grant
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization verification
MITRE ATT&CK
1 technique across 1 tactic: Defense Evasion The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The Dynamic Client Registration endpoint must be enabled in the Rails application (it is an optional feature, not universally deployed). The Doorkeeper configuration must not explicitly set |
| Impact | The CVSS 3.1 score of 4.2 with vector AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N accurately reflects a moderate but real-world-constrained risk. AC:H captures the several specific preconditions that must align simultaneously, and UI:R reflects that a legitimate user must authorize the attacker's registered client before tokens are issued. The impact is bounded to C:L/I:L with no scope change, meaning the attacker gains access to resources beyond their intended permission but does not achieve full system compromise. No EPSS score was provided, and the vulnerability is not listed in CISA KEV, indicating no confirmed active exploitation at time of analysis. Real-world risk is meaningful primarily for multi-tenant Rails deployments that have enabled DCR, defined sensitive scopes such as |
| Exploit ScenarioDerived | An attacker sends a POST request to the DCR endpoint supplying |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 25, 2026
Privilege escalation in Doorkeeper OpenID Connect prior to 1.10.4 allows self-registered OAuth clients to obtain scopes beyond what the server intends to grant. The Dynamic Client Registration endpoint directly assigns client-supplied scope values to the application record without intersecting them against the server's configured default_scopes and optional_scopes, and because enforce_configured_scopes is disabled by default, Doorkeeper's ScopeChecker subsequently honors those persisted application-level scopes over server-level restrictions. No public exploit has been identified at time of analysis; a vendor patch was released July 2, 2026.
RemediationAI
Upgrade doorkeeper-openid_connect to version 1.10.4, released July 2, 2026, which validates the scope parameter against the server's configured default_scopes and optional_scopes before persisting the registration, silently drops unrecognized scopes per RFC 7591 §2, and rejects registrations where all requested scopes are unsupported with an invalid_client_metadata error. As a compensating control prior to patching, set enforce_configured_scopes true in the Doorkeeper initializer, which causes ScopeChecker to reject tokens referencing scopes not in the server's configured set - note this may break existing clients that rely on custom application-level scopes and should be tested before deployment. Alternatively, disable the Dynamic Client Registration endpoint entirely if it is not a required feature of the deployment. See https://github.com/doorkeeper-gem/doorkeeper-openid_connect/security/advisories/GHSA-8r7r-wh7x-27ff and the fix commit at https://github.com/doorkeeper-gem/doorkeeper-openid_connect/commit/24c3cb1729b69f48649a6f4491dcae69f805000d.
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability resides in the DynamicClientRegistrationController#application_params method of the doorkeeper-openid_connect Ruby gem (CPE: cpe:2.3:a:doorkeeper-gem:doorkeeper-openid_connect:*:*:*:*:*:*:*:*), which implements RFC 7591 Dynamic Client Registration for Rails applications backed by Doorkeeper OAuth. The root cause (CWE-285: Improper Authorization) is the single-line assignment scopes: params[:scope] with no call to Doorkeeper.configuration.scopes or optional_scopes for validation. The exploit chain is enabled by two Doorkeeper defaults working in concert: enforce_configured_scopes is off by default, and ScopeChecker prioritizes application-level scopes - so a client persisted with an arbitrary scope like admin will have that scope honored at token-issuance time. The fix (commit 24c3cb1) introduces a permitted_scopes method that intersects client-supplied scopes with the server's scope set and a validate_scope validator that rejects registrations where all requested scopes are unsupported.
Know when Doorkeeper Openid Connect gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N
DCR endpoint is network-accessible without credentials, but exploitation demands default-off configuration, scope separation, and user authorization of the malicious client, with limited confidentiality and integrity impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
Doorkeeper OpenID Connect implements an OpenID Connect authentication provider for Rails applications on top of Doorkeeper. Prior to 1.10.4, the Dynamic Client Registration (DCR) endpoint persists client-supplied scopes without validating them against the server's configured scope set. Under certain conditions, this allows a self-registered client to obtain scopes beyond what the server intended to grant. In DynamicClientRegistrationController#application_params, the scopes attribute is assigned directly from params[:scope] with no validation against Doorkeeper.configuration.scopes or optional_scopes. Combined with enforce_configured_scopes being off by default and Doorkeeper's ScopeChecker prioritizing application-level scopes over server-level scopes, this creates a privilege escalation path. This issue is fixed in version 1.10.4.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
NVD
CVE.org
EPSS
GitHub
Exploit-DB