Lucene search
+L

TencentOS Server 3: nodejs:24 (TSSA-2026:1438)

🗓️ 11 Nov 2026 00:00:00Reported by TenableType 
nessus
 nessus
🔗 www.tenable.com👁 3 Views

Multiple vulnerabilities in ip-address and brace-expansion libraries on TencentOS Server 3.

Related
Refs
Code
ReporterTitlePublishedViews
Family
githubexploit
GithubExploit
Exploit for CVE-2026-111497
26 Oct 202613:10
–githubexploit
githubexploit
GithubExploit
Exploit for Unchecked Return Value in Google Brotli
2 Nov 202608:55
–githubexploit
githubexploit
GithubExploit
Exploit for CVE-2026-111497
24 Oct 202622:05
–githubexploit
githubexploit
GithubExploit
Exploit for CVE-2026-105482
23 Oct 202623:46
–githubexploit
githubexploit
GithubExploit
Exploit for CVE-2026-111497
25 Oct 202604:22
–githubexploit
githubexploit
GithubExploit
cve-feed
28 Oct 202619:42
–githubexploit
githubexploit
GithubExploit
Exploit for CVE-2026-111497
22 Oct 202608:52
–githubexploit
githubexploit
GithubExploit
Exploit for CVE-2026-111497
24 Oct 202610:02
–githubexploit
githubexploit
GithubExploit
Exploit for CVE-2026-111497
22 Oct 202604:08
–githubexploit
githubexploit
GithubExploit
Exploit for CVE-2026-111497
25 Oct 202609:36
–githubexploit
Rows per page
#%NASL_MIN_LEVEL 80900
##
# (C) Tenable, Inc.
#
# The descriptive text and package checks in this plugin were
# extracted from Tencent Linux Security Advisory TSSA-2026:1438.
##

include('compat.inc');

if (description)
{
  script_id(379321);
  script_version("1.1");
  script_set_attribute(attribute:"plugin_modification_date", value:"2026/11/11");

  script_cve_id(
    "CVE-2026-101911",
    "CVE-2026-102276",
    "CVE-2026-102277",
    "CVE-2026-102278",
    "CVE-2026-105481",
    "CVE-2026-105482",
    "CVE-2026-105483",
    "CVE-2026-106069",
    "CVE-2026-106071",
    "CVE-2026-106072",
    "CVE-2026-106073",
    "CVE-2026-106074",
    "CVE-2026-111497"
  );
  script_xref(name:"CISA-KNOWN-EXPLOITED", value:"2026/11/10");

  script_name(english:"TencentOS Server 3: nodejs:24 (TSSA-2026:1438)");

  script_set_attribute(attribute:"synopsis", value:
"The remote TencentOS Server 3 host is missing one or more security updates.");
  script_set_attribute(attribute:"description", value:
"The version of Tencent Linux installed on the remote TencentOS Server 3 host is prior to tested version. It is,
therefore, affected by multiple vulnerabilities as referenced in the TSSA-2026:1438 advisory.

    Package updates are available for TencentOS Server 3 that fix the following vulnerabilities:

    CVE-2026-101911:
    ip-address is a library for parsing and manipulating IPv4 and IPv6 addresses in JavaScript. Prior to
    10.7.1, the Address6 constructor, Address6.isValid, and parse code in src/ipv6.ts accept unbounded strings
    and expand invalid characters through RE_BAD_CHARACTERS into large diagnostics. Material impact occurs
    only when an application accepts a very large attacker-controlled field and passes it to Address6 parsing
    without an earlier length bound. Common URL and header limits, and common body-parser defaults, generally
    constrain the effect; common defaults typically exclude 32 MiB fields. Megabyte-scale fields can cause a
    synchronous stall and high transient memory use, approximately 16 MiB can trigger an invalid string length
    exception, and process termination occurs at approximately 32 MiB. The affected entry points include
    Address6.isValid and construction paths that reach parse. This issue is fixed in version 10.7.1.

    CVE-2026-102276:
    The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to
    1.1.19, 2.1.5, 3.0.7, and 5.0.10, crafted brace patterns can exhaust the native stack in parseCommaParts
    because parseCommaParts recursively processes the remainder once per brace group and uses push.apply to
    pass every element of a very large comma-part array as a function argument. Patterns containing many
    comma-separated brace groups trigger the recursive path, while the large array triggers the argument-array
    path without deep recursion. These paths cause recursive and argument-array native stack exhaustion before
    max or maxLength can limit output, potentially terminating the Node.js process in a process-terminating
    denial of service. This issue is fixed in versions 1.1.19, 2.1.5, 3.0.7, and 5.0.10.

    CVE-2026-102277:
    The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to
    1.1.21, 2.1.7, 3.0.9, and 5.0.12, the expand function handles untrusted {a},b}-shaped patterns with many
    trailing closing braces by restarting its scan once for each trailing closing brace. The successive full-
    input rescans with linear working-string growth cause quadratic CPU time and memory pressure that can
    block the Node.js event loop. The process eventually recovers, making the impact a recoverable CPU denial
    of service. This issue is fixed in versions 1.1.21, 2.1.7, 3.0.9, and 5.0.12.

    CVE-2026-102278:
    The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to
    1.1.20, 2.1.6, 3.0.8, and 5.0.11, deeply nested brace groups cause expand_() to recurse once per nesting
    level at comma-member and single-set expansion sites, exhausting the native stack before output limits can
    apply and potentially terminating the Node.js process. expand_ performs uncontrolled recursion for nested
    brace alternatives and single-part sets. deeply nested brace groups supplied as an untrusted pattern.
    expand_ is affected. expand is affected. Comma members is affected. Single set is affected. native stack
    exhaustion during nested sub-expansion. process-terminating denial of service. This issue is fixed in
    versions 1.1.20, 2.1.6, 3.0.8, and 5.0.11.

    CVE-2026-105481:
    A flaw in Node.js HTTP Agent connection reuse can cause a client to accept as valid a response that was
    sent before the client has sent the request. This is an incomplete fix of CVE-2026-48931.

    The guard that destroys idle keep-alive sockets when unexpected data arrives only runs when the event loop
    polls for I/O. If an unsolicited response has already reached the socket but has not been read yet when
    the socket is handed to a new request, for example because the event loop was busy with synchronous work,
    the guard is removed without seeing it and the data is parsed as the response to the new request.

    This vulnerability affects Node.js **26.x**, **24.x**, and **22.x**.

    CVE-2026-105482:
    A flaw in Node.js DNS resolution allows hostnames containing a NUL byte to be silently truncated by the
    dns.resolve*() functions and dns.reverse(). This is an incomplete fix of CVE-2026-48930, which only
    covered dns.lookup() and the net/tls host options.

    Because the name is passed to c-ares as a C string, resolving attacker.example\0.trusted.example queries
    attacker.example and returns its records without any error. Applications that validate a hostname, for
    example against a domain allowlist, and then resolve it with dns.resolve*() can act on records for a
    different name than the one they validated.

    This vulnerability affects Node.js 26.x, 24.x, and 22.x.

    CVE-2026-105483:
    A flaw in Node.js TLS hostname verification allows a certificate without a matching IP address SAN to
    authenticate a connection to an IPv4 address when the host is written with non-ASCII characters, such as
    fullwidth digits (.0.0.1).

    tls.checkServerIdentity() did not recognize such hosts as IP addresses, even though they normalize and
    resolve to a regular IPv4 address, and matched them against the certificate DNS names and Common Name
    instead. A certificate containing DNS:127.0.0.1 or DNS:*.0.0.1 could therefore be accepted for an IP
    endpoint it was not issued for. This is a regression introduced after the fix for CVE-2026-48618.

    This vulnerability affects Node.js **26.x** and **24.x**.

    CVE-2026-106069:
    A flaw in Node.js TLS hostname verification can cause a server certificate to be validated against a
    different IP address than the one the client connected to, when the host is a non-canonical IPv4 literal
    with a leading zero, such as 0127.0.0.1.

    tls.checkServerIdentity() normalizes the host following the WHATWG URL rules, which read a leading-zero
    octet as octal (0127.0.0.1 becomes 87.0.0.1), while the connection is made through the operating system
    resolver, which on some platforms such as macOS reads it as decimal (127.0.0.1). A server at the connected
    address can then be authenticated with a certificate issued for another IP address.

    This vulnerability affects Node.js **26.x**, **24.x**, and **22.x**.

    CVE-2026-106071:
    A flaw in Node.js Permission Model filesystem enforcement can grant access to paths that do not match a
    wildcard --allow-fs-read or --allow-fs-write rule.

    When the requested path is shorter than the prefix of a wildcard grant, the radix tree lookup stops
    comparing early and treats the path as a match. For example, --allow-fs-read=/etc/passwd.* also allows
    reading /etc/passwd. This requires the wildcard grant to sit directly under the root of the permission
    tree, for example when it is the only grant for that scope. This is a different root cause from
    CVE-2026-58043.

    This vulnerability affects Node.js **26.x**.

    CVE-2026-106072:
    A flaw in Node.js TLS hostname verification allows a certificate with only a DNS SAN to authenticate an IP
    endpoint when the client connects using a non-canonical IPv4 spelling, such as 0177.0.0.1, 0x7f.0.0.1,
    2130706433 or 127.1.

    tls.checkServerIdentity() did not classify these hosts as IP addresses, but normalized them to their
    canonical form and matched the result against the certificate DNS names. A certificate containing
    DNS:127.0.0.1 and no IP Address:127.0.0.1 SAN was therefore accepted, while the same certificate is
    correctly rejected for 127.0.0.1. Exploitation requires a certificate with a numeric DNS SAN issued by a
    CA trusted by the client, and a platform resolver that accepts these spellings, such as glibc.

    This vulnerability affects Node.js **26.x**, **24.x**, and **22.x**.

    CVE-2026-106073:
    A flaw in Node.js Permission Model filesystem enforcement leaves fs.realpathSync() without the required
    read permission checks. This is an incomplete fix of CVE-2026-21715, which only covered
    fs.realpathSync.native().

    As a result, code running under --permission with restricted --allow-fs-read can still use
    fs.realpathSync() to check file existence, resolve symlink targets, and enumerate filesystem paths outside
    of permitted directories.

    This vulnerability affects Node.js **26.x**, **24.x**, and **22.x**.

    CVE-2026-106074:
    A flaw in Node.js crypto causes the internal entropy caches used by crypto.randomUUID(),
    crypto.randomUUIDv7(), and crypto.randomInt() to be saved into user-land startup snapshots (--build-
    snapshot) and single executable applications built with useSnapshot.

    If any of these functions, or an API that relies on them such as URL.createObjectURL(), is called while
    the snapshot is built, every process started from that snapshot returns the same values until the cache is
    refilled: up to 127 UUIDs and about 1,000 randomInt() values. Identifiers expected to be unique can
    collide across processes, and values issued by one process can be predicted by observing another.

    This vulnerability affects Node.js **26.x**, **24.x**, and **22.x**.

    CVE-2026-111497:
    A buffer overflow vulnerability in the Brotli decoder (c/dec/decode.c) in Google Brotli versions 1.0.3
    through 1.2.0 on all platforms allows a remote unauthenticated attacker to corrupt adjacent decoder state
    memory, disclose sensitive memory contents, cause a denial of service, or potentially execute arbitrary
    code using a crafted Brotli-compressed stream.





    Users need to update any Brotli libraries or binaries between 1.0.3 through 1.2.0 to the latest available
    version: 1.0.10 or 1.1.1 or 1.2.1.

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

Note that Nessus has not tested for these issues but has instead relied only on the application's self-reported version
number.");
  script_set_attribute(attribute:"see_also", value:"https://mirrors.tencent.com/tlinux/errata/tssa-20261438.xml");
  script_set_attribute(attribute:"solution", value:
"Update the affected packages.");
  script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:C/I:C/A:C");
  script_set_cvss_temporal_vector("CVSS2#E:H/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:H");
  script_set_cvss3_temporal_vector("CVSS:3.0/E:H/RL:O/RC:C");
  script_set_attribute(attribute:"cvss4_vector", value:"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N");
  script_set_attribute(attribute:"cvss4_threat_vector", value:"CVSS:4.0/E:A");
  script_set_attribute(attribute:"cvss_score_source", value:"CVE-2026-111497");

  script_set_attribute(attribute:"exploitability_ease", value:"Exploits are available");
  script_set_attribute(attribute:"exploit_available", value:"true");

  script_set_attribute(attribute:"vuln_publication_date", value:"2026/09/28");
  script_set_attribute(attribute:"patch_publication_date", value:"2026/10/29");
  script_set_attribute(attribute:"plugin_publication_date", value:"2026/11/11");

  script_set_attribute(attribute:"plugin_type", value:"local");
  script_set_attribute(attribute:"cpe", value:"cpe:/o:tencent:tencentos_server:3");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:tencent:tencentos_server:nodejs");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:tencent:tencentos_server:nodejs-nodemon");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:tencent:tencentos_server:nodejs-packaging");
  script_set_attribute(attribute:"generated_plugin", value:"current");
  script_end_attributes();

  script_category(ACT_GATHER_INFO);
  script_family(english:"Tencent 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_info2.nasl");
  script_require_keys("Host/local_checks_enabled", "Host/etc/os-release", "Host/TencentOS/rpm-list", "Host/cpu");

  exit(0);
}


include('rpm2.inc');

if (!get_kb_item('Host/local_checks_enabled')) audit(AUDIT_LOCAL_CHECKS_NOT_ENABLED);
var os_product = get_kb_item('installed_os/local/SSH/0/product');
if (isnull(os_product) || 'TencentOS' >!< os_product) audit(AUDIT_OS_NOT, 'TencentOS');
var os_version = get_kb_item('installed_os/local/SSH/0/version');
if (isnull(os_version)) audit(AUDIT_UNKNOWN_APP_VER, 'TencentOS');
if (! preg(pattern:"^3([^0-9]|$)", string:os_version)) audit(AUDIT_OS_NOT, 'TencentOS 3.x', 'TencentOS ' + os_version);

if (!get_kb_item('Host/TencentOS/rpm-list')) audit(AUDIT_PACKAGE_LIST_MISSING);

var cpu = get_kb_item('Host/cpu');
if (isnull(cpu)) audit(AUDIT_UNKNOWN_ARCH);
if ('x86_64' >!< cpu && cpu !~ "^i[3-6]86$" && 's390' >!< cpu && 'aarch64' >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, 'TencentOS', cpu);

var constraints = [
  {
    'release': '3',
    'pkgs': [
      {'reference':'nodejs-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'aarch64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'x86_64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-debuginfo-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'aarch64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-debuginfo-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'x86_64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-debugsource-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'aarch64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-debugsource-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'x86_64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-devel-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'aarch64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-devel-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'x86_64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-docs-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-full-i18n-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'aarch64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-full-i18n-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'x86_64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-libs-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'aarch64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-libs-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'x86_64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-libs-debuginfo-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'aarch64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-libs-debuginfo-24.22.1-1.module+el8.10.0+989+fdefb0d5', 'cpu':'x86_64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'nodejs-nodemon-3.1.14-2.module+el8.10.0+955+8168aeb7', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'nodejs-packaging-2021.06-6.module+el8.10.0+817+2499aee6', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'nodejs-packaging-bundler-2021.06-6.module+el8.10.0+817+2499aee6', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'npm-11.19.1-1.24.22.1.1.module+el8.10.0+989+fdefb0d5', 'rpm_spec_vers_cmp':TRUE, 'epoch':'1'},
      {'reference':'v8-13.6-devel-13.6.233.17-1.24.22.1.1.module+el8.10.0+989+fdefb0d5', 'cpu':'aarch64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'3'},
      {'reference':'v8-13.6-devel-13.6.233.17-1.24.22.1.1.module+el8.10.0+989+fdefb0d5', 'cpu':'x86_64', 'rpm_spec_vers_cmp':TRUE, 'epoch':'3'}
    ]
  }
];

var os_release = get_one_kb_item('installed_os/local/SSH/0/release');
var os_sp = get_one_kb_item('Host/*/minor_release');

var flag = 0;
var reference;
var sp;
var _cpu;
var el_string;
var rpm_spec_vers_cmp;
var epoch;
var allowmaj;
var exists_check;
var cves;
foreach var constraint ( constraints ) {
  # Check that the target release is equal to the affected release
  if (!empty_or_null(constraint['release'])){
    if (constraint['release'] != os_release) continue;
  }
  if (!empty_or_null(constraint['sp'])){
    if (constraint['sp'] != os_sp) continue;
  }
  foreach var pkg ( constraint['pkgs'] ) {
    reference = NULL;
    sp = NULL;
    _cpu = NULL;
    el_string = NULL;
    rpm_spec_vers_cmp = NULL;
    epoch = NULL;
    allowmaj = NULL;
    exists_check = NULL;
    cves = NULL;
    if (!empty_or_null(pkg['reference'])) reference = pkg['reference'];
    if (!empty_or_null(pkg['sp'])) sp = pkg['sp'];
    if (!empty_or_null(pkg['cpu'])) _cpu = pkg['cpu'];
    if (!empty_or_null(pkg['el_string'])) el_string = pkg['el_string'];
    if (!empty_or_null(pkg['rpm_spec_vers_cmp'])) rpm_spec_vers_cmp = pkg['rpm_spec_vers_cmp'];
    if (!empty_or_null(pkg['epoch'])) epoch = pkg['epoch'];
    if (!empty_or_null(pkg['allowmaj'])) allowmaj = pkg['allowmaj'];
    if (!empty_or_null(pkg['exists_check'])) exists_check = pkg['exists_check'];
    if (!empty_or_null(pkg['cves'])) cves = pkg['cves'];
    if (reference &&
        ## (no known rpm to check OR known rpm_exists)
        (!exists_check || rpm_exists(rpm:exists_check)) &&
        rpm_check(sp:sp, cpu:_cpu, reference:reference, epoch:epoch, el_string:el_string, rpm_spec_vers_cmp:rpm_spec_vers_cmp, allowmaj:allowmaj, cves:cves)) flag++;
  }
}

if (flag)
{
  security_report_v4(
      port       : 0,
      severity   : SECURITY_HOLE,
      extra      : rpm_report_get()
  );
  exit(0);
}
else
{
  var tested = pkg_tests_get();
  if (tested) audit(AUDIT_PACKAGE_NOT_AFFECTED, tested);
  else audit(AUDIT_PACKAGE_NOT_INSTALLED, 'nodejs / nodejs-debuginfo / nodejs-debugsource / etc');
}

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

11 Nov 2026 00:00Current
7.4High risk
Vulners AI Score7.4
CVSS 49.2
CVSS 3.17.5 - 9.8
CVSS 37.4
EPSS0.82641
SSVC
3