Lucene search
+L

Linux Distros Unpatched Vulnerability : CVE-2026-79981

🗓️ 27 Oct 2026 00:00:00Reported by TenableType 
nessus
 nessus
🔗 www.tenable.com👁 1 Views

DNS stub resolver in subsys/net/lib/dns/resolve.c allows off-path forged DNS answers.

Related
Refs
Code
ReporterTitlePublishedViews
Family
circl
Circl
CVE-2026-79981
23 Oct 202620:07
–circl
cve
CVE
CVE-2026-79981
23 Oct 202619:56
–cve
cvelist
Cvelist
CVE-2026-79981 DNS resolver reuses a single UDP source port for all queries, easing off-path answer spoofing
23 Oct 202619:56
–cvelist
euvd
EUVD
EUVD-2026-109144
23 Oct 202619:56
–euvd
mend
Mend
CVE-2026-79981
23 Oct 202619:56
–mend
nvd
NVD
CVE-2026-79981
23 Oct 202620:17
–nvd
osv_ubuntu
osv_ubuntu
UBUNTU-CVE-2026-79981
26 Oct 202600:00
–osv_ubuntu
ptsecurity
Positive Technologies
PT-2026-122215
23 Oct 202600:00
–ptsecurity
ubuntucve
UbuntuCve
CVE-2026-79981
23 Oct 202620:17
–ubuntucve
#%NASL_MIN_LEVEL 80900
##
# (C) Tenable, Inc.
##

include('compat.inc');

