soupsieve
A modern CSS selector implementation for BeautifulSoup
Activity
- Latest release
- 1mo ago
- Total releases
- 55
- Cadence
- ~16 days
- Last 12 months
- 7
Reach
- Stars
- 267
Details
- License
- MIT
- First release
- Dec 08, 2018
| Version | Released | |
|---|---|---|
2.9.2
patch
| ||
2.9.1
patch
| ||
2.9
minor
| ||
2.8.4
patch
| ||
2.8.3
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.8.2
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.8.1
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.8
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.7
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.6
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.5
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.4.1
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.4
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.3.2.post1
pre
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.3.2
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.3.1
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.3
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.2.1
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.2
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.1
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.0.1
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.9.6
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
2.0
major
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.9.5
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.9.4
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.9.3
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.9.2
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.9.1
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.9
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.8
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.7.3
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.7.2
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.7.1
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.7
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.6.2
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.6.1
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.6
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.5
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.4
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.3.1
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.3
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.2.1
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.2
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.1
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.0.2
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.0.1
patch
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.0
major
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.0b2
pre
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
1.0b1
pre
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev | ||
0.6
minor
2 CVEs
CVE-2026-49477
PYSEC-2026-3072
GHSA-836r-79rf-4m37
Jul 13, 2026
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) contains a regular expression vulnerable to catastrophic backtracking. When processing an attribute selector with an unterminated quoted value, the To be completely transparent, AI tools helped surface this issue. However, this was independently reproduced and carefully validated. Any application that passes untrusted CSS selector strings to DetailsAffected code: The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings (
When an attribute selector contains an unterminated quoted value - e.g., Root cause: The regex pattern does not anchor or guard against the case where a quoted string is never terminated. The overlapping character classes across alternation branches create exponential backtracking when the quoted-string branch fails on long input. Key characteristics:
Proof of Concept
Safe testing variant with timeout:
ImpactSeverity: High An attacker can cause CPU exhaustion on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. The attack is particularly dangerous because:
| Parameter | Value | |---|---| | Input size | 300 bytes | | CPU time consumed | >3 seconds (exponential with payload length) | | Memory consumed | Negligible (CPU-only attack) | | Authentication required | None | | User interaction required | None | Deployment impact: In threaded or async web applications, a single malicious request blocks a worker thread for the duration of the backtracking. An attacker can submit multiple concurrent requests to exhaust all available workers, causing complete service denial. The small payload size makes the attack easy to deliver and difficult to detect via request size limits. Downstream exposure: soupsieve is an automatic dependency of CreditThe vulnerability was discovered by a security research team from the University of Sydney, whose focus is detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49476
PYSEC-2026-3071
GHSA-2wc2-fm75-p42x
Jul 13, 2026
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe CSS selector parser in soupsieve (the CSS selector engine for Beautiful Soup 4) allocates unbounded memory when compiling large comma-separated selector lists. An attacker who can supply a crafted CSS selector string to To be completely transparent, AI tools helped surface this issue. However, it was independently reproduced and carefully validated. Researchers follow responsible disclosure practices and originally shared this report privately. A 500 KB selector string triggers allocation of approximately 244 MB of heap memory - a 488x— amplification ratio**. DetailsAffected code: The soupsieve CSS parser splits comma-separated selector lists and creates one When a selector string such as
Root cause: No limit is enforced on the number of selectors in a comma-separated list. The parser will attempt to parse and store an arbitrary number of selectors, with each selector object consuming approximately 976 bytes of heap memory. The total allocation scales linearly with the number of list items, but the amplification ratio (output memory / input bytes) is extremely high because each single-character selector like Attack surface: Any application that passes user-supplied CSS selectors to Proof of Concept
ImpactSeverity: High An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
| Parameter | Value | |---|---| | Input size | ~500 KB selector string | | Memory allocated | ~244 MB | | Amplification ratio | ~488× | | Per-object overhead | ~976 bytes per selector | | Authentication required | None | | User interaction required | None | Scalability of attack: The memory allocation scales linearly - doubling the selector count doubles memory usage. An attacker can tune the payload to exactly exhaust a target's memory limits. Multiple concurrent requests multiply the effect. Downstream exposure: soupsieve is an automatic dependency of CreditDiscovered by a security research team from the University of Sydney, focused on detecting open source software vulnerabilities. Liyi Zhou: https://lzhou1110.github.io/ Ziyue Wang: https://zyy0530.github.io/ Strick: https://str1ckl4nd.github.io/ Maurice: https://maurice.busystar.org/ Chenchen Yu: https://7thparkk.github.io/ Affected versions
0.4
0.5
0.5.1
0.5.2
0.5.3
0.6
1.0
1.0.1
1.0.2
1.0b1
1.0b2
1.1
+ 39 more Show less
1.2
1.2.1
1.3
1.3.1
1.4
1.5
1.6
1.6.1
1.6.2
1.7
1.7.1
1.7.2
1.7.3
1.8
1.9
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
2.0
2.0.1
2.1
2.2
2.2.1
2.3
2.3.1
2.3.2
2.3.2.post1
2.4
2.4.1
2.5
2.6
2.7
2.8
2.8.1
2.8.2
2.8.3
Fixed in
2.8.4
References Updated Jul 13, 2026 · Source: OSV.dev |