CVE-2025-67726: Tornado: Quadratic DoS via Crafted Multipart Parameters
The _parseparam function in Tornado’s httputil.py is used to parse specific HTTP header values, such as those in multipart/form-data. This function uses an inefficient algorithm that repeatedly calls string.count() within a nested loop while processing quoted semicolons (e.g., param=";").
As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Content-Disposition header, the server’s CPU usage increases quadratically (O(n²)) during parsing. Due to Tornado’s single event loop architecture, a single malicious request can cause the entire server to become unresponsive for an extended period, leading to a Denial of Service (DoS).
Severity: High
References
- github.com/advisories/GHSA-jhmp-mqwm-3gq8
- github.com/pypa/advisory-database/tree/main/vulns/tornado/PYSEC-2025-267.yaml
- github.com/tornadoweb/tornado/commit/771472cfdaeebc0d89a9cc46e249f8891a6b29cd
- github.com/tornadoweb/tornado/releases/tag/v6.5.3
- github.com/tornadoweb/tornado/security/advisories/GHSA-jhmp-mqwm-3gq8
- nvd.nist.gov/vuln/detail/CVE-2025-67726
Code Behaviors & Features
Detect and mitigate CVE-2025-67726 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →