Summary
CVE-2026-91990 is a memory amplification denial-of-service vulnerability in the Tornado Python web framework’s multipart form-data parser. It affects all versions of tornado prior to 6.5.8 and is rated HIGH severity (CVSS v3.1 base score 7.5 / CVSS v4.0 8.7). A remote, unauthenticated attacker can crash or degrade a Tornado-based service by sending crafted multipart HTTP requests, without needing valid credentials or any user interaction.
Technical details
- Root cause: The
parse_multipart_form_datafunction in Tornado’shttputil.pysplits the raw multipart request body on the boundary delimiter (data.split(b"--"+boundary+b"rn")) and materializes the full list of parts in memory before it checks the request against the configuredmax_partslimit. - Trigger condition: An attacker sends a multipart/form-data request containing a very large number of parts (e.g., roughly 100,000 parts in a ~600KB body) to any endpoint that parses multipart form data.
- Attack vector: Network, pre-authentication, no user interaction required (CVSS AV:N/AC:L/PR:N/UI:N).
- Impact: Because the part list is built before validation, the server allocates memory disproportionate to the request size, exhausting available memory and causing denial of service (CVSS availability impact: HIGH; no confidentiality or integrity impact).
Affected software
tornado(tornadoweb/tornado), PyPI packagetornado: all versions before 6.5.8- Fixed in: 6.5.8 and later
Severity
- CVSS v3.1 Base Score: 7.5 (HIGH) —
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - CVSS v4.0 Base Score: 8.7 (HIGH) —
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N - CWE-770: Allocation of Resources Without Limits or Throttling
Mitigation and recommended actions
- Immediate: Upgrade
tornadoto version 6.5.8 or later, which validates/limits the number of multipart parts before building the full parts list. - If patching is not immediately possible:
- Enforce request body size limits at a reverse proxy or load balancer in front of the Tornado application to cap the size of incoming multipart requests.
- Restrict or rate-limit access to endpoints that accept multipart/form-data uploads.
- Monitor for abnormal memory consumption or spikes correlated with multipart upload traffic as an indicator of attempted exploitation.

