GitHub Advisoryadvisory · PyPI

GHSA-pcg2-g6cj-q92c Tornado: Quadratic CPU usage when parsing HTTP headers with line folding

MEDIUM Published 2026-10-28 Modified 2026-10-28 Official page ↗
Aliases
CVE-2026-116577
Ecosystem
PyPI
Packages
tornado
Severity
Moderate
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Weaknesses
CWE-407, CWE-770
Reviewed
2026-10-28

Affected packages

• PyPI tornado: < 6.6 → fixed in 6.6

Description

Summary Tornado's HTTP header parser takes quadratic time (O(n²)) when a header value is continued across many "obsolete line folding" (obs-fold) lines. An unauthenticated attacker can send a request whose header block is mostly short continuation lines. Parsing it uses a large amount of CPU on the IOLoop thread and blocks every other connection that process is serving. This issue is closely related to CVE-2025-67725 (GHSA-c98p-7wgm-6p64). The fix for that advisory covered repeated headers but not line-folded continuations. Impact All Tornado HTTP servers are affected. Header parsing runs before any application code, so no authentication or particular handler is required. How bad it gets depends on `max_header_size`: • Default (64 KB): each malicious request blocks the event loop for tens of milliseconds. Repeated requests can degrade service. • Raised `max_header_size`: the cost grows with the square of the header size. A single 1 MB request can block the process for several seconds. Only availability is affected. Confidentiality and integrity are not. Patches Fixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds • Keep `max_header_size` at its default value or lower it. This limits the impact but doesn't remove it. • Run Tornado behind a reverse proxy that rejects or normalizes obsolete line folding before forwarding requests. Credit Reported by @manus-pi.

Related

Alias · CVE (1)

  • CVE-2026-116577 Tornado is a Python web framework and asynchronous networking library. vulnerability

Weakness · CWE (2)

  • CWE-407 Inefficient Algorithmic Complexity weakness
  • CWE-770 Allocation of Resources Without Limits or Throttling weakness

References