Soupsieve
Monthly
Algorithmic-complexity denial of service in Soup Sieve versions prior to 2.9 allows remote attackers to exhaust CPU and stall Python services by supplying a valid CSS selector containing a long internal whitespace run, or a long CSS comment run followed by another token, to soupsieve.compile() or BeautifulSoup.select(). The pre-tokenization trimming step performs quadratic work against the attacker-controlled string, and because the parsing happens in-process it can hold the GIL and starve worker threads, though there is no memory corruption or code execution and no confidentiality or integrity impact (CVSS 5.3, AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L). Applications that only pass hard-coded, static selectors are entirely unaffected, and no public exploit code was identified at time of analysis. Vendor-released patch: 2.9.
Denial of service in Soup Sieve, the CSS selector library used by Beautiful Soup 4, affects all versions prior to 2.9 and is triggered when an application passes attacker-controlled CSS selectors into soupsieve.compile(), soupsieve.select(), or BeautifulSoup.select(). The parser's IDENTIFIER regular expression contains adjacent quantified groups over overlapping character classes, so a long identifier or unquoted attribute-value run followed by input that makes the overall match fail - upstream's own regression test uses a selector such as "[a=" plus 12,000 'a' characters - forces the regex engine to explore quadratically many splits, burning CPU while holding the Python GIL and stalling workers. The vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L (unauthenticated remote, low availability impact only), applications that use only hard-coded developer selectors are completely unaffected, the vendor has released the fix in 2.9, and no public exploit or active exploitation has been identified at time of analysis.
Algorithmic-complexity denial of service in Soup Sieve versions prior to 2.9 allows remote attackers to exhaust CPU and stall Python services by supplying a valid CSS selector containing a long internal whitespace run, or a long CSS comment run followed by another token, to soupsieve.compile() or BeautifulSoup.select(). The pre-tokenization trimming step performs quadratic work against the attacker-controlled string, and because the parsing happens in-process it can hold the GIL and starve worker threads, though there is no memory corruption or code execution and no confidentiality or integrity impact (CVSS 5.3, AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L). Applications that only pass hard-coded, static selectors are entirely unaffected, and no public exploit code was identified at time of analysis. Vendor-released patch: 2.9.
Denial of service in Soup Sieve, the CSS selector library used by Beautiful Soup 4, affects all versions prior to 2.9 and is triggered when an application passes attacker-controlled CSS selectors into soupsieve.compile(), soupsieve.select(), or BeautifulSoup.select(). The parser's IDENTIFIER regular expression contains adjacent quantified groups over overlapping character classes, so a long identifier or unquoted attribute-value run followed by input that makes the overall match fail - upstream's own regression test uses a selector such as "[a=" plus 12,000 'a' characters - forces the regex engine to explore quadratically many splits, burning CPU while holding the Python GIL and stalling workers. The vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L (unauthenticated remote, low availability impact only), applications that use only hard-coded developer selectors are completely unaffected, the vendor has released the fix in 2.9, and no public exploit or active exploitation has been identified at time of analysis.