Vulnerability GHSA-6655-6qjp-jx7x

High Risk
HIGH RISK
CVSS Score: 7.5
Score Range: 7.0–8.9
High severity vulnerabilities (CVSS 7.0–8.9). Serious vulnerabilities that should be prioritized soon after critical fixes.
2 hours ago
November 13, 2026 at 04:39 PM UTC
Soup Sieve: Exponential ReDoS in selector compilation via \9-run in CSS_ESCAPES/IDENTIFIER
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 and 2.9 and 2.9.1 - 2.9.2 and 2.10 and 3.0 and 3.0.1
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 and 2.9 and 2.9.1 - 2.9.2 and 2.10 and 3.0 and 3.0.1

Summary

Soup Sieve: Exponential ReDoS in selector compilation via \9-run in CSS_ESCAPES/IDENTIFIER

Details

Summary

The IDENTIFIER/CSS_ESCAPES regex (css_parser.py:119-124) exhibits exponential backtracking on a run of ambiguous digit-escapes (\9) in an attribute-name or tag position of an otherwise well-formed selector. It fires at compile time (before the SELECTOR_LIMIT guard) via the public soupsieve.compile() and BeautifulSoup .select().

PoC (verified on soupsieve 2.9.2)

import soupsieve as sv
sv.compile('[a' + '\\9'*26 + '=x]')   # ~57 bytes -> ~10s; ~16x time per +4 chars

Novelty

Distinct from the patched GHSA-836r-... (VALUE regex) and GHSA-2wc2-... (comma-list) advisories, which are fixed in 2.9.2; this is a different regex/vector.

Reachability

CSS selectors are usually developer-controlled, so exposure requires an application that compiles UNTRUSTED selector strings (web-scraping-as-a-service, no-code/query builders, user-defined extraction rules). Where selectors are user-supplied, a ~60-byte string hangs the worker.

Note

This issue was fixed in version 3.0.0, which has been yanked from the PyPI registry. Use versions 3.0.2 and above to upgrade.

Related Vulnerabilities

Other vulnerabilities affecting the same packages

Medium Risk
2 hours ago
Soup Sieve: Uncontrolled recursion in CSS parser lets nested pseudo-class selectors exhaust the Python call stack
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 and 2.9 and 2.9.1 - 2.9.2 and 2.10 and 3.0 and 3.0.1 GHSA-7g44-g9rc-x53w
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 and 2.9 and 2.9.1 - 2.9.2 and 2.10 and 3.0 and 3.0.1 GHSA-7g44-g9rc-x53w
High Risk
18 hours ago
Soup Sieve: Polynomial-time denial of service in the descendant combinator
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 and 2.9 and 2.9.1 - 2.9.2 and 2.10 and 3.0 and 3.0.1 - 3.0.4 GHSA-mmhr-3c5m-f64f
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 and 2.9 and 2.9.1 - 2.9.2 and 2.10 and 3.0 and 3.0.1 - 3.0.4 GHSA-mmhr-3c5m-f64f
Medium Risk
18 hours ago
Soup Sieve: General sibling combinator inside :has() matches untrusted HTML in quadratic time
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 and 2.9 and 2.9.1 - 2.9.2 GHSA-4j63-6c4x-wfg4
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 and 2.9 and 2.9.1 - 2.9.2 GHSA-4j63-6c4x-wfg4
Medium Risk
1 month ago
Soup Sieve: Polynomial-time ReDoS (O(n²)) in the `IDENTIFIER` / `VALUE` selector sub-patterns
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 PYSEC-2026-4170
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 PYSEC-2026-4170
Medium Risk
1 month ago
Soup Sieve: Polynomial-time ReDoS (O(n²)) in the whitespace/comment trimming regex `RE_WS_END` (triggers on VALID selectors)
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 PYSEC-2026-4171
0.4 and 0.5 and 0.5.1 - 0.5.3 and 0.6 and 1.0b1 and 1.0b2 and 1.0 and 1.0.1 - 1.0.2 and 1.1 and 1.2 and 1.2.1 and 1.3 and 1.3.1 and 1.4 and 1.5 and 1.6 and 1.6.1 - 1.6.2 and 1.7 and 1.7.1 - 1.7.3 and 1.8 and 1.9 and 1.9.1 - 1.9.6 and 2.0 and 2.0.1 and 2.1 and 2.2 and 2.2.1 and 2.3 and 2.3.1 - 2.3.2 and 2.3.2.post1 and 2.4 and 2.4.1 and 2.5 and 2.6 and 2.7 and 2.8 and 2.8.1 - 2.8.4 PYSEC-2026-4171
View all vulnerabilities for these packages

Impacted packages

Timeline

Published
2 hours ago
November 13, 2026 at 04:39 PM UTC
Last Modified
2 hours ago
November 13, 2026 at 04:45 PM UTC