What’s Vulnerable › Vulnerabilities
CVE-2026-45363: `jwt` (Ruby gem) - empty-key HMAC bypass
- Severity: critical (CVSS 9.1 v3.1)
- Exploited in the wild: not listed in CISA KEV
- EPSS: 0.4% probability of exploitation in the next 30 days
- Public exploit or detection template: none known
- Published: 2026-07-14 · updated 2026-10-24
- Weakness: CWE-287
Description
ruby-jwt is a Ruby implementation of the RFC 7519 OAuth JSON Web Token standard. Prior to 2.10.3 and 3.2.0, JWT.decode(token, '', true, algorithm: 'HS256') accepts an attacker-forged token because OpenSSL::HMAC.digest('SHA256', '', payload) returns a valid digest under an empty key and no empty-key precondition exists in the HMAC algorithm. The same path is reached when a keyfinder block or key_finder: argument returns an empty string, nil, or an array containing nil for an unknown key, affecting HS256, HS384, and HS512 verification through JWT.decode and JWT::EncodedToken#verify_signature!. This issue is fixed in versions 2.10.3 and 3.2.0.
Affected products
- Rubygems Jwt: from 3.0.0 before 3.2.0; before 2.10.3; 3.0.0, 3.1.0, 3.1.1, 3.1.2, 0.1.1, 0.1.10 (+47) — fixed in 3.2.0, 2.10.3
- jwt ruby-jwt: before 2.10.3; from 3.0.0, < 3.2.0
How to fix
Upgrade to a fixed version: Rubygems Jwt 3.2.0, 2.10.3. Check the vendor advisory for mitigations.
References
- https://github.com/jwt/ruby-jwt/commit/9820020869ad147b941e49d96ab8beba35532964
- https://github.com/jwt/ruby-jwt/commit/db560b769a07bd9724e77ff505011ac01872106f
- https://github.com/jwt/ruby-jwt/releases/tag/v2.10.3
- https://github.com/jwt/ruby-jwt/releases/tag/v3.2.0
- https://github.com/jwt/ruby-jwt/security/advisories/GHSA-c32j-vqhx-rx3x
- https://lists.debian.org/debian-lts-announce/2026/09/msg00022.html
Get alerted when CVE-2026-45363 or the next vulnerability affects your stack