if (description)
{
  script_id(372396);
  script_version("1.1");
  script_set_attribute(attribute:"plugin_modification_date", value:"2026/10/27");

  script_cve_id("CVE-2026-79981");

  script_name(english:"Linux Distros Unpatched Vulnerability : CVE-2026-79981");

  script_set_attribute(attribute:"synopsis", value:
"The Linux/Unix host has one or more packages installed with a vulnerability that the vendor indicates will not be
patched.");
  script_set_attribute(attribute:"description", value:
"The Linux/Unix host has one or more packages installed that are impacted by a vulnerability without a vendor supplied
patch available.

  - The DNS stub resolver in subsys/net/lib/dns/resolve.c binds one UDP socket per configured server when the
    resolver context is initialised (dns_resolve_init_locked() -> register_dispatcher() ->
    dns_dispatcher_register()), with the local port left at 0 so the stack picks an ephemeral port exactly
    once. dns_write() then sends every subsequent query from that same socket without re-binding, so the
    source port is constant for the lifetime of the resolver context while only the 16-bit transaction
    identifier (ctx->queries[i].id, drawn with sys_rand16_get()) varies per query. RFC 5452 section 9.2
    requires both to vary; with a fixed port, an off-path attacker has to guess only the identifier. The
    stable port is cheap to learn. Any single observed query reveals it permanently, and it can also be found
    by probing the ephemeral UDP range: subsys/net/ip/connection.c answers unmatched unicast UDP with an ICMP
    port-unreachable, so the resolver's socket is the one port in that range that stays silent. Acceptance of
    a reply is decided solely by get_slot_by_id() matching the transaction identifier and a CRC-16 of the
    queried name  the reply's source address is never checked (dispatcher_cb() does ARG_UNUSED(addr)), so
    forged answers need not even be spoofed to appear to come from the configured server; they only need to
    reach the resolver's port. An attacker with UDP reachability to the device (same LAN, Wi-Fi or mesh
    segment, or a globally routable device address) can therefore flood answers for a predictable query name
    across the 16-bit identifier space during a query window and race the legitimate server. A win makes the
    application resolve an attacker-chosen address, and with CONFIG_DNS_RESOLVER_CACHE enabled the forged
    record is retained for its attacker-chosen TTL. The attack still requires winning that race, and
    applications that validate TLS certificates for the resolved endpoint are largely protected. The fix draws
    a fresh local port before each query to a server that has nothing outstanding: dns_randomize_source_port()
    unregisters the dispatcher, closes and reopens the socket, and re-registers it bound to port 0 so the
    system selects a new port, raising the per-query guessing space from roughly 16 to roughly 31 bits.
    Multicast DNS and LLMNR are excluded because their ports are protocol-fixed. The behaviour is controlled
    by CONFIG_DNS_RESOLVER_RANDOMIZE_SOURCE_PORT (default y). (CVE-2026-79981)

Note that Nessus relies on the presence of the package as reported by the vendor.");
  script_set_attribute(attribute:"see_also", value:"https://ubuntu.com/security/CVE-2026-79981");
  script_set_attribute(attribute:"solution", value:
"There is no known solution at this time.");
  script_set_attribute(attribute:"agent", value:"unix");
  script_set_cvss3_base_vector("CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N");
  script_set_cvss3_temporal_vector("CVSS:3.0/E:U/RL:U/RC:C");
  script_set_attribute(attribute:"cvss3_score_source", value:"CVE-2026-79981");

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

  script_set_attribute(attribute:"vuln_publication_date", value:"2026/10/23");
  script_set_attribute(attribute:"plugin_publication_date", value:"2026/10/27");

  script_set_attribute(attribute:"plugin_type", value:"local");
  script_set_attribute(attribute:"cpe", value:"cpe:/o:canonical:ubuntu_linux:16.04:-:lts");
  script_set_attribute(attribute:"cpe", value:"cpe:/o:canonical:ubuntu_linux:18.04:-:lts");
  script_set_attribute(attribute:"cpe", value:"cpe:/o:canonical:ubuntu_linux:20.04:-:lts");
  script_set_attribute(attribute:"cpe", value:"cpe:/o:canonical:ubuntu_linux:22.04:-:lts");
  script_set_attribute(attribute:"cpe", value:"cpe:/o:canonical:ubuntu_linux:24.04:-:lts");
  script_set_attribute(attribute:"cpe", value:"cpe:/o:canonical:ubuntu_linux:26.04:-:lts");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:canonical:ubuntu_linux:zephyr");
  script_set_attribute(attribute:"generated_plugin", value:"current");
  script_end_attributes();

  script_category(ACT_GATHER_INFO);
  script_family(english:"Misc.");

  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", "set_linux_os_id.nasl");
  script_require_keys("Host/cpu", "Host/local_checks_enabled", "global_settings/vendor_unpatched", "Host/OS/identifier");
  script_require_ports("Host/OS/Ubuntu Linux-16.04", "Host/OS/Ubuntu Linux-18.04", "Host/OS/Ubuntu Linux-20.04", "Host/OS/Ubuntu Linux-22.04", "Host/OS/Ubuntu Linux-24.04", "Host/OS/Ubuntu Linux-26.04");

  exit(0);
}

if (!get_kb_item("global_settings/vendor_unpatched")) exit(0, "Unpatched Vulnerabilities Detection not active.");
if (!get_kb_item("Host/local_checks_enabled")) audit(AUDIT_LOCAL_CHECKS_NOT_ENABLED);
if (empty_or_null(get_one_kb_item("Host/Debian/dpkg-l"))) audit(AUDIT_PACKAGE_LIST_MISSING);

include('linux_unpatched.inc');

var distro_constraints_array = {
  "Ubuntu Linux-16.04": {
    "package_manager": "dpkg-l",
    "constraints": [
      {
        "release": "16.04",
        "pkgs": [
          {"reference": "zephyr"}
        ]
      }
    ]
  },
  "Ubuntu Linux-18.04": {
    "package_manager": "dpkg-l",
    "constraints": [
      {
        "release": "18.04",
        "pkgs": [
          {"reference": "zephyr"}
        ]
      }
    ]
  },
  "Ubuntu Linux-20.04": {
    "package_manager": "dpkg-l",
    "constraints": [
      {
        "release": "20.04",
        "pkgs": [
          {"reference": "zephyr"}
        ]
      }
    ]
  },
  "Ubuntu Linux-22.04": {
    "package_manager": "dpkg-l",
    "constraints": [
      {
        "release": "22.04",
        "pkgs": [
          {"reference": "zephyr"}
        ]
      }
    ]
  },
  "Ubuntu Linux-24.04": {
    "package_manager": "dpkg-l",
    "constraints": [
      {
        "release": "24.04",
        "pkgs": [
          {"reference": "zephyr"}
        ]
      }
    ]
  },
  "Ubuntu Linux-26.04": {
    "package_manager": "dpkg-l",
    "constraints": [
      {
        "release": "26.04",
        "pkgs": [
          {"reference": "zephyr"}
        ]
      }
    ]
  }
};

var distro_constraints_values = linux_unpatched::get_distro_constraints(distro_constraints_arr:distro_constraints_array);
if (empty_or_null(distro_constraints_values)) audit(AUDIT_HOST_NOT, 'affected');

var third_party_support = get_kb_item('Host/OS/extended-third-party');
if (!empty_or_null(third_party_support)) {
    var third_party_vendors = distro_constraints_values['third_party'];
    if (!empty_or_null(third_party_vendors)) {
        var vendor;
        foreach vendor (third_party_vendors) {
            if (vendor == third_party_support) exit(0, 'A third party management patch is available for this vulnerability from ' + vendor + '.\n');
        }
    }
}

var report = linux_unpatched::check_unpatched_constraints(distro_constraints_values:distro_constraints_values);

if (!empty_or_null(report))
{
  security_report_v4(
      port       : 0,
      severity   : SECURITY_WARNING,
      extra      : report
  );
  exit(0);
}
else
{
  audit(AUDIT_HOST_NOT, 'affected');
}

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

27 Oct 2026 00:00Current
5.7Medium risk
Vulners AI Score5.7
CVSS 3.16.5
EPSS0.00124
1