Tornado Web Server Quadratic DoS Vulnerability (CVE-2025-67726)
A high-severity quadratic time complexity vulnerability (CVE-2025-67726) in Tornado's `_parseparam` function allows an attacker to cause a Denial of Service (DoS) by sending crafted `multipart/form-data` requests with malicious parameters in the `Content-Disposition` header to vulnerable Tornado web servers versions prior to 6.5.3.
CVE search metadata
CVE search record: CVE-2025-67726. Severity: high. CVSS: 7.5. EPSS: 0.38%. KEV: no. Product: Tornado (< 6.5.3). Brief: Tornado Web Server Quadratic DoS Vulnerability (CVE-2025-67726). Brief link: https://feed.craftedsignal.io/briefs/2026-07-20-tornado-quadratic-dos/
Triage facts
Revision 2- Applicability
- Tornado (< 6.5.3)
- Evidence
- Unknown
- Severity
- Low
- Sources
- 1 public source
- Freshness
- Revision 2Jul 20, 18:58 UTC
- Vulnerabilities
- 1 CVE
Revision history 1 entry · Revision 2
- Revision 2
Repaired a legacy canonical identity collision
Changed: slug
A high-severity Denial of Service (DoS) vulnerability, tracked as CVE-2025-67726, exists in the Tornado web framework, affecting versions prior to 6.5.3. This vulnerability stems from an inefficient algorithm within the _parseparam function located in httputil.py, which is responsible for parsing HTTP header values such as those found in multipart/form-data requests. Specifically, the function repeatedly calls string.count() within a nested loop when processing quoted semicolons (e.g., param=";"). An attacker can exploit this by sending a crafted HTTP request containing a large number of such parameters in a Content-Disposition header. This triggers a quadratic increase (O(n²)) in server CPU usage during parsing. Due to Tornado's single event loop architecture, a single malicious request can render the entire server unresponsive for an extended period, leading to a complete DoS.
Attack Chain
- Attacker identifies a web server running an unpatched Tornado instance, specifically versions prior to 6.5.3.
- Attacker crafts a malicious HTTP request intended to exploit the
_parseparamfunction. - The request includes a
Content-Dispositionheader, typically found withinmultipart/form-datarequests. - Within this
Content-Dispositionheader, the attacker embeds a large quantity of specially crafted parameters. - These parameters are designed to leverage quoted semicolons (e.g.,
filename="data;a=b;c=d;;"), which trigger the inefficient parsing logic. - Upon receiving the malicious request, the vulnerable Tornado server initiates parsing of the
Content-Dispositionheader using the_parseparamfunction inhttputil.py. - The quadratic time complexity (O(n²)) of
_parseparamwhen processing these crafted parameters consumes excessive CPU resources. - Due to Tornado's single event loop architecture, the server becomes unresponsive to legitimate requests, resulting in a Denial of Service.
Impact
Successful exploitation of CVE-2025-67726 leads to a complete Denial of Service for the affected Tornado web server. The server's CPU usage increases quadratically, rendering it unresponsive and unable to process legitimate requests. This can cause significant disruption to services, downtime, and potential data loss for applications reliant on the vulnerable Tornado instance. The impact is primarily on the availability of the web service.
Recommendation
- Patch CVE-2025-67726 immediately by upgrading all Tornado installations to version 6.5.3 or later.
- Implement a Web Application Firewall (WAF) or intrusion prevention system (IPS) capable of inspecting and blocking HTTP requests with abnormally large or malformed
Content-Dispositionheaders containing repeated quoted semicolons, to mitigate attacks against CVE-2025-67726 before patching is complete.