Lucene search
+L

Debian dla-4787 : ruby-jwt - security update

🗓️ 21 Sep 2026 00:00:00Reported by TenableType 
nessus
 nessus
🔗 www.tenable.com👁 10 Views

ruby-jwt empty key lets attacker-forged HS256/384/512 tokens pass verification in Debian 12.

Related
Refs
Code
#%NASL_MIN_LEVEL 80900
#
# (C) Tenable, Inc.
#
# The descriptive text and package checks in this plugin were
# extracted from Debian Security Advisory dla-4787. The text
# itself is copyright (C) Software in the Public Interest, Inc.
#

include('compat.inc');

if (description)
{
  script_id(348571);
  script_version("1.1");
  script_set_attribute(attribute:"plugin_modification_date", value:"2026/09/21");

  script_cve_id("CVE-2026-45363");

  script_name(english:"Debian dla-4787 : ruby-jwt - security update");

  script_set_attribute(attribute:"synopsis", value:
"The remote Debian host is missing a security-related update.");
  script_set_attribute(attribute:"description", value:
"The remote Debian 12 host has a package installed that is affected by a vulnerability as referenced in the dla-4787
advisory.

    - -------------------------------------------------------------------------
    Debian LTS Advisory DLA-4787-1                [email protected]
    https://www.debian.org/lts/security/                          Abhijith PA
    September 18, 2026                            https://wiki.debian.org/LTS
    - -------------------------------------------------------------------------

    Package        : ruby-jwt
    Version        : 2.5.0-1+deb12u1
    CVE ID         : CVE-2026-45363

    ruby-jwt is a Ruby implementation of the RFC 7519 OAuth JSON Web Token
    standard. 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!

    For Debian 12 bookworm, this problem has been fixed in version
    2.5.0-1+deb12u1.

    We recommend that you upgrade your ruby-jwt packages.

    For the detailed security status of ruby-jwt please refer to
    its security tracker page at:
    https://security-tracker.debian.org/tracker/ruby-jwt

    Further information about Debian LTS security advisories, how to apply
    these updates to your system and frequently asked questions can be
    found at: https://wiki.debian.org/LTS

Tenable has extracted the preceding description block directly from the Debian security advisory.

Note that Nessus has not tested for this issue but has instead relied only on the application's self-reported version
number.");
  script_set_attribute(attribute:"see_also", value:"https://security-tracker.debian.org/tracker/source-package/ruby-jwt");
  script_set_attribute(attribute:"see_also", value:"https://security-tracker.debian.org/tracker/CVE-2026-45363");
  script_set_attribute(attribute:"see_also", value:"https://packages.debian.org/source/bookworm/ruby-jwt");
  script_set_attribute(attribute:"solution", value:
"Upgrade the ruby-jwt packages.");
  script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:C/I:C/A:N");
  script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C");
  script_set_cvss3_base_vector("CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N");
  script_set_cvss3_temporal_vector("CVSS:3.0/E:U/RL:O/RC:C");
  script_set_attribute(attribute:"cvss_score_source", value:"CVE-2026-45363");

  script_set_attribute(attribute:"exploitability_ease", value:"No known exploits are available");
  script_set_attribute(attribute:"exploit_available", value:"false");

  script_set_attribute(attribute:"vuln_publication_date", value:"2026/05/18");
  script_set_attribute(attribute:"patch_publication_date", value:"2026/09/18");
  script_set_attribute(attribute:"plugin_publication_date", value:"2026/09/21");

  script_set_attribute(attribute:"plugin_type", value:"local");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:debian:debian_linux:ruby-jwt");
  script_set_attribute(attribute:"cpe", value:"cpe:/o:debian:debian_linux:12.0");
  script_set_attribute(attribute:"generated_plugin", value:"current");
  script_end_attributes();

  script_category(ACT_GATHER_INFO);
  script_family(english:"Debian Local Security Checks");

  script_copyright(english:"This script is Copyright (C) 2026 and is owned by Tenable, Inc. or an Affiliate thereof.");

  script_dependencies("ssh_get_info.nasl");
  script_require_keys("Host/local_checks_enabled", "Host/Debian/release", "Host/Debian/dpkg-l");

  exit(0);
}

include('debian_package.inc');

if (!get_kb_item("Host/local_checks_enabled")) audit(AUDIT_LOCAL_CHECKS_NOT_ENABLED);
if (!get_kb_item("Host/Debian/dpkg-l")) audit(AUDIT_PACKAGE_LIST_MISSING);

var debian_release = get_kb_item('Host/Debian/release');
if ( isnull(debian_release) ) audit(AUDIT_OS_NOT, 'Debian');
debian_release = chomp(debian_release);
if (! preg(pattern:"^(12)\.[0-9]+", string:debian_release)) audit(AUDIT_OS_NOT, 'Debian 12.0', 'Debian ' + debian_release);
var cpu = get_kb_item('Host/cpu');
if (isnull(cpu)) audit(AUDIT_UNKNOWN_ARCH);
if ('x86_64' >!< cpu && cpu !~ "^i[3-6]86$" && 'aarch64' >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, 'Debian', cpu);

var pkgs = [
    {'release': '12.0', 'prefix': 'ruby-jwt', 'reference': '2.5.0-1+deb12u1'}
];

var flag = 0;
foreach package_array ( pkgs ) {
  var _release = NULL;
  var prefix = NULL;
  var reference = NULL;
  if (!empty_or_null(package_array['release'])) _release = package_array['release'];
  if (!empty_or_null(package_array['prefix'])) prefix = package_array['prefix'];
  if (!empty_or_null(package_array['reference'])) reference = package_array['reference'];
  if (_release && prefix && reference) {
    if (deb_check(release:_release, prefix:prefix, reference:reference)) flag++;
  }
}

if (flag)
{
  security_report_v4(
    port       : 0,
    severity   : SECURITY_HOLE,
    extra      : deb_report_get()
  );
  exit(0);
}
else
{
  var tested = deb_pkg_tests_get();
  if (tested) audit(AUDIT_PACKAGE_NOT_AFFECTED, tested);
  else audit(AUDIT_PACKAGE_NOT_INSTALLED, 'ruby-jwt');
}

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

21 Sep 2026 00:00Current
7High risk
Vulners AI Score7
CVSS 3.19.1
EPSS0.00364
SSVC
10