AlmaLinux 9.2 [TuxCare] Security Update: python3.11 / python3.11-debug / python3.11-devel / python3.11-idle / etc Multiple Vulnerabilities (ALMALINUX9.2:CLSA-2026:1790155146)
| Reporter | Title | Published | Views | Family All 279 |
|---|---|---|---|---|
| CVE-2026-12003 | 16 Jun 202615:18 | – | attackerkb | |
| CVE-2026-17084 | 18 Aug 202613:57 | – | alpinelinux | |
| CVE-2026-19672 | 19 Aug 202615:24 | – | alpinelinux | |
| CVE-2026-87910 | 11 Sep 202617:27 | – | alpinelinux | |
| CVE-2026-87910 affecting package python3 for versions less than 3.12.15-1 | 6 Oct 202618:59 | – | cbl_mariner | |
| CVE-2026-12003 affecting package python3 for versions less than 3.12.9-14 | 9 Aug 202621:52 | – | cbl_mariner | |
| CVE-2026-17084 affecting package python3 for versions less than 3.12.15-1 | 6 Oct 202618:59 | – | cbl_mariner | |
| CVE-2026-19672 affecting package python3 for versions less than 3.12.14-2 | 1 Oct 202604:01 | – | cbl_mariner | |
| CVE-2026-17084 vulnerabilities | 4 Sep 202602:18 | – | cgr | |
| CVE-2026-19672 vulnerabilities | 25 Sep 202608:54 | – | cgr |
10
#%NASL_MIN_LEVEL 80900
##
# (C) Tenable, Inc.
##
include('compat.inc');
if (description)
{
script_id(351910);
script_version("1.1");
script_set_attribute(attribute:"plugin_modification_date", value:"2026/09/30");
script_cve_id(
"CVE-2026-12003",
"CVE-2026-17084",
"CVE-2026-19672",
"CVE-2026-87910"
);
script_xref(name:"CLSA", value:"2026:1790155146");
script_name(english:"AlmaLinux 9.2 [TuxCare] Security Update: python3.11 / python3.11-debug / python3.11-devel / python3.11-idle / etc Multiple Vulnerabilities (ALMALINUX9.2:CLSA-2026:1790155146)");
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.2 host has packages installed that are affected by multiple vulnerabilities as referenced in the TuxCare
ALMALINUX9.2:CLSA-2026:1790155146 advisory.
- To allow builds of Python to be run from an in-tree layout (rather than an installed file layout), the
VPATH variable is defined at build time and used to locate certain landmarks - specifically,
Modules/setup.local. When this landmark is found relative to VPATH relative to the executable, Python
assumes it is running in a source tree and generates a different default sys.path. This code remains in
release builds, so that release-ready builds can be built in-tree. On Windows, since builds are written to
'PCbuild/', the value of VPATH is set to '..\..', which results in a landmark of
'..\..\Modules\setup.local'. This path is outside the install directory of Python, and may have different
permissions, potentially allowing a low-privilege user to create the landmark and an alternative `Lib`
folder that will be discovered by an otherwise restricted install. Such a setup occurs with the legacy
default install location for all users (in the now superseded EXE installer), due to how Windows allows
all users to create folders in the root directory of their OS drive. Our recommended mitigation on Windows
is to migrate away from the legacy installer and use the new [Python install
manager](https://www.python.org/downloads/latest/pymanager/) to install for the current user. Installs
where the directory two levels above the Python installation directory have equivalent permissions are
unaffected (in general, a per-user install cannot be modified at all by other users, removing any
escalation of privilege risk, and could be directly modified by a privileged user, making the potential
tampering irrelevant). Alternative mitigations might include preemptively creating and restricting access
to a `Modules` directory. Be aware that only 3.13 and 3.14 will receive updated legacy installers -
earlier fixes are only provided as sources. Platforms other than Windows allow VPATH to be overridden, but
as they don't usually use a separated directory in the build for binaries, are unlikely to have a landmark
reference outside of the install directory. The landmark detection involving VPATH is a fallback for when
a more specific landmark - .\pybuilddir.txt - is absent, and was included for compatibility. Future
releases of Python will no longer include the fallback, and so builds will need to generate or preserve
the pybuilddir.txt file in order to work in-tree. This landmark file has been generated on Windows since
3.11, and on other platforms for longer. (CVE-2026-12003)
- The stringprep module didn't process characters from RFC 3454 tables B.2 or B.3 correctly: the latest
Unicode codepoint attributes were used instead of the specified Unicode 3.2.0. This behavior would cause
mismatches when processing domain names using IDNA 2003 (the idna codec) and the in_table_b2() function
of the stringprep module. This only affects domain names containing characters that were not previously
registered or had their Unicode attributes such as case-folding behavior updated since Unicode 3.2.0.
(CVE-2026-17084)
- The tarfile module's tar and data extraction filters created directories outside the destination for
members whose name leaves the destination and returns to it, such as ../evil/../dest/sub/file. The
containment check used the resolved path, but intermediate directories were created from the name as
given. Only empty directories are created outside the destination. Member contents are still extracted
inside it. To return to the destination the member's name must contain the destination directory's own
final component, so extraction into a secure randomised directory is not affected. This affects POSIX
platforms only. On Windows, .. components are collapsed before the path reaches the filesystem, so the
directories outside the destination are never created. (CVE-2026-19672)
- When tarfile extracts a link on a system that doesn't support links, it falls back to extracting a member
from the archive. In this case, the filter function is run twice: once for the extracted member, and once
with name set to the location of the link. For one of the calls, the return value was ignored. Instead,
the member should be skipped if either call returns None. (CVE-2026-87910)
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/almalinux9.2esu/advisories/2026/clsa-2026_1790155146.json
script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?893937aa");
script_set_attribute(attribute:"see_also", value:"https://cve.tuxcare.com/els/releases/CLSA-2026:1790155146");
script_set_attribute(attribute:"solution", value:
"Update the affected packages based on the guidance in TuxCare advisory ALMALINUX9.2:CLSA-2026:1790155146.");
script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:N/I:P/A:P");
script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C");
script_set_cvss3_base_vector("CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N");
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:N/VI:N/VA:N/SC:N/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-17084");
script_set_attribute(attribute:"cvss4_score_source", value:"CVE-2026-19672");
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:"Moderate");
script_set_attribute(attribute:"vuln_publication_date", value:"2026/06/16");
script_set_attribute(attribute:"patch_publication_date", value:"2026/09/23");
script_set_attribute(attribute:"plugin_publication_date", value:"2026/09/30");
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.2([^0-9]|$)", string:os_version)) audit(AUDIT_OS_NOT, 'AlmaLinux 9.2', '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 (cpu !~ "^i[3-6]86$" && 'x86_64' >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, 'AlmaLinux', cpu);
var constraints = [
{
'release': '9',
'sp': '2',
'pkgs': [
{'reference':'python3.11-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'i686', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'x86_64', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-debug-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'i686', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-debug-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'x86_64', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-devel-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'i686', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-devel-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'x86_64', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-idle-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'i686', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-idle-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'x86_64', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-libs-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'i686', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-libs-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'x86_64', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-test-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'i686', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-test-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'x86_64', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-tkinter-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'i686', 'el_string':'el9_2', 'rpm_spec_vers_cmp':TRUE},
{'reference':'python3.11-tkinter-3.11.2-2.el9_2.2.tuxcare.els34', 'sp':'2', 'cpu':'x86_64', 'el_string':'el9_2', '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, 'python3.11 / python3.11-debug / python3.11-devel / python3.11-idle / 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
30 Sep 2026 00:00Current
5.8Medium risk
Vulners AI Score5.8
CVSS 46.3
EPSS0.00734
SSVC