Skip to content
Fencer Vulns
critical 9.1

CVE-2026-45363 json

`jwt` (Ruby gem) - empty-key HMAC bypass

published 2026-05-18 5 mo ago modified 2026-10-24 15 d ago also GHSA-c32j-vqhx-rx3x , EUVD-2026-44516

cvss
9.1
version 3.1, CNA
cisa kev
Not listed
not in CISA's catalog
epss
0.4%
EPSS 0.4% chance of exploitation in 30 days, percentile 30%
public exploits
0
none known

Summary

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.

Patch / fix

  • rubygems jwt 2.10.3, 3.2.0
  • ruby-jwt Debian 12 2.5.0-1+deb12u1
  • ruby-jwt Debian 13 2.7.1-1+deb13u1
  • ruby-jwt Debian 14 3.2.0-1

debian advisories DEBIAN-CVE-2026-45363

  • rubygem-jwt satellite utils 6.19, satellite utils 6.18, satellite utils 6.17 +9 more 2.10.3-1.el9sat
  • ansible-core satellite maintenance 6.19, satellite maintenance 6.18, satellite maintenance 6.17 +6 more 1:2.16.19-1.el9sat
  • ansible-test satellite capsule 6.19, satellite capsule 6.18, satellite capsule 6.17 +3 more 1:2.16.19-1.el9sat
  • openvox-server satellite capsule 6.19, satellite capsule 6.18, satellite capsule 6.17 +5 more 8.15.2-1.el9sat
  • python-aiohttp satellite capsule 6.17, satellite capsule 6.16, satellite 6.17 +1 more 3.14.3-1.el9pc
  • python3.11-aiohttp satellite capsule 6.17, satellite capsule 6.16, satellite 6.17 +1 more 3.14.3-1.el9pc
  • python3.12-aiohttp satellite capsule 6.19, satellite capsule 6.18, satellite 6.19 +1 more 3.14.3-1.el9pc
  • python3.12-gitpython satellite capsule 6.19, satellite 6.19 3.1.59-1.el9pc

red hat advisories RHSA-2026:63387RHSA-2026:63385RHSA-2026:63386RHSA-2026:63327

Vendor advisories

What the vendors themselves say about their products: affected, fixed or not affected, and what to do.

red hat product security vex CVE-2026-45363 updated cvss 7.4

ruby-jwt: ruby-jwt: Authentication bypass due to empty key in HMAC verification

  • Red Hat Satellite 6 rubygem-jwt
    affected: no fix available
  • Red Hat Satellite 6.16 for RHEL 8 rubygem-jwt 2.10.3-1.el8sat Red Hat Satellite 6.16 for RHEL 9 rubygem-jwt 2.10.3-1.el9sat
    fixed: vendor fix RHSA-2026:63327
  • Red Hat Satellite 6.17 for RHEL 9 rubygem-jwt 2.10.3-1.el9sat, ansible-core 2.16.19-1.el9sat, ansible-test 2.16.19-1.el9sat
    fixed: vendor fix RHSA-2026:63387
  • Red Hat Satellite 6.18 for RHEL 9 rubygem-jwt 2.10.3-1.el9sat, python3.12-pulpcore 3.73.30-3.el9pc, pulpcore-obsolete-packages 1.3.1-5.el9pc
    fixed: vendor fix RHSA-2026:63386
  • Red Hat Satellite 6.19 for RHEL 9 rubygem-jwt 2.10.3-1.el9sat
    fixed: vendor fix RHSA-2026:63385
  • Red Hat 3scale API Management Platform 2 3scale-amp2/zync-rhel9, 3scale-amp2/system-rhel9
    not affected: vulnerable code not in execute path
  • Red Hat Hardened Images chunkah 0.6.0-2.hum1
    not affected: component not present
  • Red Hat Satellite 6.16 for RHEL 8 python-yarl 1.18.3-1.el8pc, satellite 6.16.13-1.el8sat, python-tablib 3.5.0-1.el8pc, python-aiohttp 3.14.3-1.el8pc, openvox-server 8.15.2-1.el8sat, python-aiosignal 1.4.0-1.el8pc, +14 more Red Hat Satellite 6.16 for RHEL 9 python-yarl 1.18.3-1.el9pc, satellite 6.16.13-1.el9sat, python-tablib 3.5.0-1.el9pc, python-aiohttp 3.14.3-1.el9pc, openvox-server 8.15.2-1.el9sat, python-aiosignal 1.4.0-1.el9pc, +14 more Red Hat Satellite 6.17 for RHEL 9 foreman 3.14.0.20-1.el9sat, python-yarl 1.18.3-1.el9pc, satellite 6.17.11-1.el9sat, python-aiohttp 3.14.3-1.el9pc, foreman-cli 3.14.0.20-1.el9sat, foreman-ec2 3.14.0.20-1.el9sat, +27 more Red Hat Satellite 6.18 for RHEL 9 satellite 6.18.9-1.el9sat, ansible-core 2.16.19-1.el9sat, ansible-test 2.16.19-1.el9sat, satellite-cli 6.18.9-1.el9sat, openvox-server 8.15.2-1.el9sat, satellite-common 6.18.9-1.el9sat, +9 more Red Hat Satellite 6.19 for RHEL 9 satellite 6.19.4-1.el9sat, foreman 3.18.0.10-1.el9sat, ansible-core 2.16.19-1.el9sat, ansible-test 2.16.19-1.el9sat, openvox-agent 8.28.1-1.el9sat, satellite-cli 6.19.4-1.el9sat, +26 more
    not affected: vulnerable code not present

Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf

CISA SSVC

Exploitation
none
Automatable
yes
Technical impact
total
Assessed
3 mo ago

Exploit prediction

0.36% chance of exploitation in the next 30 days, higher than 30% of all scored CVEs (FIRST EPSS, 2026-11-08).

CVSS scores

assigned by version score vector
CNA 3.1 9.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
GitHub 3.1 7.4 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N

Affected packages

ecosystem package affected fixed in
rubygems jwt
>=3.0.0, <3.2.0
<2.10.3
3.2.0
2.10.3

Affected products

  • jwt ruby-jwt

Classification

Weakness

References

Sources

Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.