Lucene search
+L

CentOS 9 : libevent-2.1.13-1.el9

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

libevent 2.1.13-1.el9 heap write and stack overflow allow local/remote memory corruption.

Related
Refs
Code
#%NASL_MIN_LEVEL 80900
##
# (C) Tenable, Inc.
#
# The package checks in this plugin were extracted from
# the CentOS Stream Build Service.
##

include('compat.inc');

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

  script_cve_id(
    "CVE-2026-63379",
    "CVE-2026-63381",
    "CVE-2026-63382",
    "CVE-2026-63383",
    "CVE-2026-63384",
    "CVE-2026-63385",
    "CVE-2026-63387",
    "CVE-2026-63388"
  );

  script_name(english:"CentOS 9 : libevent-2.1.13-1.el9");

  script_set_attribute(attribute:"synopsis", value:
"The remote CentOS host is missing one or more security updates for libevent.");
  script_set_attribute(attribute:"description", value:
"The remote CentOS Linux 9 host has packages installed that are affected by multiple vulnerabilities as referenced in the
libevent-2.1.13-1.el9 build changelog.

  - Libevent is an event notification library. Prior to 2.1.13 and 2.2.2-alpha, libevent has a heap out-of-
    bounds write in bufferevent_sock.c when bufferevent_socket_set_conn_address_ copies a kernel-supplied
    AF_UNIX peer address into bufferevent_private.conn_address. Release builds compiled with NDEBUG disable
    the EVUTIL_ASSERT length guard, and the evhttp accept path can pass a 110-byte sockaddr from accept() into
    the 28-byte field. An unauthenticated local peer able to connect to an AF_UNIX listener can overwrite the
    adjacent dns_request pointer and heap data, causing memory corruption with confidentiality, integrity, and
    availability impact. This issue is fixed in versions 2.1.13 and 2.2.2-alpha. (CVE-2026-63388)

  - Libevent is an event notification library. Prior to 2.1.13 and 2.2.2-alpha, libevent has an off-by-one
    stack buffer overflow in evdns.c when dnsname_to_labels formats a name-bearing DNS record at the end of
    the 64 KB stack buffer allocated by evdns_server_request_format_response. The final-label check permits j
    plus label_len plus one to equal buf_len, after which the terminating null byte is written to
    buf[buf_len]. A crafted DNS server response containing PTR, CNAME, MX, NS, or SOA data can trigger the
    one-byte out-of-bounds write and crash or corrupt the process. This issue is fixed in versions 2.1.13 and
    2.2.2-alpha. (CVE-2026-63387)

  - Libevent is an event notification library. Prior to 2.1.13 and 2.2.2-alpha, libevent processes chunked
    HTTP trailers in http.c through evhttp_read_trailer and merges them into request headers. The fix
    introduces evhttp_parse_headers_impl_ and a temporary trailer header list. An unauthenticated remote
    attacker can place security-sensitive fields in trailers so that an upstream proxy and the libevent
    application interpret different effective headers, enabling header smuggling, authorization bypass, proxy-
    header spoofing, or cache poisoning. The fix parses trailers into a temporary header list and discards
    them instead of merging them into req->input_headers. This issue is fixed in versions 2.1.13 and
    2.2.2-alpha. (CVE-2026-63379)

  - Libevent is an event notification library. Prior to 2.1.13 and 2.2.2-alpha, libevent has a use-after-free
    in buffer.c when evbuffer_add_buffer_reference processes an output buffer whose out_total_len is zero.
    evbuffer_free_all_chains frees the initial empty chain without resetting outbuf->first, outbuf->last, or
    outbuf->last_with_datap, and APPEND_CHAIN_MULTICAST subsequently dereferences the dangling chain pointer.
    A caller that can drive this buffer state can cause memory corruption or a process crash. This issue is
    fixed in versions 2.1.13 and 2.2.2-alpha. (CVE-2026-63381)

  - Libevent is an event notification library. Prior to 2.1.13 and 2.2.2-alpha, the libevent evhttp parser in
    http.c inconsistently handles duplicate Transfer-Encoding headers, comma-separated Transfer-Encoding
    values, and bare line feeds in chunked framing. evhttp_find_header can select only the first header,
    evhttp_check_transfer_encoding_ was absent so the previous whole-string comparison fails to recognize
    valid lists ending in chunked, and evhttp_handle_chunked_read uses EVBUFFER_EOL_CRLF rather than
    EVBUFFER_EOL_CRLF_STRICT, accepting bare LF chunk terminators. When libevent is deployed behind a proxy
    that frames the same request differently, an unauthenticated remote attacker can desynchronize request
    boundaries and smuggle a second request, potentially bypassing access controls or poisoning caches. This
    issue is fixed in versions 2.1.13 and 2.2.2-alpha. (CVE-2026-63382)

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://kojihub.stream.centos.org/koji/buildinfo?buildID=129878");
  script_set_attribute(attribute:"solution", value:
"Update the CentOS 9 Stream libevent package.");
  script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:P/I:P/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:N/UI:N/S:U/C:H/I:H/A:H");
  script_set_cvss3_temporal_vector("CVSS:3.0/E:U/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:L/SC:L/SI:L/SA:N");
  script_set_attribute(attribute:"cvss4_threat_vector", value:"CVSS:4.0/E:U");
  script_set_attribute(attribute:"cvss_score_source", value:"CVE-2026-63387");
  script_set_attribute(attribute:"cvss3_score_source", value:"CVE-2026-63388");
  script_set_attribute(attribute:"cvss4_score_source", value:"CVE-2026-63385");

  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/08/20");
  script_set_attribute(attribute:"patch_publication_date", value:"2026/09/16");
  script_set_attribute(attribute:"plugin_publication_date", value:"2026/09/22");

  script_set_attribute(attribute:"plugin_type", value:"local");
  script_set_attribute(attribute:"cpe", value:"cpe:/a:centos:centos:9");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:centos:centos:libevent");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:centos:centos:libevent-devel");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:centos:centos:libevent-doc");
  script_set_attribute(attribute:"generated_plugin", value:"current");
  script_end_attributes();

  script_category(ACT_GATHER_INFO);
  script_family(english:"CentOS 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/CentOS/release", "Host/CentOS/rpm-list", "Host/cpu");

  exit(0);
}


include('rpm2.inc');
include('rhel.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) || 'CentOS' >!< os_product) audit(AUDIT_OS_NOT, 'CentOS');
var os_version = get_kb_item('installed_os/local/SSH/0/version');
if (isnull(os_version)) audit(AUDIT_UNKNOWN_APP_VER, 'CentOS');
if (!rhel_check_release(operator: 'ge', os_version: os_version, rhel_version: '9')) audit(AUDIT_OS_NOT, 'CentOS 9.x', 'CentOS ' + os_version);

if (!get_kb_item('Host/CentOS/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 && 'ppc' >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, 'CentOS', cpu);

var constraints = [
  {
    'release': '9',
    'pkgs': [
      {'reference':'libevent-2.1.13-1.el9', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'libevent-devel-2.1.13-1.el9', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'libevent-doc-2.1.13-1.el9', '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_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, 'libevent / libevent-devel / libevent-doc');
}

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