ZeroHour

CVE-2023-54397

large

HTTP Request Smuggling via Malformed Content-Length Parsing in Tornado < 6.3.3

CVSS 4.0
9.0 critical
EPSS
Published
()
Modified
AI analysis

Tornado, the open-source Python asynchronous web framework and HTTP server, contains an HTTP request smuggling vulnerability (CWE-444) in all versions before 6.3.3 due to improper parsing of Content-Length headers that accept non-standard characters. An attacker triggers the flaw by sending crafted HTTP requests containing these malformed Content-Length values, which Tornado parses differently than front-end proxies do, allowing the attacker to bypass proxy validation and smuggle a second, hidden request through the proxy to the Tornado backend. Successful exploitation can let an attacker bypass access controls, poison caches, or hijack other users' sessions when Tornado is deployed behind certain proxy configurations; the issue is rated CVSS 4.0 9.0 (critical) but only manifests in specific proxy-fronted deployments. Anyone running Tornado versions prior to 6.3.3 — whether directly as an HTTP server or embedded in Python applications such as web services or Jupyter-based tooling — behind a reverse proxy or load balancer is potentially affected. There is no known public proof-of-concept and no evidence of exploitation in the wild; the flaw is not on the CISA KEV list.

What to do: Upgrade Tornado to version 6.3.3 or later, which enforces strict, standards-compliant Content-Length header parsing; if you cannot upgrade, verify and pin your deployment's dependencies since Tornado is often pulled in transitively. If upgrading is delayed, configure the front-end proxy or load balancer to reject or normalize requests with malformed Content-Length headers (values containing non-standard characters) so both layers interpret requests identically. Audit proxy-to-Tornado deployments for signs of desync such as unexpected 4xx responses, cache misbehavior, or requests attributed to the wrong client.

Affected
Tornado Project (tornadoweb.org) Tornado (Python web framework / HTTP server, PyPI package 'tornado')before 6.3.3
Estimated exposure
largemillions of Python environments carry an affected Tornado version (tens of millions of monthly PyPI downloads); the subset actually vulnerable —… — Tornado is a top-tier PyPI package with tens of millions of monthly downloads (partly as a transitive dependency, e.g. Jupyter), but no public scan data identifies how many Tornado servers are exposed behind fronting proxies, so only an…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

Tornado before 6.3.3 contains an HTTP request smuggling vulnerability due to improper parsing of Content-Length headers accepting non-standard characters. Attackers can send crafted HTTP requests with these characters to bypass proxy validation and smuggle requests when deployed behind certain proxies.

Weakness
CWE-444
Vector
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:L/VI:H/VA:N/SC:L/SI:H/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

In the news

No ingested article mentions this CVE yet.