Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessOpen HTTP connection to Tornado server
-
ExploitSend header block with many obs-fold continuation lines
-
ExecutionParser repeatedly concatenates continuations (O(n²)) on IOLoop
-
ImpactEvent loop CPU saturated, other connections blocked
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Algorithmic complexity limits
|
| Exploitation Conditions | No special conditions - remote unauthenticated exploitation against default configurations of any Tornado HTTP server; header parsing runs before application code, so no handler, route, or authentication is required (PR:N). The concrete trigger is a request header block containing many obsolete line-folding (obs-fold) continuation lines - header lines beginning with whitespace. Limiting factors: at the default max_header_size (64 KB) a single request only blocks the IOLoop for tens of milliseconds, so meaningful degradation requires repeated requests; impact grows with the square of header size, so severity is markedly higher only where an operator has raised max_header_size. Per the advisory, keeping or lowering max_header_size reduces (but does not eliminate) impact, and a reverse proxy that rejects or normalizes obs-fold before forwarding also limits exposure. |
| Impact | This is a real but modest-priority availability issue rather than a high-urgency emergency, and the signals are internally consistent. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L, base 5.3) correctly reflects a remote, unauthenticated, low-complexity attack that affects availability only - confidentiality and integrity are untouched, matching the vendor advisory and CWE-407 (inefficient algorithmic complexity). EPSS is low at 0.38% (32nd percentile), there is no CISA KEV listing, and no public exploit was identified at time of analysis, so there is no evidence of active or widespread exploitation; the vuln.today decision label is 'this_month', not act_now or emergency. The one nuance the raw CVSS score hides is configuration dependence: the advisory states that at the default max_header_size (64 KB) a single request only blocks the IOLoop for tens of milliseconds (sustained impact requires many repeated requests), whereas with a raised max_header_size a single ~1 MB request can block the process for several seconds - so A:L is defensible for default deployments but real-world severity scales with operator configuration. No SSVC exploitation/automatable/technical-impact decision values were supplied in the input, so that framework cannot be cross-referenced here. Overall: patch on a normal maintenance cadence; this is not a drop-everything flaw, but it is trivially triggerable and worth closing, especially where max_header_size has been increased. |
| Exploit ScenarioDerived | An unauthenticated attacker opens an HTTP connection to any Tornado server and sends a request whose header block consists mostly of short 'obsolete line folding' (obs-fold) continuation lines. Because header parsing runs on the IOLoop thread before any application or authentication code, the quadratic concatenation consumes CPU and stalls every other connection that process is serving; repeated requests (or a single large one where max_header_size is raised) degrade or block the service. No public exploit was identified at time of analysis, though the mechanism is fully described in the GHSA advisory and the fixing PR. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Tornado's HTTP/1.x header parser consumes quadratic CPU time when a header value is spread across many obsolete line-folding (obs-fold) continuation lines, allowing a client to stall the single IOLoop thread and delay every other connection that process serves. All Tornado HTTP servers running versions prior to 6.6 are affected, because header parsing happens before any application code, so no route, handler, or credentials are needed; only availability is impacted (C:N/I:N/A:L). At the default 64 KB max_header_size a single malicious request blocks the loop for tens of milliseconds, so meaningful degradation requires repeated requests, and the impact scales with the square of the configured header limit; EPSS is low (0.38%, 32nd percentile) and no public exploit has been identified at time of analysis, though the vendor has released a fix in 6.6.
RemediationAI
Upgrade to Tornado 6.6 (release v6.6.0, https://github.com/tornadoweb/tornado/releases/tag/v6.6.0), which removes obsolete line folding from the header parser via PR https://github.com/tornadoweb/tornado/pull/3765 (commit 1b7a1dc9f340f52de929852e8125aa12f25297c9); be aware this is a behavioral change pulled forward from Tornado 7.0, so any client or intermediary that still sends folded headers will now have its request rejected with an HTTPInputError, and the client-side test accepts either a 599 error or a successfully unfolded response depending on backend. If upgrading immediately is not possible, the vendor-documented workarounds are to keep max_header_size at its default or lower it - which bounds but does not remove the quadratic cost, and may cause legitimate requests with large headers or cookies to be rejected - and to front Tornado with a reverse proxy that rejects or normalizes obs-fold continuations before forwarding, which shifts responsibility to the proxy's own parsing behavior. No public exploit code has been identified at time of analysis, and the reported EPSS score is low, so this is a this-month priority rather than an emergency.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is an algorithmic complexity issue (CWE-407, with the advisory also tagging CWE-770) in Tornado's HTTPHeaders.parse_line implementation in tornado/httputil.py. The parser tracked the last header name in _last_key; when a line began with whitespace it treated it as an RFC 7230 obs-fold continuation, stripped the whitespace, prepended a space, and appended it to the previously stored value while also invalidating the combined-header cache. Repeatedly concatenating short continuation fragments into a growing string is O(n²) in the total header size, and this work happens on the IOLoop thread during header parsing - before headers_received fires and before any application code executes - so one slow parse blocks all other connections handled by that process. obs-fold is obsolete in RFC 9112 §5.2, and the 6.6 fix removes support entirely (header lines beginning with whitespace now raise HTTPInputError) ahead of the originally announced Tornado 7.0 removal; the patch also sets need_delegate_close when a pre-header parse error occurs so clients are not left hanging, and LF-without-CR support remains until 7.0. The advisory notes this is closely related to CVE-2025-67725 (GHSA-c98p-7wgm-6p64), whose fix covered repeated headers but not line-folded continuations.
Know when Tornado gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Remote, unauthenticated, low-complexity trigger before app code (AV:N/AC:L/PR:N/UI:N); availability-only DoS with partial/temporary impact under default config, hence A:L and C/I:N.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Tornado is a Python web framework and asynchronous networking library. Prior to 6.6, Tornado's HTTP header parser accepts obsolete line folding and repeatedly concatenates short continuation lines, causing quadratic CPU consumption on the IOLoop thread. An unauthenticated client can submit a header block containing many obsolete line-folding continuations before application code runs, blocking other connections served by the process. The cost grows with max_header_size, and only availability is affected. This issue is fixed in version 6.6.
Blast Radius
ecosystem impact- 14,702 pypi packages depend on tornado (1,258 direct, 13,586 indirect)
Ecosystem-wide dependent count for version 6.6.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
An issue in Docmosis Tornado v.2.9.7 and before allows a remote attacker to execute arbitrary code via a crafted script
An issue was discovered in Docmosis Tornado prior to version 2.9.5. Rated high severity (CVSS 8.8), this vulnerability i
py3-tornado in Alpine Linux received a security fix packaged as version 6.5.4-r0, addressing an unspecified vulnerabilit
Docmosis Tornado <= 2.9.4 is vulnerable to Directory Traversal leading to the disclosure of arbitrary content on the fil
An issue was discovered in Docmosis Tornado prior to version 2.9.5. Rated high severity (CVSS 7.5), this vulnerability i
Denial of service in the Tornado web framework's CurlAsyncHTTPClient (all releases before 6.5.9) lets an unauthenticated
In versions of Tornado prior to 6.5.5, the only limit on the number of parts in `multipart/form-data` is the `max_body_s
Memory amplification denial of service in the Tornado Python web framework before 6.5.8 lets unauthenticated remote atta
Credential leakage in Tornado's CurlAsyncHTTPClient (all releases through 6.5.6) lets sensitive per-request state — clie
Unauthenticated local file disclosure in Tornado before 6.5.9 lets remote attackers read files outside a configured stat
Denial-of-service in Tornado prior to 6.5.8 allows unauthenticated remote attackers to stall the entire server by sendin
Tornado Python web framework on Alpine Linux received a security fix in package version 6.5.4-r0, addressing an uncharac
EUVD-2026-110318
GHSA-pcg2-g6cj-q92c
NVD
CVE.org
EPSS
Exploit-DB