Skip to main content

Tornado CVE-2026-116577

| EUVDEUVD-2026-110318 MEDIUM
Inefficient Algorithmic Complexity (CWE-407)
2026-10-26 GitHub_M GHSA-pcg2-g6cj-q92c
5.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Open HTTP connection to Tornado server
  2. Exploit
    Send header block with many obs-fold continuation lines
  3. Execution
    Parser repeatedly concatenates continuations (O(n²)) on IOLoop
  4. Impact
    Event 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Tornado < 6.6

Affected Packages

pypi tornado fix: 6.6

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

Vendor (GitHub_M) PRIMARY 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
vuln.today AI 5.3 MEDIUM

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Red Hat 5.3 MEDIUM

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
Low

Lifecycle Timeline

1
Patch available
Oct 26, 2026 - 21:03 EUVD

DescriptionCVE.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
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 14,702 pypi packages depend on tornado (1,258 direct, 13,586 indirect)

Ecosystem-wide dependent count for version 6.6.

Threat Intelligence Overview

EPSS Score
0.4%
Top 68% exploitable
Prevalence
Medium
widely used Python async web framework (e.g. Jupyter), but not universal infrastructure
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

46
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2024-42733 CRITICAL POC
9.8 Mar 07

An issue in Docmosis Tornado v.2.9.7 and before allows a remote attacker to execute arbitrary code via a crafted script

CVE-2023-25266 HIGH POC
8.8 Feb 28

An issue was discovered in Docmosis Tornado prior to version 2.9.5. Rated high severity (CVSS 8.8), this vulnerability i

CVE-2025-67726 HIGH POC
7.5

py3-tornado in Alpine Linux received a security fix packaged as version 6.5.4-r0, addressing an unspecified vulnerabilit

CVE-2023-25265 HIGH POC
7.5 Feb 28

Docmosis Tornado <= 2.9.4 is vulnerable to Directory Traversal leading to the disclosure of arbitrary content on the fil

CVE-2023-25264 HIGH POC
7.5 Feb 28

An issue was discovered in Docmosis Tornado prior to version 2.9.5. Rated high severity (CVSS 7.5), this vulnerability i

CVE-2026-103262 HIGH
8.7 Oct 01

Denial of service in the Tornado web framework's CurlAsyncHTTPClient (all releases before 6.5.9) lets an unauthenticated

CVE-2026-31958 HIGH
8.7 Mar 11

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

CVE-2026-91990 HIGH
8.7 Sep 15

Memory amplification denial of service in the Tornado Python web framework before 6.5.8 lets unauthenticated remote atta

CVE-2026-91992 HIGH
8.2 Sep 15

Credential leakage in Tornado's CurlAsyncHTTPClient (all releases through 6.5.6) lets sensitive per-request state — clie

CVE-2026-103263 HIGH
8.2 Oct 01

Unauthenticated local file disclosure in Tornado before 6.5.9 lets remote attackers read files outside a configured stat

CVE-2026-82397 HIGH
7.5 Aug 31

Denial-of-service in Tornado prior to 6.5.8 allows unauthenticated remote attackers to stall the entire server by sendin

CVE-2025-67725 HIGH
7.5

Tornado Python web framework on Alpine Linux received a security fix in package version 6.5.4-r0, addressing an uncharac

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy