CVE-2026-49476
Soup Sieve: Memory Exhaustion via Large Comma-Separated Selector Lists in soupsieve
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve allocates unbounded memory when compiling large comma-separated selector lists, allowing an attacker who can supply a crafted selector string to soupsieve.compile() or Beautiful Soup .select() / .select_one() to allocate hundreds of megabytes of heap memory from a relatively small input and cause denial of service. This issue is fixed in version 2.8.4.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.5
Soup Sieve: Memory Exhaustion via Large Comma-Separated Selector Lists in soupsieve
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve allocates unbounded memory when compiling large comma-separated selector lists, allowing an attacker who can supply a crafted selector string to soupsieve.compile() or Beautiful Soup .select() / .select_one() to allocate hundreds of megabytes of heap memory from a relatively small input and cause denial of service. This issue is fixed in version 2.8.4.
- Record
CVE-2026-49476- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-770
- Updated
- 2026-11-02
EUVDEUVD-2026-44539
7.5
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve allocates unbounded memory when compiling large comma-separated selector lists, allowing an attacker who can supply a crafted selector string to soupsieve.compile() or Beautiful Soup .select() / .select_one() to allocate hundreds of megabytes of heap memory from a relatively small input and cause denial of service. This issue is fixed in version 2.8.4.
- Record
EUVD-2026-44539- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-2wc2-fm75-p42x
7.5
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
Summary
The 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 soupsieve.compile() or Beautiful Soup's .select() / .select_one() can cause the application to allocate hundreds of megabytes of heap memory from a relatively small input, leading to memory exhaustion and denial of service.
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**.
Details
Affected code: soupsieve/css_parser.py, lines ~204, 925, 1106
The soupsieve CSS parser splits comma-separated selector lists and creates one CSSSelector object per list item. Each CSSSelector object contains parsed selector data structures including SelectorList, Selector, and associated tag/attribute/pseudo-class metadata.
When a selector string such as a,a,a,... (with 250,000 comma-separated items) is passed to sv.compile(), the parser:
- Tokenises the entire string and identifies each comma-delimited segment (line ~1106)
- Parses each segment into a full
Selectorobject with all associated metadata (line ~925) - Stores all parsed selectors in a
SelectorList(line ~204)
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 a expands into a complex object graph.
Attack surface: Any application that passes user-supplied CSS selectors to soupsieve.compile() or Beautiful Soup's .select() / .select_one().
Proof of Concept
import tracemalloc
import soupsieve as sv
tracemalloc.start()
# Build a 500 KB selector string: "a,a,a,...,a" (250,000 items)
count = 250_000
selector = ",".join("a" for _ in range(count))
print(f"Selector string size: {len(selector):,} bytes ({len(selector) / 1024:.0f} KB)")
# Compile the selector — this allocates ~244 MB
compiled = sv.compile(selector)
current, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()
print(f"Compiled selector count: {len(compiled.selectors):,}")
print(f"Current memory: {current / 1024 / 1024:.1f} MB")
print(f"Peak memory: {peak / 1024 / 1024:.1f} MB")
print(f"Amplification ratio: {peak / len(selector):.0f}x")
# Expected output:
# Selector string size: 499,999 bytes (488 KB)
# Compiled selector count: 250,000
# Current memory: ~244 MB
# Peak memory: ~244 MB
# Amplification ratio: ~488x
Impact
Severity: High
An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
- OOM kills in containerised deployments (Kubernetes pods, Docker containers) with memory limits
- Swap thrashing on bare-metal servers, degrading performance for all co-located processes
- Process termination via Python's
MemoryErrorexception if the system runs out of addressable memory
| 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…
- Record
GHSA-2wc2-fm75-p42x- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-770
- Updated
- 2026-11-02
NVD
7.5
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve allocates unbounded memory when compiling large comma-separated selector lists, allowing an attacker who can supply a crafted selector string to soupsieve.compile() or Beautiful Soup .select() / .select_one() to allocate hundreds of megabytes of heap memory from a relatively small input and cause denial of service. This issue is fixed in version 2.8.4.
- Record
CVE-2026-49476- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-770
- Updated
- 2026-11-02
OSV
7.5
Soup Sieve: Memory Exhaustion via Large Comma-Separated Selector Lists in soupsieve
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve allocates unbounded memory when compiling large comma-separated selector lists, allowing an attacker who can supply a crafted selector string to soupsieve.compile() or Beautiful Soup .select() / .select_one() to allocate hundreds of megabytes of heap memory from a relatively small input and cause denial of service. This issue is fixed in version 2.8.4.
- Record
CVE-2026-49476- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-770
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-49476
7.5
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve allocates unbounded memory when compiling large comma-separated selector lists, allowing an attacker who can supply a crafted selector string to soupsieve.compile() or Beautiful Soup .select() / .select_one() to allocate hundreds of megabytes of heap memory from a relatively small input and cause denial of service. This issue is fixed in version 2.8.4.
- Record
DEBIAN-CVE-2026-49476- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Show 14 moreShow less
OSVGHSA-2wc2-fm75-p42x
7.5
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
Summary
The 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 soupsieve.compile() or Beautiful Soup's .select() / .select_one() can cause the application to allocate hundreds of megabytes of heap memory from a relatively small input, leading to memory exhaustion and denial of service.
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**.
Details
Affected code: soupsieve/css_parser.py, lines ~204, 925, 1106
The soupsieve CSS parser splits comma-separated selector lists and creates one CSSSelector object per list item. Each CSSSelector object contains parsed selector data structures including SelectorList, Selector, and associated tag/attribute/pseudo-class metadata.
When a selector string such as a,a,a,... (with 250,000 comma-separated items) is passed to sv.compile(), the parser:
- Tokenises the entire string and identifies each comma-delimited segment (line ~1106)
- Parses each segment into a full
Selectorobject with all associated metadata (line ~925) - Stores all parsed selectors in a
SelectorList(line ~204)
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 a expands into a complex object graph.
Attack surface: Any application that passes user-supplied CSS selectors to soupsieve.compile() or Beautiful Soup's .select() / .select_one().
Proof of Concept
import tracemalloc
import soupsieve as sv
tracemalloc.start()
# Build a 500 KB selector string: "a,a,a,...,a" (250,000 items)
count = 250_000
selector = ",".join("a" for _ in range(count))
print(f"Selector string size: {len(selector):,} bytes ({len(selector) / 1024:.0f} KB)")
# Compile the selector — this allocates ~244 MB
compiled = sv.compile(selector)
current, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()
print(f"Compiled selector count: {len(compiled.selectors):,}")
print(f"Current memory: {current / 1024 / 1024:.1f} MB")
print(f"Peak memory: {peak / 1024 / 1024:.1f} MB")
print(f"Amplification ratio: {peak / len(selector):.0f}x")
# Expected output:
# Selector string size: 499,999 bytes (488 KB)
# Compiled selector count: 250,000
# Current memory: ~244 MB
# Peak memory: ~244 MB
# Amplification ratio: ~488x
Impact
Severity: High
An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
- OOM kills in containerised deployments (Kubernetes pods, Docker containers) with memory limits
- Swap thrashing on bare-metal servers, degrading performance for all co-located processes
- Process termination via Python's
MemoryErrorexception if the system runs out of addressable memory
| 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…
- Record
GHSA-2wc2-fm75-p42x- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-770
- Updated
- 2026-11-02
OSVOESA-2026-3619
7.5
python-soupsieve security update
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. It aims to provide selecting, matching, and filtering using modern CSS selectors. Soup Sieve currently provides selectors from the CSS level 1 specifications up through the latest CSS level 4 drafts and beyond (though some are not yet implemented).
Security Fix(es):
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve allocates unbounded memory when compiling large comma-separated selector lists, allowing an attacker who can supply a crafted selector string to soupsieve.compile() or Beautiful Soup .select() / .select_one() to allocate hundreds of megabytes of heap memory from a relatively small input and cause denial of service. This issue is fixed in version 2.8.4.(CVE-2026-49476)
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve contains a regular expression vulnerable to catastrophic backtracking when processing an attribute selector with an unterminated quoted value in soupsieve/css_parser.py, allowing an attacker who can supply untrusted CSS selector strings to soupsieve.compile() or Beautiful Soup .select() / .select_one() to cause CPU exhaustion and denial of service. This issue is fixed in version 2.8.4.(CVE-2026-49477)
- Record
OESA-2026-3619- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVOESA-2026-3620
7.5
python-soupsieve security update
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. It aims to provide selecting, matching, and filtering using modern CSS selectors. Soup Sieve currently provides selectors from the CSS level 1 specifications up through the latest CSS level 4 drafts and beyond (though some are not yet implemented).
Security Fix(es):
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve allocates unbounded memory when compiling large comma-separated selector lists, allowing an attacker who can supply a crafted selector string to soupsieve.compile() or Beautiful Soup .select() / .select_one() to allocate hundreds of megabytes of heap memory from a relatively small input and cause denial of service. This issue is fixed in version 2.8.4.(CVE-2026-49476)
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve contains a regular expression vulnerable to catastrophic backtracking when processing an attribute selector with an unterminated quoted value in soupsieve/css_parser.py, allowing an attacker who can supply untrusted CSS selector strings to soupsieve.compile() or Beautiful Soup .select() / .select_one() to cause CPU exhaustion and denial of service. This issue is fixed in version 2.8.4.(CVE-2026-49477)
- Record
OESA-2026-3620- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVOESA-2026-3621
7.5
python-soupsieve security update
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. It aims to provide selecting, matching, and filtering using modern CSS selectors. Soup Sieve currently provides selectors from the CSS level 1 specifications up through the latest CSS level 4 drafts and beyond (though some are not yet implemented).
Security Fix(es):
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve allocates unbounded memory when compiling large comma-separated selector lists, allowing an attacker who can supply a crafted selector string to soupsieve.compile() or Beautiful Soup .select() / .select_one() to allocate hundreds of megabytes of heap memory from a relatively small input and cause denial of service. This issue is fixed in version 2.8.4.(CVE-2026-49476)
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve contains a regular expression vulnerable to catastrophic backtracking when processing an attribute selector with an unterminated quoted value in soupsieve/css_parser.py, allowing an attacker who can supply untrusted CSS selector strings to soupsieve.compile() or Beautiful Soup .select() / .select_one() to cause CPU exhaustion and denial of service. This issue is fixed in version 2.8.4.(CVE-2026-49477)
- Record
OESA-2026-3621- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVOESA-2026-3762
7.5
python-soupsieve security update
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. It aims to provide selecting, matching, and filtering using modern CSS selectors. Soup Sieve currently provides selectors from the CSS level 1 specifications up through the latest CSS level 4 drafts and beyond (though some are not yet implemented).
Security Fix(es):
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve allocates unbounded memory when compiling large comma-separated selector lists, allowing an attacker who can supply a crafted selector string to soupsieve.compile() or Beautiful Soup .select() / .select_one() to allocate hundreds of megabytes of heap memory from a relatively small input and cause denial of service. This issue is fixed in version 2.8.4.(CVE-2026-49476)
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve contains a regular expression vulnerable to catastrophic backtracking when processing an attribute selector with an unterminated quoted value in soupsieve/css_parser.py, allowing an attacker who can supply untrusted CSS selector strings to soupsieve.compile() or Beautiful Soup .select() / .select_one() to cause CPU exhaustion and denial of service. This issue is fixed in version 2.8.4.(CVE-2026-49477)
- Record
OESA-2026-3762- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVPYSEC-2026-3071
7.5
Soup Sieve has Memory Exhaustion via Large Comma-Separated Selector Lists
Summary
The 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 soupsieve.compile() or Beautiful Soup's .select() / .select_one() can cause the application to allocate hundreds of megabytes of heap memory from a relatively small input, leading to memory exhaustion and denial of service.
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**.
Details
Affected code: soupsieve/css_parser.py, lines ~204, 925, 1106
The soupsieve CSS parser splits comma-separated selector lists and creates one CSSSelector object per list item. Each CSSSelector object contains parsed selector data structures including SelectorList, Selector, and associated tag/attribute/pseudo-class metadata.
When a selector string such as a,a,a,... (with 250,000 comma-separated items) is passed to sv.compile(), the parser:
- Tokenises the entire string and identifies each comma-delimited segment (line ~1106)
- Parses each segment into a full
Selectorobject with all associated metadata (line ~925) - Stores all parsed selectors in a
SelectorList(line ~204)
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 a expands into a complex object graph.
Attack surface: Any application that passes user-supplied CSS selectors to soupsieve.compile() or Beautiful Soup's .select() / .select_one().
Proof of Concept
import tracemalloc
import soupsieve as sv
tracemalloc.start()
# Build a 500 KB selector string: "a,a,a,...,a" (250,000 items)
count = 250_000
selector = ",".join("a" for _ in range(count))
print(f"Selector string size: {len(selector):,} bytes ({len(selector) / 1024:.0f} KB)")
# Compile the selector — this allocates ~244 MB
compiled = sv.compile(selector)
current, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()
print(f"Compiled selector count: {len(compiled.selectors):,}")
print(f"Current memory: {current / 1024 / 1024:.1f} MB")
print(f"Peak memory: {peak / 1024 / 1024:.1f} MB")
print(f"Amplification ratio: {peak / len(selector):.0f}x")
# Expected output:
# Selector string size: 499,999 bytes (488 KB)
# Compiled selector count: 250,000
# Current memory: ~244 MB
# Peak memory: ~244 MB
# Amplification ratio: ~488x
Impact
Severity: High
An attacker can exhaust available memory on any server-side Python application that compiles user-supplied CSS selectors via soupsieve. This can cause:
- OOM kills in containerised deployments (Kubernetes pods, Docker containers) with memory limits
- Swap thrashing on bare-metal servers, degrading performance for all co-located processes
- Process termination via Python's
MemoryErrorexception if the system runs out of addressable memory
| 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…
- Record
PYSEC-2026-3071- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVRHSA-2026:23992
7.5
Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update
- Record
RHSA-2026:23992- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVRHSA-2026:34119
7.5
Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update
- Record
RHSA-2026:34119- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-49476
7.5
Soup Sieve is a CSS selector library designed to be used with Beautiful Soup 4. Prior to 2.8.4, the CSS selector parser in soupsieve allocates unbounded memory when compiling large comma-separated selector lists, allowing an attacker who can supply a crafted selector string to soupsieve.compile() or Beautiful Soup .select() / .select_one() to allocate hundreds of megabytes of heap memory from a relatively small input and cause denial of service. This issue is fixed in version 2.8.4.
- Record
UBUNTU-CVE-2026-49476- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVopenSUSE-SU-2026:21342-1 No score
Security update for python-soupsieve
This update for python-soupsieve fixes the following issues
- CVE-2026-49476: Memory Exhaustion via Large Comma-Separated Selector Lists (bsc#1271187).
- CVE-2026-49477: Regular Expression Denial of Service (ReDoS) via Selector Parser (bsc#1271188).
- Record
openSUSE-SU-2026:21342-1- Updated
- 2026-11-02
OSVROOT-APP-PYPI-CVE-2026-49476 No score
CVE-2026-49476 in rootio-soupsieve - Patched by Root
Root has patched CVE-2026-49476 in the rootio-soupsieve package for Root:PyPI. Multiple fixed versions available.
- Record
ROOT-APP-PYPI-CVE-2026-49476- Updated
- 2026-11-02
OSVSUSE-SU-2026:22660-1 No score
Security update for python-soupsieve
This update for python-soupsieve fixes the following issues
- CVE-2026-49476: Memory Exhaustion via Large Comma-Separated Selector Lists (bsc#1271187).
- CVE-2026-49477: Regular Expression Denial of Service (ReDoS) via Selector Parser (bsc#1271188).
- Record
SUSE-SU-2026:22660-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:3239-1 No score
Security update for python-soupsieve
This update for python-soupsieve fixes the following issues
- CVE-2026-49476: Memory Exhaustion via Large Comma-Separated Selector Lists (bsc#1271187).
- CVE-2026-49477: Regular Expression Denial of Service (ReDoS) via Selector Parser (bsc#1271188).
- Record
SUSE-SU-2026:3239-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:3240-1 No score
Security update for python-soupsieve
This update for python-soupsieve fixes the following issues
- CVE-2026-49476: Memory Exhaustion via Large Comma-Separated Selector Lists (bsc#1271187).
- CVE-2026-49477: Regular Expression Denial of Service (ReDoS) via Selector Parser (bsc#1271188).
- Record
SUSE-SU-2026:3240-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
soupsievePyPI |
through 2.8.3 | 2.8.4 |
soupsieveDebian:12 |
All versions, plus listed versions 2.3.2-12.4-12.4.1-12.4.1-22.5-1 Show 6 moreShow less2.6-12.7-12.7-22.8.1-12.8.3-12.8.4-1 |
None known |
soupsieveDebian:13 |
All versions, plus listed versions 2.7-12.7-22.8.1-12.8.3-12.8.4-1 |
None known |
soupsieveDebian:14 |
before 2.8.4-1, plus listed versions 2.7-12.7-22.8.1-12.8.3-1 |
2.8.4-1 |
soupsievePyPI |
before 2.8.4, plus listed versions 0.40.50.5.10.5.20.5.3 Show 45 moreShow less0.61.01.0.11.0.21.0b11.0b21.11.21.2.11.31.3.11.41.51.61.6.11.6.21.71.7.11.7.21.7.31.81.91.9.11.9.21.9.31.9.41.9.51.9.62.02.0.12.12.22.2.12.32.3.12.3.22.3.2.post12.42.4.12.52.62.72.82.8.12.8.2 |
2.8.4 |
python-soupsieveopenEuler:22.03-LTS-SP4 From an advisory covering 2 CVEs |
before 2.2-3.oe2203sp4 | 2.2-3.oe2203sp4 |
python-soupsieveopenEuler:24.03-LTS-SP1 From an advisory covering 2 CVEs |
before 2.4-2.oe2403sp1 | 2.4-2.oe2403sp1 |
python-soupsieveopenEuler:24.03-LTS-SP3 From an advisory covering 2 CVEs |
before 2.4-2.oe2403sp3 | 2.4-2.oe2403sp3 |
python-soupsieveopenEuler:24.03-LTS-SP4 From an advisory covering 2 CVEs |
before 2.4-2.oe2403sp4 | 2.4-2.oe2403sp4 |
python-rpds-pyRed Hat:hummingbird:1 From an advisory covering 4 CVEs |
before 0:2026.6.3-1.hum1 | 0:2026.6.3-1.hum1 |
Show 24 moreShow less
| Package | Affected | Fixed |
|---|---|---|
python3-rpds-pyRed Hat:hummingbird:1 From an advisory covering 4 CVEs |
before 0:2026.6.3-1.hum1 | 0:2026.6.3-1.hum1 |
rootio-soupsieveRoot:PyPI |
before 2.8.3+root.io.1 | 2.8.3+root.io.12.8.1+root.io.12.6+root.io.12.8.1+root.io.22.7+root.io.1 |
python-soupsieveSUSE:Linux Enterprise Server 16.0 From an advisory covering 2 CVEs |
before 2.6-160000.4.1 | 2.6-160000.4.1 |
python-soupsieveSUSE:Linux Enterprise Server for SAP applications 16.0 From an advisory covering 2 CVEs |
before 2.6-160000.4.1 | 2.6-160000.4.1 |
python-soupsieveSUSE:Linux Enterprise Module for Basesystem 15 SP7 From an advisory covering 2 CVEs |
before 1.9.5-150200.3.3.1 | 1.9.5-150200.3.3.1 |
python-soupsieveSUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS From an advisory covering 2 CVEs |
before 1.9.5-150200.3.3.1 | 1.9.5-150200.3.3.1 |
python-soupsieveSUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS From an advisory covering 2 CVEs |
before 1.9.5-150200.3.3.1 | 1.9.5-150200.3.3.1 |
python-soupsieveSUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS From an advisory covering 2 CVEs |
before 1.9.5-150200.3.3.1 | 1.9.5-150200.3.3.1 |
python-soupsieveSUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS From an advisory covering 2 CVEs |
before 1.9.5-150200.3.3.1 | 1.9.5-150200.3.3.1 |
python-soupsieveSUSE:Linux Enterprise Server 15 SP4-LTSS From an advisory covering 2 CVEs |
before 1.9.5-150200.3.3.1 | 1.9.5-150200.3.3.1 |
python-soupsieveSUSE:Linux Enterprise Server 15 SP5-LTSS From an advisory covering 2 CVEs |
before 1.9.5-150200.3.3.1 | 1.9.5-150200.3.3.1 |
python-soupsieveSUSE:Linux Enterprise Server 15 SP6-LTSS From an advisory covering 2 CVEs |
before 1.9.5-150200.3.3.1 | 1.9.5-150200.3.3.1 |
python-soupsieveSUSE:Linux Enterprise Server for SAP Applications 15 SP4 From an advisory covering 2 CVEs |
before 1.9.5-150200.3.3.1 | 1.9.5-150200.3.3.1 |
python-soupsieveSUSE:Linux Enterprise Server for SAP Applications 15 SP5 From an advisory covering 2 CVEs |
before 1.9.5-150200.3.3.1 | 1.9.5-150200.3.3.1 |
python-soupsieveSUSE:Linux Enterprise Server for SAP Applications 15 SP6 From an advisory covering 2 CVEs |
before 1.9.5-150200.3.3.1 | 1.9.5-150200.3.3.1 |
python-soupsieveSUSE:Linux Enterprise Module for Python 3 15 SP7 From an advisory covering 2 CVEs |
before 2.5-150600.3.3.1 | 2.5-150600.3.3.1 |
python-soupsieveSUSE:Linux Enterprise Server 15 SP6-LTSS From an advisory covering 2 CVEs |
before 2.5-150600.3.3.1 | 2.5-150600.3.3.1 |
python-soupsieveSUSE:Linux Enterprise Server for SAP Applications 15 SP6 From an advisory covering 2 CVEs |
before 2.5-150600.3.3.1 | 2.5-150600.3.3.1 |
soupsieveUbuntu:20.04:LTS |
All versions, plus listed versions 1.9.2+dfsg-2ubuntu11.9.4+dfsg-11.9.5+dfsg-1 |
None known |
soupsieveUbuntu:22.04:LTS |
All versions, plus listed versions 2.2.1-22.3-12.3.1-1 |
None known |
soupsieveUbuntu:24.04:LTS |
All versions, plus listed versions 2.4.1-22.5-1 |
None known |
soupsieveUbuntu:26.10 |
All versions, plus listed versions 2.8.3-12.8.4-1 |
None known |
soupsieveUbuntu:26.04:LTS |
All versions, plus listed versions 2.7-22.8.1-12.8.3-1 |
None known |
python-soupsieveopenSUSE:Leap 16.0 From an advisory covering 2 CVEs |
before 2.6-160000.4.1 | 2.6-160000.4.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| affected | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-49476 is a high vulnerability (CVSS 7.5) in Facelessuser Soup Sieve, published July 9, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.64%, the 51st percentile. Fixed in soupsieve 2.8.4.
References
github.com/facelessuser/soupsieve/security/advisories/GHSA-2wc2-fm75-p42x
github.com/facelessuser/soupsieve/commit/28108ab805818c832d9568142a99844fd95a0d39
github.com/facelessuser/soupsieve/releases/tag/2.8.4
github.com/advisories/GHSA-2wc2-fm75-p42x
github.com/CVEProject/cvelistV5/tree/main/cves/2026/49xxx/CVE-2026-49476.json
nvd.nist.gov/vuln/detail/CVE-2026-49476
Show 41 moreShow less
security-tracker.debian.org/tracker/CVE-2026-49476
github.com/facelessuser/soupsieve
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3619
nvd.nist.gov/vuln/detail/CVE-2026-49477
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3620
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3621
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3762
pypi.org/project/soupsieve
access.redhat.com/errata/RHSA-2026:23992
images.redhat.com
access.redhat.com/security/cve/CVE-2026-49477
access.redhat.com/security/updates/classification
access.redhat.com/security/cve/CVE-2026-49476
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_23992.json
bugzilla.redhat.com/show_bug.cgi?id=2500715
cve.org/CVERecord?id=CVE-2026-49476
bugzilla.redhat.com/show_bug.cgi?id=2500752
cve.org/CVERecord?id=CVE-2026-49477
github.com/facelessuser/soupsieve/commit/eb4397618709186c109400448c6043b728217dc3
github.com/facelessuser/soupsieve/security/advisories/GHSA-836r-79rf-4m37
access.redhat.com/errata/RHSA-2026:34119
access.redhat.com/security/cve/CVE-2026-45409
access.redhat.com/security/cve/CVE-2026-44431
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_34119.json
bugzilla.redhat.com/show_bug.cgi?id=2477167
cve.org/CVERecord?id=CVE-2026-44431
nvd.nist.gov/vuln/detail/CVE-2026-44431
github.com/urllib3/urllib3/security/advisories/GHSA-qccp-gfcp-xxvc
bugzilla.redhat.com/show_bug.cgi?id=2485616
cve.org/CVERecord?id=CVE-2026-45409
nvd.nist.gov/vuln/detail/CVE-2026-45409
github.com/kjd/idna/security/advisories/GHSA-65pc-fj4g-8rjx
suse.com/support/update/announcement/2026/suse-su-202622660-1
bugzilla.suse.com/1271187
bugzilla.suse.com/1271188
suse.com/security/cve/CVE-2026-49476
suse.com/security/cve/CVE-2026-49477
suse.com/support/update/announcement/2026/suse-su-20263239-1
bugzilla.suse.com/1256316
suse.com/support/update/announcement/2026/suse-su-20263240-1
ubuntu.com/security/CVE-2026-49476
Left out here: 1 version and the rest of 3 source descriptions. The JSON record has them.