AlmaLinux 9.6 [TuxCare] Security Update: libevent / libevent-devel / libevent-doc Multiple Vulnerabilities (ALMALINUX9.6:CLSA-2026:1790587734)
10
#%NASL_MIN_LEVEL 80900
##
# (C) Tenable, Inc.
##
include('compat.inc');
if (description)
{
script_id(361749);
script_version("1.1");
script_set_attribute(attribute:"plugin_modification_date", value:"2026/10/01");
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_xref(name:"CLSA", value:"2026:1790587734");
script_name(english:"AlmaLinux 9.6 [TuxCare] Security Update: libevent / libevent-devel / libevent-doc Multiple Vulnerabilities (ALMALINUX9.6:CLSA-2026:1790587734)");
script_set_attribute(attribute:"synopsis", value:
"The AlmaLinux host is missing one or more security updates.");
script_set_attribute(attribute:"description", value:
"The AlmaLinux 9.6 host has packages installed that are affected by multiple vulnerabilities as referenced in the TuxCare
ALMALINUX9.6:CLSA-2026:1790587734 advisory.
- 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)
- Libevent is an event notification library. Prior to 2.1.13 and 2.2.2-alpha, libevent can read beyond a
contiguous evbuffer region in event_tagging.c when decode_tag_internal requests at most five bytes from
evbuffer_pullup but iterates using the full logical buffer length. A fragmented evbuffer containing a six-
byte malformed tag can therefore advance past the pullup window and trigger an out-of-bounds read, which
can crash a process that decodes attacker-controlled tagged RPC data. This issue is fixed in versions
2.1.13 and 2.2.2-alpha. (CVE-2026-63383)
- Libevent is an event notification library. Prior to 2.1.13 and 2.2.2-alpha, libevent has an incorrect
integer conversion in event_tagging.c when evtag_unmarshal_header uses evtag_decode_int to decode an
attacker-controlled uint32 payload length and returns it as a signed int. Values above INT_MAX become
negative or truncated, and evtag_unmarshal_string can use the converted value in allocation sizing,
producing a wrapped large allocation request and denial of service. This issue is fixed in versions 2.1.13
and 2.2.2-alpha. (CVE-2026-63384)
Note that Nessus has not tested for these issues but has instead relied only on the application's self-reported version
number.");
# https://security.tuxcare.com/csaf/v2/els_os/tuxcare9.6esu/advisories/2026/clsa-2026_1790587734.json
script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?6bd79523");
script_set_attribute(attribute:"see_also", value:"https://cve.tuxcare.com/els/releases/CLSA-2026:1790587734");
script_set_attribute(attribute:"solution", value:
"Update the affected packages based on the guidance in TuxCare advisory ALMALINUX9.6:CLSA-2026:1790587734.");
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:"vendor_severity", value:"Important");
script_set_attribute(attribute:"vuln_publication_date", value:"2026/08/20");
script_set_attribute(attribute:"patch_publication_date", value:"2026/09/28");
script_set_attribute(attribute:"plugin_publication_date", value:"2026/10/01");
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:"Alma 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/OS/extended-third-party", "Host/local_checks_enabled", "Host/AlmaLinux/release", "Host/AlmaLinux/rpm-list", "Host/cpu");
exit(0);
}
include('rpm2.inc');
var third_party_support = get_kb_item('Host/OS/extended-third-party');
if (empty_or_null(third_party_support) || third_party_support != 'TuxCare') exit(0, 'TuxCare support not enabled.');
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) || 'AlmaLinux' >!< os_product) audit(AUDIT_OS_NOT, 'AlmaLinux');
var os_version = get_kb_item('installed_os/local/SSH/0/version');
if (isnull(os_version)) audit(AUDIT_UNKNOWN_APP_VER, 'AlmaLinux');
if (! preg(pattern:"^9.6([^0-9]|$)", string:os_version)) audit(AUDIT_OS_NOT, 'AlmaLinux 9.6', 'AlmaLinux ' + os_version);
if (!get_kb_item('Host/AlmaLinux/rpm-list')) audit(AUDIT_PACKAGE_LIST_MISSING);
var cpu = get_kb_item('Host/cpu');
if (isnull(cpu)) audit(AUDIT_UNKNOWN_ARCH);
if ('aarch64' >!< cpu && cpu !~ "^i[3-6]86$" && 'x86_64' >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, 'AlmaLinux', cpu);
var constraints = [
{
'release': '9',
'sp': '6',
'pkgs': [
{'reference':'libevent-2.1.12-8.el9_6.tuxcare.els2', 'sp':'6', 'cpu':'aarch64', 'el_string':'el9_6', 'rpm_spec_vers_cmp':TRUE},
{'reference':'libevent-2.1.12-8.el9_6.tuxcare.els2', 'sp':'6', 'cpu':'i686', 'el_string':'el9_6', 'rpm_spec_vers_cmp':TRUE},
{'reference':'libevent-2.1.12-8.el9_6.tuxcare.els2', 'sp':'6', 'cpu':'x86_64', 'el_string':'el9_6', 'rpm_spec_vers_cmp':TRUE},
{'reference':'libevent-devel-2.1.12-8.el9_6.tuxcare.els2', 'sp':'6', 'cpu':'aarch64', 'el_string':'el9_6', 'rpm_spec_vers_cmp':TRUE},
{'reference':'libevent-devel-2.1.12-8.el9_6.tuxcare.els2', 'sp':'6', 'cpu':'i686', 'el_string':'el9_6', 'rpm_spec_vers_cmp':TRUE},
{'reference':'libevent-devel-2.1.12-8.el9_6.tuxcare.els2', 'sp':'6', 'cpu':'x86_64', 'el_string':'el9_6', 'rpm_spec_vers_cmp':TRUE},
{'reference':'libevent-doc-2.1.12-8.el9_6.tuxcare.els2', 'sp':'6', 'el_string':'el9_6', '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
01 Oct 2026 00:00Current
7.4High risk
Vulners AI Score7.4
CVSS 49.2
CVSS 3.18.4
EPSS0.00784
SSVC