Release date:
2026-09-02 18:03:44 UTC
Description:
* SECURITY UPDATE: CPU denial-of-service in csv.Sniffer. Two independent
regexes in Sniffer._guess_quote_and_delimiter() ran in super-linear time
on samples reachable from the public csv.Sniffer.sniff() API (CWE-1176,
algorithmic complexity). The quoted-field probe matched a field body with
a lazy ".*?" under re.DOTALL, so a closing quote not followed by a
delimiter was retried against every later quote in the sample: quadratic.
The doubled-quote probe dq_regexp was unanchored, rescanned leading
whitespace and ran even when no delimiter had been found, which is
exponential on a sample carrying a run of quote characters.
- debian/patches/CVE-2026-18503.patch: backport of cpython 19e5024518
(gh-109638, GH-154868) and fd78b565 (gh-98820, GH-154867), both in
their upstream 3.10-branch form. Both commits are part of Python
3.10.21, the release the CVE record names as fixing the "0 to <
3.10.21" range, and gh-98820 alone leaves the doubled-quote probe
exponential: with it applied on its own, sniff() on
'"",'*100 + '"'*100 + '0' + '"'*100 + '0', on '"a"\n' + ' '*100000
with delimiters=',;', and on '"a" "b"\n' + ' '*100000 each still runs
unbounded inside a single C-level re call. Field bodies are now matched
by unrolled, unambiguous loops that cannot backtrack, the doubled-quote
probe is anchored on whole fields and skipped when no delimiter was
found, and sniff() normalises CRLF and CR to LF first so the probe's
"$" means end of record. The 3.10 commits are used rather than the
3.11+ ones, which express the same fix with a possessive quantifier
that Python 3.8's re module does not support.
- CVE-2026-18503
Updated packages:
-
alt-python38_3.8.20-28_amd64.deb
sha:15334ee100280f7e1a42106815faeb142765134c
-
alt-python38-debug_3.8.20-28_amd64.deb
sha:6d7b606d2600fded2fae1b78f6c940e04d11b399
-
alt-python38-devel_3.8.20-28_amd64.deb
sha:e2d5db88a25717dda00ab37af2d05918b1c15916
-
alt-python38-idle_3.8.20-28_amd64.deb
sha:1d44ba2161d986c0ed5e4ca179e4176ad955eca1
-
alt-python38-libs_3.8.20-28_amd64.deb
sha:7c420374eaf83407345992bdaab2c70d0de2c818
-
alt-python38-test_3.8.20-28_amd64.deb
sha:47b55b719097d8ac2cad9a01f8f9435930a5c3fd
-
alt-python38-tkinter_3.8.20-28_amd64.deb
sha:8c67bad9f73f23a9a3115e9ae83de1e4fae307ea
-
alt-python38_3.8.20-28_arm64.deb
sha:4fb1800c85d9acc2d932070b11cbea313857c3a5
-
alt-python38-debug_3.8.20-28_arm64.deb
sha:261bc9b36527777f2a3cc5bb6d64eeec5a7bda20
-
alt-python38-devel_3.8.20-28_arm64.deb
sha:aeb21bbeed6268d0f30f8021b15387edfd7956fa
-
alt-python38-idle_3.8.20-28_arm64.deb
sha:0fa2f808cd1bb47df80c7f589ae89c436bdab50b
-
alt-python38-libs_3.8.20-28_arm64.deb
sha:7d4f957b02bb534b5c6eb8444fb1bb46cec7676e
-
alt-python38-test_3.8.20-28_arm64.deb
sha:387783066f8c7b0de557d89196cd9a2a6f29951e
-
alt-python38-tkinter_3.8.20-28_arm64.deb
sha:aef36affd0f99c5a0da040c8cf4ac3f2864fe485
Notes:
This page is generated automatically and has not been checked for errors. For clarification or
corrections please contact the
CloudLinux Packaging Team.