CVE-2020-29651 Overview
A denial of service vulnerability exists in the py.path.svnwc component of py (also known as python-py) through version 1.9.0. This Regular Expression Denial of Service (ReDoS) vulnerability allows attackers to cause a compute-time denial of service attack by supplying malicious input to the blame functionality. The vulnerability exploits inefficient regular expression patterns that can lead to catastrophic backtracking when processing specially crafted input.
Critical Impact
Attackers can exploit this ReDoS vulnerability to cause service disruptions by forcing excessive CPU consumption when the vulnerable blame functionality processes malicious input, potentially rendering affected applications unresponsive.
Affected Products
- pytest py (through version 1.9.0)
- Fedora 32 and Fedora 33
- Oracle ZFS Storage Appliance Kit 8.8
Discovery Timeline
- 2020-12-09 - CVE CVE-2020-29651 published to NVD
- 2025-11-03 - Last updated in NVD database
Technical Details for CVE-2020-29651
Vulnerability Analysis
This vulnerability is a Regular Expression Denial of Service (ReDoS) that affects the py.path.svnwc component in the py library. The root issue lies in the blame functionality, which uses regular expressions to parse SVN blame output. When processing specially crafted input strings, the regex engine enters a state of catastrophic backtracking, consuming excessive CPU cycles and potentially hanging the application.
ReDoS vulnerabilities occur when a regular expression contains constructs that allow multiple matching paths for certain inputs. An attacker can supply input that forces the regex engine to explore an exponentially growing number of possibilities, effectively creating an algorithmic complexity attack. This vulnerability is exploitable over the network without requiring authentication or user interaction, allowing remote attackers to trigger the denial of service condition.
Root Cause
The vulnerability stems from inefficient regular expression patterns within the py.path.svnwc module's blame functionality. The regex patterns used to parse SVN blame output contain constructs susceptible to catastrophic backtracking. When malformed or malicious input is provided, the regex engine cannot efficiently determine a match or non-match, leading to exponential time complexity in processing. The specific issue was addressed in GitHub Pull Request #257.
Attack Vector
The attack vector is network-based, requiring no privileges or user interaction. An attacker can exploit this vulnerability by providing crafted input to any application that uses the py library's SVN working copy blame functionality. The malicious input triggers catastrophic backtracking in the regular expression engine, causing the target system's CPU to spike and potentially rendering the application unresponsive.
The attack does not require authentication, and the attacker does not need any special privileges on the target system. Any application that processes untrusted input through the vulnerable py.path.svnwc.blame() functionality is susceptible to this denial of service attack. For technical details on the vulnerability and its fix, see GitHub Issue #256.
Detection Methods for CVE-2020-29651
Indicators of Compromise
- Unusual CPU spikes on systems running applications that use the py library
- Application processes consuming 100% CPU for extended periods when processing SVN-related operations
- Service timeouts or unresponsive applications that utilize py.path.svnwc functionality
- Repeated requests to endpoints that trigger blame functionality with unusually long or malformed input
Detection Strategies
- Monitor application performance metrics for abnormal CPU utilization patterns associated with Python processes
- Implement request timeout monitoring to detect hanging requests that may indicate ReDoS exploitation attempts
- Deploy input validation rules to flag requests containing suspiciously long strings or repeated patterns targeting blame functionality
- Use static code analysis tools to identify usage of vulnerable py library versions in your codebase
Monitoring Recommendations
- Enable detailed logging for applications using the py library to capture input patterns that may indicate exploitation attempts
- Configure alerting thresholds for CPU utilization spikes in containerized or virtualized Python application environments
- Monitor application response times and set baseline thresholds to detect degradation caused by ReDoS attacks
- Review dependency inventories regularly to ensure vulnerable versions of the py library are identified and tracked
How to Mitigate CVE-2020-29651
Immediate Actions Required
- Update the py library to a patched version that addresses the ReDoS vulnerability
- Review your application's dependencies to identify all instances where the vulnerable py library is used
- Implement input validation and length limits on any data that may be processed by the py.path.svnwc module
- Consider implementing request timeouts at the application level to prevent long-running regex operations from consuming resources
Patch Information
The vulnerability has been addressed by the pytest development team. The fix is available in GitHub commit 4a9017d, which modifies the problematic regular expression patterns to prevent catastrophic backtracking. Organizations should upgrade to a patched version of the py library that includes this fix. Additional security advisories have been released by Fedora, Oracle, and Debian LTS.
Workarounds
- Implement input length restrictions on data processed by the vulnerable component to limit the potential for catastrophic backtracking
- Add request timeouts at the web server or application layer to terminate requests that take excessive processing time
- If the SVN working copy functionality is not required, consider disabling or removing the py.path.svnwc component from your deployment
- Deploy web application firewall rules to filter input containing patterns known to trigger ReDoS conditions
# Upgrade py library to patched version
pip install --upgrade py
# Verify installed version
pip show py | grep Version
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


