CVE-2026-86000: Soup Sieve: Polynomial-time ReDoS (O(n²)) in the `IDENTIFIER` / `VALUE` selector sub-patterns

Published Sep 17, 2026
·
Updated

Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.9, the selector parser in src/soupsieve/cssparser.py defines IDENTIFIER with adjacent quantified groups over overlapping character classes, and VALUE embeds IDENTIFIER for attribute selectors. When an attacker-controlled selector contains a long identifier or unquoted attribute-value run followed by input that makes the overall match fail, the regular expression engine explores quadratically many splits between the overlapping groups. User-controlled selectors can reach this path through soupsieve.compile(), soupsieve.select(), or BeautifulSoup.select(), while applications using only hard-coded selectors are unaffected. The resulting CPU consumption can hold the Python GIL, exhaust application workers, and stall a service; successful plain identifier matches are linear, and the issue does not cause memory corruption or code execution. The issue is fixed in version 2.9.

Affected Software

1 affected component
pypi/soupsieve<2.9

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade soup/soupsieve to a version that resolves this vulnerability.

    Fixed in 2.9

Event History

Sep 17, 2026
CVE Published
via MITRE·03:21 PM
Data Sourced
via MITRE·03:21 PM
DescriptionSeverityWeakness

Frequently Asked Questions

1

Which applications are realistically exposed to this issue?

Applications are exposed when they pass attacker-controlled CSS selectors to soupsieve.compile(), soupsieve.select(), or BeautifulSoup.select(). Applications that use only hard-coded selectors are unaffected.

2

What input is needed to trigger excessive CPU use?

An attacker needs to supply a selector containing a long identifier or an unquoted attribute-value run, followed by input that causes the overall match to fail. Successful plain identifier matches are linear and do not trigger the quadratic behavior.

3

What is the operational impact of a successful attack?

The parser can consume CPU quadratically, hold the Python GIL, exhaust application workers, and stall the service. The issue does not provide memory corruption or code execution.

4

How can this be remediated?

Upgrade soupsieve to version 2.9, which fixes the issue.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203