{"id":"SUSE-SU-2026:23743-1","summary":"Security update for python311","details":"This update for python311 fixes the following issues:\n\n- CVE-2025-13462: incorrect parsing of TarInfo header when GNU long name and type AREGTYPE are combined (bsc#1259611).\n- CVE-2026-0864: improper handling of line-ending characters can lead to configuration file injection when the\n  `configparser` module is used (bsc#1269066).\n- CVE-2026-1502: HTTP client proxy tunnel headers not validated for CR/LF (bsc#1261969).\n- CVE-2026-2297: cpython: incorrectly handled hook in FileLoader can lead to validation bypass (bsc#1259240).\n- CVE-2026-3276: quadratic complexity in `unicodedata.normalize()` can lead to DoS when processing specially crafted\n  Unicode input (bsc#1267581).\n- CVE-2026-3644: incomplete control character validation in http.cookies (bsc#1259734).\n- CVE-2026-4224: C stack overflow when parsing XML with deeply nested DTD content models (bsc#1259735).\n- CVE-2026-4360: in the Tarfile.extract() function, the filter parameter is not passed properly when extracting\n  hardlinks (bsc#1269959).\n- CVE-2026-4519: leading dashes in URLs are accepted by the `webbrowser.open()` API and allow for web browser command\n  line option injection (bsc#1260026).\n- CVE-2026-4786: Incomplete mitigation of %action expansion for command injection to webbrowser.open() (bsc#1262319).\n- CVE-2026-6100: Arbitrary code execution or information disclosure via use-after-free in decompression modules\n  (bsc#1262098).\n- CVE-2026-7210: `xml.parsers.expat` and `xml.etree.ElementTree` use insufficient entropy for Expat hash-flooding\n  protection (bsc#1264962).\n- CVE-2026-7774: `tarfile.data_filter` path traversal bypass allows writing outside the extraction directory\n  (bsc#1267821).\n- CVE-2026-8328: `ftpcp()` does not use actual peer address and trusts server-supplied PASV host address (bsc#1265268).\n- CVE-2026-9669: crafted input can cause a stack buffer overflow (bsc#1267974).\n- CVE-2026-11940: tarfile extraction filter bypass via a crafted archive allows escaping the destination directory and\n  enables arbitrary file reads and writes (bsc#1268977).\n- CVE-2026-11972: infinite loop due to improper EOF handling in the tarfile module streaming mode can lead to DoS\n  (bsc#1269788).\n- CVE-2026-15308: Incremental HTMLParser allows CPU-exhaustion DoS via repeated unterminated markup declarations\n  (bsc#1271192).\n- CVE-2026-15806: urllib.request.HTTPPasswordMgr credentials for one URL scheme sent over another\n  scheme (bsc#1276223).\n- CVE-2026-17084: StringPrep algorithm considered Unicode codepoint attributes outside Unicode 3.2.0 (bsc#1276226).\n\nChanges for python311:\n\n- Update to 3.11.16:\n - Build\n - gh-153438: Update Windows build and installer tooling and\n documentation to use the current download URL for\n nuget.exe.\n - Library\n - gh-109638: Fix exponential time in csv.Sniffer.sniff() for\n a sample which contains many quote characters. A doubled\n quote character is now also detected in a field which\n contains the delimiter or a line break.\n - gh-98820: Fix quadratic time in csv.Sniffer.sniff() for\n a sample which contains quoted fields, in particular for\n a single column of quoted fields.\n - gh-149231: In tomllib, the number of parts in TOML keys is\n now limited.\n - gh-146083: Update bundled libexpat to version 2.7.5.\n - gh-141707: Don't change tarfile.TarInfo type from AREGTYPE\n to DIRTYPE when parsing GNU long name or link headers\n (bsc#1259611, CVE-2025-13462).\n - gh-90949: Add\n SetBillionLaughsAttackProtectionActivationThreshold() and\n SetBillionLaughsAttackProtectionMaximumAmplification() to\n xmlparser objects to tune protections against billion\n laughs attacks. Patch by B�n�dikt Tran.\n - gh-100372: ssl.SSLContext.load_verify_locations() no longer\n incorrectly accepts some cases of trailing data when\n parsing DER.\n - Security\n - gh-155558: Update bundled libexpat to version 2.8.3 for the\n fix to CVE-2026-72522.\n - gh-153030: Fixed quadratic complexity in incremental\n parsing of long unterminated constructs (such as tags or\n comments) in html.parser.HTMLParser, which could be\n exploited for a denial of service (bsc#1271192,\n CVE-2026-15308).\n - gh-152674: The xml.etree.ElementTree.Element methods\n findall(), iterfind() and find() avoid quadratic behavior\n when using XPath index predicates ([1], [last()],\n [last()-N]) on XML documents with many same-tag siblings.\n - gh-152216: Update bundled libexpat to version 2.8.2.\n - gh-151987: The tarfile.TarFile.extract() method now applies\n the given filter when it extracts a link target from the\n archive as a fallback (bsc#1269959, CVE-2026-4360).\n - gh-151981: In tarfile, seeking a stream now stops when end\n of the stream is reached (bsc#1269788, CVE-2026-11972).\n - gh-151544: Modules/Setup.local is no longer used as\n a landmark to discover whether Python is running in\n a source tree, as it could potentially affect actual\n installs. The pybuilddir.txt file is now the sole indicator\n of running in a source tree.\n - gh-151558: Fixed an vulnerability in the tarfile data and\n tar extraction filters where crafted archives could create\n a symlink pointing outside the destination directory. This\n was a bypass of CVE-2025-4330 (bsc#1268977,\n CVE-2026-11940).\n - gh-150599: Fix a possible stack buffer overflow in bz2 when\n a bz2.BZ2Decompressor is reused after a decompression\n error. The decompressor now becomes unusable after libbz2\n reports an error (bsc#1267974, CVE-2026-9669).\n - gh-150743: http.client now limits the number of\n chunked-response trailer lines it will read to 100, and the\n number of interim (1xx) responses it will skip to 100.\n A malicious or broken server could previously stream\n trailer lines or 100 Continue responses forever, hanging\n the client even when a socket timeout was in use. Reported\n by @YLChen-007 via GHSA-w4q2-g22w-6fr4.\n - gh-149698: Update bundled libexpat to version 2.8.1 for the\n fix for CVE-2026-45186.\n - gh-87451: The ftplib module's undocumented ftpcp function\n no longer trusts the IPv4 address value returned from the\n source server in response to the PASV command by default,\n completing the fix for CVE-2021-4189. As with ftplib.FTP,\n the former behavior can be re-enabled by setting the\n trust_server_pasv_ipv4_address attribute on the source\n ftplib.FTP instance to True. Thanks to Qi Deng at Aurascape\n AI for the report (bsc#1265268, CVE-2026-8328).\n - gh-149486: tarfile.data_filter() now validates link targets\n using the same normalised value that is written to disk,\n strips trailing separators from the member name when\n resolving a symlink's directory, and rejects link members\n that would replace the destination directory itself. This\n closes several path-traversal bypasses of the data\n extraction filter (bsc#1267821, CVE-2026-7774).\n - gh-149079: Fix a potential denial of service in\n unicodedata.normalize(). The canonical ordering step of\n Unicode normalization used a quadratic-time insertion sort\n for reordering combining characters, which could be\n exploited with crafted input containing many combining\n characters in non-canonical order. Replaced with\n a linear-time counting sort for long runs (bsc#1267581,\n CVE-2026-3276).\n - gh-149018: Improved protection against XML hash-flooding\n attacks in xml.parsers.expat and xml.etree.ElementTree when\n Python is compiled with libExpat 2.8.0 or later\n (bsc#1264962, CVE-2026-7210).\n - gh-149017: Update bundled libexpat to version 2.8.0.\n - gh-148808: Added buffer boundary check when using nbytes\n parameter with\n asyncio.AbstractEventLoop.sock_recvfrom_into(). Only\n relevant for Windows and the asyncio.ProactorEventLoop.\n - gh-148395: Fix a dangling input pointer in\n lzma.LZMADecompressor, and bz2.BZ2Decompressor when memory\n allocation fails with MemoryError, which could let\n a subsequent decompress() call read or write through\n a stale pointer to the already-released caller buffer\n (bsc#1262098, CVE-2026-6100).\n - gh-148169: A bypass in webbrowser allowed URLs prefixed\n with %action to pass the dash-prefix safety check\n (bsc#1262319, CVE-2026-4786).\n - gh-146581: Fix vulnerability in shutil.unpack_archive() for\n ZIP files on Windows which allowed to write files outside\n of the destination tree if the patch in the archive\n contains a Windows drive prefix. Now such invalid paths\n will be skipped. Files containing \"..\" in the name (like\n \"foo..bar\") are no longer skipped.\n - gh-146333: Fix quadratic backtracking in\n configparser.RawConfigParser option parsing regexes (OPTCRE\n and OPTCRE_NV). A crafted configuration line with many\n whitespace characters could cause excessive CPU usage.\n - gh-146211: Reject CR/LF characters in tunnel request\n headers for the HTTPConnection.set_tunnel() method\n (bsc#1261969, CVE-2026-1502).\n - gh-145986: xml.parsers.expat: Fixed a crash caused by\n unbounded C recursion when converting deeply nested XML\n content models with ElementDeclHandler(). This addresses\n CVE-2026-4224 (bsc#1259735, CVE-2026-4224).\n - gh-145599: Reject control characters in http.cookies.Morsel\n update() and js_output(). This addresses CVE-2026-3644\n (bsc#1259734, CVE-2026-3644).\n - gh-145506: Fixes CVE-2026-2297 by ensuring that\n SourcelessFileLoader uses io.open_code() when opening .pyc\n files (bsc#1259240, CVE-2026-2297).\n - gh-144370: Disallow usage of control characters in status\n in wsgiref.handlers to prevent HTTP header injections.\n Patch by Benedikt Johannes.\n - gh-143930: Reject leading dashes in URLs passed to\n webbrowser.open() (bsc#1260026, CVE-2026-4519).\n - gh-143927: Normalize all line endings (CR, CRLF, and LF) to\n LF+TAB when writing multi-line configparser values\n (bsc#1269066, CVE-2026-0864).\n - Tests\n - gh-149776: Fix test_socket on Linux kernel 7.1 and newer:\n skip UDP Lite tests if it's not supported. Patch by Victor\n Stinner.\n","modified":"2026-09-27T18:23:42.538113913Z","published":"2026-09-16T09:45:01Z","related":["CVE-2021-4189","CVE-2025-13462","CVE-2025-4330","CVE-2026-0864","CVE-2026-11940","CVE-2026-11972","CVE-2026-1502","CVE-2026-15308","CVE-2026-15806","CVE-2026-17084","CVE-2026-2297","CVE-2026-3276","CVE-2026-3644","CVE-2026-4224","CVE-2026-4360","CVE-2026-45186","CVE-2026-4519","CVE-2026-4786","CVE-2026-6100","CVE-2026-7210","CVE-2026-72522","CVE-2026-7774","CVE-2026-8328","CVE-2026-9669"],"upstream":["CVE-2021-4189","CVE-2025-13462","CVE-2025-4330","CVE-2026-0864","CVE-2026-11940","CVE-2026-11972","CVE-2026-1502","CVE-2026-15308","CVE-2026-15806","CVE-2026-17084","CVE-2026-2297","CVE-2026-3276","CVE-2026-3644","CVE-2026-4224","CVE-2026-4360","CVE-2026-45186","CVE-2026-4519","CVE-2026-4786","CVE-2026-6100","CVE-2026-7210","CVE-2026-72522","CVE-2026-7774","CVE-2026-8328","CVE-2026-9669"],"references":[{"type":"ADVISORY","url":"https://www.suse.com/support/update/announcement/2026/suse-su-202623743-1/"},{"type":"REPORT","url":"https://bugzilla.suse.com/1259240"},{"type":"REPORT","url":"https://bugzilla.suse.com/1259611"},{"type":"REPORT","url":"https://bugzilla.suse.com/1259734"},{"type":"REPORT","url":"https://bugzilla.suse.com/1259735"},{"type":"REPORT","url":"https://bugzilla.suse.com/1260026"},{"type":"REPORT","url":"https://bugzilla.suse.com/1261969"},{"type":"REPORT","url":"https://bugzilla.suse.com/1262098"},{"type":"REPORT","url":"https://bugzilla.suse.com/1262319"},{"type":"REPORT","url":"https://bugzilla.suse.com/1264962"},{"type":"REPORT","url":"https://bugzilla.suse.com/1265268"},{"type":"REPORT","url":"https://bugzilla.suse.com/1267581"},{"type":"REPORT","url":"https://bugzilla.suse.com/1267821"},{"type":"REPORT","url":"https://bugzilla.suse.com/1267974"},{"type":"REPORT","url":"https://bugzilla.suse.com/1268977"},{"type":"REPORT","url":"https://bugzilla.suse.com/1269066"},{"type":"REPORT","url":"https://bugzilla.suse.com/1269788"},{"type":"REPORT","url":"https://bugzilla.suse.com/1269959"},{"type":"REPORT","url":"https://bugzilla.suse.com/1271192"},{"type":"REPORT","url":"https://bugzilla.suse.com/1276223"},{"type":"REPORT","url":"https://bugzilla.suse.com/1276226"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2021-4189"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2025-13462"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2025-4330"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-0864"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-11940"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-11972"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-1502"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-15308"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-15806"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-17084"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-2297"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-3276"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-3644"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-4224"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-4360"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-45186"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-4519"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-4786"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-6100"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-7210"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-72522"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-7774"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-8328"},{"type":"WEB","url":"https://www.suse.com/security/cve/CVE-2026-9669"}],"affected":[{"package":{"name":"python311","ecosystem":"SUSE:Linux Micro 6.1","purl":"pkg:rpm/suse/python311&distro=SUSE%20Linux%20Micro%206.1"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.11.16-slfo.1.1_1.1"}]}],"ecosystem_specific":{"binaries":[{"python311-curses":"3.11.16-slfo.1.1_1.1","libpython3_11-1_0":"3.11.16-slfo.1.1_1.1","python311":"3.11.16-slfo.1.1_1.1","python311-base":"3.11.16-slfo.1.1_1.1"}]},"database_specific":{"source":"https://ftp.suse.com/pub/projects/security/osv/SUSE-SU-2026:23743-1.json"}},{"package":{"name":"python311-core","ecosystem":"SUSE:Linux Micro 6.1","purl":"pkg:rpm/suse/python311-core&distro=SUSE%20Linux%20Micro%206.1"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.11.16-slfo.1.1_1.1"}]}],"ecosystem_specific":{"binaries":[{"python311-curses":"3.11.16-slfo.1.1_1.1","libpython3_11-1_0":"3.11.16-slfo.1.1_1.1","python311":"3.11.16-slfo.1.1_1.1","python311-base":"3.11.16-slfo.1.1_1.1"}]},"database_specific":{"source":"https://ftp.suse.com/pub/projects/security/osv/SUSE-SU-2026:23743-1.json"}}],"schema_version":"1.9.0"}