[CLSA-2026:1788372213] Fix CVE(s): CVE-2026-18503
Type:
security
Severity:
Low
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
CVEs fixed:
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.