Skip to content

doorkeeper-openid_connect-1.9.0.gem: 1 vulnerabilities (highest severity is: 7.4) #11540

@mend-bolt-for-github

Description

@mend-bolt-for-github
Vulnerable Library - doorkeeper-openid_connect-1.9.0.gem

Path to dependency file: /Gemfile.lock

Path to vulnerable library: /tmp/containerbase/cache/.ruby/cache/jwt-2.10.2.gem

Vulnerabilities

Vulnerability Severity CVSS Dependency Type Fixed in (doorkeeper-openid_connect version) Remediation Possible**
CVE-2026-45363 High 7.4 jwt-2.10.2.gem Transitive N/A*

*For some transitive vulnerabilities, there is no version of direct dependency with a fix. Check the "Details" section below to see if there is a version of transitive dependency where vulnerability is fixed.

**In some cases, Remediation PR cannot be created automatically for a vulnerability despite the availability of remediation

Details

CVE-2026-45363

Vulnerable Library - jwt-2.10.2.gem

A pure ruby implementation of the RFC 7519 OAuth JSON Web Token (JWT) standard.

Library home page: https://rubygems.org/gems/jwt-2.10.2.gem

Path to dependency file: /Gemfile.lock

Path to vulnerable library: /tmp/containerbase/cache/.ruby/cache/jwt-2.10.2.gem

Dependency Hierarchy:

  • doorkeeper-openid_connect-1.9.0.gem (Root Library)
    • jwt-2.10.2.gem (Vulnerable Library)

Found in base branch: main

Vulnerability Details

"JWT.decode(token, '', true, algorithm: 'HS256')" accepts an attacker-forged token. "OpenSSL::HMAC.digest('SHA256', '', payload)" returns a valid digest under an empty key, and no "raise InvalidKeyError if key.empty?" precondition exists in the HMAC algorithm. JWT.decode(token, "", true, algorithm: 'HS256') -> JWA::Hmac.verify(verification_key: "", ...) -> OpenSSL::HMAC.digest('SHA256', "", signing_input) == signature The same path is reached when a keyfinder block or key_finder: argument returns "", nil, or an array containing nil for an unknown key. JWT::Decode#find_key only rejects literal nil and empty arrays, and JWT::JWA::Hmac silently coerces nil to "" (signing_key ||= '') before signing. JWT.decode(token, nil, true, algorithms: ['HS256']) { |_h| "" } -> find_key returns "" # "" && !Array("").empty? == true -> JWA::Hmac.verify(verification_key: "", ...) -> verifies Common application patterns that produce the unsafe value: "redis.get("kid:#{kid}").to_s", ORM string columns with "default: ''", "ENV['SECRET'] || '', Hash.new('')" lookups, [primary, fallback] where fallback may be nil. Applications passing a non-empty static key:, or whose keyfinder returns nil / raises on miss, are not affected. The existing "enforce_hmac_key_length" option would block this but defaults to false. On OpenSSL ≥ 3.5 the empty-key HMAC.digest call no longer raises, so the OpenSSL-3.0 rescue in JWA::Hmac#sign does not fire. Affects HS256/HS384/HS512 via both JWT.decode (positional key and block keyfinder) and "JWT::EncodedToken#verify_signature!(key_finder:)"

Publish Date: 2026-05-18

URL: CVE-2026-45363

CVSS 3 Score Details (7.4)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: High
    • Privileges Required: None
    • User Interaction: None
    • Scope: Unchanged
  • Impact Metrics:
    • Confidentiality Impact: High
    • Integrity Impact: High
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Release Date: 2026-05-18

Fix Resolution: https://github.com/jwt/ruby-jwt.git - v3.2.0

Step up your Open Source Security Game with Mend here

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    Inbox

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions