Lucene search
+L

Unity Linux 20.1050e Security Update: kernel (UTSA-2026-099693)

🗓️ 17 Aug 2026 00:00:00Reported by TenableType 
nessus
 nessus
🔗 www.tenable.com👁 2 Views

Uninitialized alg_key_len in kernel IPComp XFRM states enables memory corruption and privilege escalation.

Related
Refs
Code
#%NASL_MIN_LEVEL 80900
##
# (C) Tenable, Inc.
##

include('compat.inc');

if (description)
{
  script_id(336662);
  script_version("1.1");
  script_set_attribute(attribute:"plugin_modification_date", value:"2026/08/17");

  script_cve_id("CVE-2026-64436");

  script_name(english:"Unity Linux 20.1050e Security Update: kernel (UTSA-2026-099693)");

  script_set_attribute(attribute:"synopsis", value:
"The Unity Linux host is missing one or more security updates.");
  script_set_attribute(attribute:"description", value:
"The Unity Linux 20 host has a package installed that is affected by a vulnerability as referenced in the
UTSA-2026-099693 advisory.

    In the Linux kernel, the following vulnerability has been resolved:

    net: af_key: initialize alg_key_len for IPComp states

    pfkey_msg2xfrm_state() handles the IPComp (SADB_X_SATYPE_IPCOMP) case by
    allocating x->calg and copying only the algorithm name:

            x->calg = kmalloc_obj(*x->calg);
            if (!x->calg) {
                    err = -ENOMEM;
                    goto out;
            }
            strcpy(x->calg->alg_name, a->name);
            x->props.calgo = sa->sadb_sa_encrypt;

    Unlike the authentication (x->aalg) and encryption (x->ealg) branches of
    the same function, the compression branch never initializes
    calg->alg_key_len.  IPComp carries no key and the allocation only
    reserves sizeof(struct xfrm_algo) (i.e. no room for a key), so the field
    is left containing uninitialized slab data.

    calg->alg_key_len is later used as a length by xfrm_algo_clone() when an
    IPComp state is cloned during XFRM_MSG_MIGRATE:

            xfrm_state_migrate()
              xfrm_state_clone_and_setup()
                x->calg = xfrm_algo_clone(orig->calg);
                  kmemdup(orig, xfrm_alg_len(orig));

    where xfrm_alg_len() returns sizeof(*alg) + (alg_key_len + 7) / 8.  With
    a non-zero garbage alg_key_len, kmemdup() reads past the end of the
    68-byte calg object.  Adding an IPComp SA via PF_KEY and then migrating
    it triggers (net-next, KASAN, init_on_alloc=0):

      BUG: KASAN: slab-out-of-bounds in kmemdup_noprof+0x44/0x60
      Read of size 4164 at addr ff11000025a74980 by task diag2/9287
      CPU: 3 UID: 0 PID: 9287 Comm: diag2 7.1.0-rc6-g903db046d557 #1
      Call Trace:
       <TASK>
       dump_stack_lvl+0x10e/0x1f0
       print_report+0xf7/0x600
       kasan_report+0xe4/0x120
       kasan_check_range+0x105/0x1b0
       __asan_memcpy+0x23/0x60
       kmemdup_noprof+0x44/0x60
       xfrm_state_migrate+0x70a/0x1da0
       xfrm_migrate+0x753/0x18a0
       xfrm_do_migrate+0xb47/0xf10
       xfrm_user_rcv_msg+0x411/0xb50
       netlink_rcv_skb+0x158/0x420
       xfrm_netlink_rcv+0x71/0x90
       netlink_unicast+0x584/0x850
       netlink_sendmsg+0x8b0/0xdc0
       ____sys_sendmsg+0x9f7/0xb90
       ___sys_sendmsg+0x134/0x1d0
       __sys_sendmsg+0x16d/0x220
       do_syscall_64+0x116/0x7d0
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
       </TASK>

      Allocated by task 9287:
       kasan_save_stack+0x33/0x60
       kasan_save_track+0x14/0x30
       __kasan_kmalloc+0xaa/0xb0
       pfkey_add+0x2652/0x2ea0
       pfkey_process+0x6d0/0x830
       pfkey_sendmsg+0x42c/0x850
       __sys_sendto+0x461/0x4b0
       __x64_sys_sendto+0xe0/0x1c0
       do_syscall_64+0x116/0x7d0
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

      The buggy address belongs to the object at ff11000025a74980
       which belongs to the cache kmalloc-96 of size 96
      The buggy address is located 0 bytes inside of
       allocated 68-byte region [ff11000025a74980, ff11000025a749c4)

    Depending on the uninitialized value the same field can instead request
    an oversized kmemdup() allocation and make the migration clone fail.

    The XFRM netlink path is not affected: verify_one_alg() rejects an
    XFRMA_ALG_COMP attribute shorter than xfrm_alg_len(), so a calg added via
    XFRM_MSG_NEWSA is always self-consistent.

    Initialize calg->alg_key_len to 0, matching the aalg/ealg branches.

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

Note that Nessus has not tested for this issue but has instead relied only on the application's self-reported version
number.");
  # https://src.uniontech.com/#/security_advisory_detail?utsa_id=UTSA-2026-099693
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?ae33b5fc");
  # https://lore.kernel.org/linux-cve-announce/2026072538-CVE-2026-64436-7414@gregkh
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?8f970022");
  script_set_attribute(attribute:"see_also", value:"https://nvd.nist.gov/vuln/detail/CVE-2026-64436");
  script_set_attribute(attribute:"solution", value:
"Update the affected kernel package.");
  script_set_cvss_base_vector("CVSS2#AV:L/AC:L/Au:S/C:C/I:N/A:C");
  script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C");
  script_set_cvss3_base_vector("CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H");
  script_set_cvss3_temporal_vector("CVSS:3.0/E:U/RL:O/RC:C");
  script_set_attribute(attribute:"cvss_score_source", value:"CVE-2026-64436");

  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/07/23");
  script_set_attribute(attribute:"patch_publication_date", value:"2026/08/13");
  script_set_attribute(attribute:"plugin_publication_date", value:"2026/08/17");

  script_set_attribute(attribute:"plugin_type", value:"local");
  script_set_attribute(attribute:"generated_plugin", value:"current");
  script_end_attributes();

  script_category(ACT_GATHER_INFO);
  script_family(english:"Unity Linux 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/UOS-Server/release", "Host/UOS-Server/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) || 'UOS Server' >!< os_product) audit(AUDIT_OS_NOT, 'UOS Server');
var os_version = get_kb_item('installed_os/local/SSH/0/version');
if (isnull(os_version)) audit(AUDIT_UNKNOWN_APP_VER, 'UOS Server');
if (! preg(pattern:"^20.1050e([^0-9]|$)", string:os_version)) audit(AUDIT_OS_NOT, 'UOS Server 20.1050e', 'UOS Server ' + os_version);

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

var cpu = get_kb_item('Host/cpu');
if (isnull(cpu)) audit(AUDIT_UNKNOWN_ARCH);
if ('aarch64' >!< cpu && 'amd64' >!< cpu && 'x86_64' >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, 'UOS Server', cpu);


var constraints = [
  {
    'release': '20',
    'sp': '1050e',
    'pkgs': [
      {'reference':'kernel-5.10.0-27.18.uel20', 'sp':'1050e', 'cpu':'aarch64', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'kernel-5.10.0-27.18.uel20', 'sp':'1050e', 'cpu':'amd64', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'kernel-5.10.0-27.18.uel20', 'sp':'1050e', 'cpu':'x86_64', 'rpm_spec_vers_cmp':TRUE}
    ]
  }
];

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_WARNING,
      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, 'kernel');
}

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

17 Aug 2026 00:00Current
5.3Medium risk
Vulners AI Score5.3
CVSS 3.17.1
EPSS0.00119
2