tornado
Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
Activity
- Latest release
- 1w ago
- Total releases
- 90
- Cadence
- ~24 days
- Last 12 months
- 12
Reach
- Stars
- 22.2k
Details
- License
- Apache-2.0
- First release
- May 18, 2010
| Version | Released | |
|---|---|---|
6.6
minor
| ||
6.6rc1
pre
3 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev | ||
6.6b1
pre
3 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev | ||
6.6a1
pre
3 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev | ||
6.5.10
patch
3 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev | ||
6.5.9
patch
3 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev | ||
6.5.8
patch
6 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev | ||
6.5.7
patch
9 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2026-91991
GHSA-wwv5-g3v4-889x
Sep 01, 2026
Tornado: Incomplete fix for CVE-2026-35536: cookie attribute injection re-opened via the legacy case-insensitive `**kwargs` path in `set_cookie`
Low
Network
Low
None
SummaryThe CVE-2026-35536 fix added a validation loop that rejects
The patch's regression test ( Affected code
Steps to reproduce
ImpactInjection of independent cookie attributes (force/drop Suggested remediationApply the same CreditReported as part of an incomplete-patch measurement study (responsible disclosure). Affected versions
6.5.5
6.5.6
6.5.7
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev | ||
6.5.6
patch
10 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2026-91991
GHSA-wwv5-g3v4-889x
Sep 01, 2026
Tornado: Incomplete fix for CVE-2026-35536: cookie attribute injection re-opened via the legacy case-insensitive `**kwargs` path in `set_cookie`
Low
Network
Low
None
SummaryThe CVE-2026-35536 fix added a validation loop that rejects
The patch's regression test ( Affected code
Steps to reproduce
ImpactInjection of independent cookie attributes (force/drop Suggested remediationApply the same CreditReported as part of an incomplete-patch measurement study (responsible disclosure). Affected versions
6.5.5
6.5.6
6.5.7
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2026-91992
GHSA-pw6j-qg29-8w7f
Jun 15, 2026
Tornado: CurlAsyncHTTPClient leaks per-request credentials on handle reuse
5.9
/ 10
Medium
Network
High
None
None
Unchanged
High
None
None
CurlAsyncHTTPClient leaks per-request credentials on handle reuseSummary
DetailsIn Vector A — client TLS certificate (
A request that sets Vector B — proxy credentials (
A request that sets a new The same class also affects PoCBoth reproduce against the pinned release using public API only
( Vector A — client TLS certificateThe two servers listen on different ports, so request B opens a fresh TCP+TLS connection; the certificate can only reach server 2 via the persisted handle option, not connection or session reuse.
Output (
Vector B — proxy credentialsEach proxy is a separate listener capturing the raw request bytes.
Output (
Impact
Proposed CWE: CWE-200 / CWE-672. Proposed CVSS 3.1:
MitigationA single fix closes all instances of this class: call Alternatively, add explicit clearing branches mirroring the existing
Until a fix is available, use a separate Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 70 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5b1
Fixed in
6.5.7
References Updated Sep 16, 2026 · Source: OSV.dev | ||
6.5.5
patch
13 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2026-91991
GHSA-wwv5-g3v4-889x
Sep 01, 2026
Tornado: Incomplete fix for CVE-2026-35536: cookie attribute injection re-opened via the legacy case-insensitive `**kwargs` path in `set_cookie`
Low
Network
Low
None
SummaryThe CVE-2026-35536 fix added a validation loop that rejects
The patch's regression test ( Affected code
Steps to reproduce
ImpactInjection of independent cookie attributes (force/drop Suggested remediationApply the same CreditReported as part of an incomplete-patch measurement study (responsible disclosure). Affected versions
6.5.5
6.5.6
6.5.7
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2026-49853
PYSEC-2026-3387
GHSA-3x9g-8vmp-wqvf
Jul 13, 2026
Tornado: Authorization header forwarded across cross-origin redirects in SimpleAsyncHTTPClient
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryWhen SimpleAsyncHTTPClient follows a 3xx redirect, it shallow-copies the original HTTPRequest, rewrites the URL, decrements max_redirects, and removes only the Host header. It does not clear Authorization, auth_username, auth_password, or auth_mode when the redirect target changes origin. As a result, credentials intended for one origin can be forwarded to a different origin when follow_redirects=True, which is the default. Beginning in Tornado 6.5.6, Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 69 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5b1
Fixed in
6.5.6
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49855
PYSEC-2026-3389
GHSA-mgf9-4vpg-hj56
Jul 13, 2026
tornado AsyncHTTPClient accumulates decompressed chunks without size limit (gzip bomb)
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
Tornado's gzip decompression routines work in limited-size chunks, but have no overall limit for the total size of decompressed chunks that they will accumulate (There has always been a limit for the total compressed size). This allows a malicious server to consume effectively unlimited amounts of memory if it is accessed via SimpleAsyncHTTPClient in its default configuration. This bug is fixed in Tornado 6.5.6. Prior to upgrading, this issue can be mitigated by setting Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 69 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5b1
Fixed in
6.5.6
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49854
PYSEC-2026-3388
GHSA-cx3h-4qpv-8hc9
Jul 13, 2026
Tornado has out-of-bounds memory access via C extension
3.7
/ 10
Low
Network
High
None
None
Unchanged
Low
None
None
SummaryTornado's optional native extension The behavior is reachable from Tornado's XSRF token decoder when MitigationsThis bug is fixed in Tornado 6.5.6. Prior to upgrading to this version, setting the environment variable TORNADO_EXTENSION=0 will disable the vulnerable code (at the expense of reducing websocket performance). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 69 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5b1
Fixed in
6.5.6
References
Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-91992
GHSA-pw6j-qg29-8w7f
Jun 15, 2026
Tornado: CurlAsyncHTTPClient leaks per-request credentials on handle reuse
5.9
/ 10
Medium
Network
High
None
None
Unchanged
High
None
None
CurlAsyncHTTPClient leaks per-request credentials on handle reuseSummary
DetailsIn Vector A — client TLS certificate (
A request that sets Vector B — proxy credentials (
A request that sets a new The same class also affects PoCBoth reproduce against the pinned release using public API only
( Vector A — client TLS certificateThe two servers listen on different ports, so request B opens a fresh TCP+TLS connection; the certificate can only reach server 2 via the persisted handle option, not connection or session reuse.
Output (
Vector B — proxy credentialsEach proxy is a separate listener capturing the raw request bytes.
Output (
Impact
Proposed CWE: CWE-200 / CWE-672. Proposed CVSS 3.1:
MitigationA single fix closes all instances of this class: call Alternatively, add explicit clearing branches mirroring the existing
Until a fix is available, use a separate Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 70 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5b1
Fixed in
6.5.7
References Updated Sep 16, 2026 · Source: OSV.dev | ||
6.5.4
patch
14 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2026-49853
PYSEC-2026-3387
GHSA-3x9g-8vmp-wqvf
Jul 13, 2026
Tornado: Authorization header forwarded across cross-origin redirects in SimpleAsyncHTTPClient
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryWhen SimpleAsyncHTTPClient follows a 3xx redirect, it shallow-copies the original HTTPRequest, rewrites the URL, decrements max_redirects, and removes only the Host header. It does not clear Authorization, auth_username, auth_password, or auth_mode when the redirect target changes origin. As a result, credentials intended for one origin can be forwarded to a different origin when follow_redirects=True, which is the default. Beginning in Tornado 6.5.6, Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 69 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5b1
Fixed in
6.5.6
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49855
PYSEC-2026-3389
GHSA-mgf9-4vpg-hj56
Jul 13, 2026
tornado AsyncHTTPClient accumulates decompressed chunks without size limit (gzip bomb)
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
Tornado's gzip decompression routines work in limited-size chunks, but have no overall limit for the total size of decompressed chunks that they will accumulate (There has always been a limit for the total compressed size). This allows a malicious server to consume effectively unlimited amounts of memory if it is accessed via SimpleAsyncHTTPClient in its default configuration. This bug is fixed in Tornado 6.5.6. Prior to upgrading, this issue can be mitigated by setting Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 69 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5b1
Fixed in
6.5.6
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49854
PYSEC-2026-3388
GHSA-cx3h-4qpv-8hc9
Jul 13, 2026
Tornado has out-of-bounds memory access via C extension
3.7
/ 10
Low
Network
High
None
None
Unchanged
Low
None
None
SummaryTornado's optional native extension The behavior is reachable from Tornado's XSRF token decoder when MitigationsThis bug is fixed in Tornado 6.5.6. Prior to upgrading to this version, setting the environment variable TORNADO_EXTENSION=0 will disable the vulnerable code (at the expense of reducing websocket performance). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 69 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5b1
Fixed in
6.5.6
References
Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-91992
GHSA-pw6j-qg29-8w7f
Jun 15, 2026
Tornado: CurlAsyncHTTPClient leaks per-request credentials on handle reuse
5.9
/ 10
Medium
Network
High
None
None
Unchanged
High
None
None
CurlAsyncHTTPClient leaks per-request credentials on handle reuseSummary
DetailsIn Vector A — client TLS certificate (
A request that sets Vector B — proxy credentials (
A request that sets a new The same class also affects PoCBoth reproduce against the pinned release using public API only
( Vector A — client TLS certificateThe two servers listen on different ports, so request B opens a fresh TCP+TLS connection; the certificate can only reach server 2 via the persisted handle option, not connection or session reuse.
Output (
Vector B — proxy credentialsEach proxy is a separate listener capturing the raw request bytes.
Output (
Impact
Proposed CWE: CWE-200 / CWE-672. Proposed CVSS 3.1:
MitigationA single fix closes all instances of this class: call Alternatively, add explicit clearing branches mirroring the existing
Until a fix is available, use a separate Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 70 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5b1
Fixed in
6.5.7
References Updated Sep 16, 2026 · Source: OSV.dev
CVE-2026-35536
GHSA-fqwm-6jpj-5wxc
GHSA-78cv-mqj4-43f7
PYSEC-2026-2287
Apr 03, 2026
Tornado has cookie attribute injection via .RequestHandler.set_cookie
7.2
/ 10
High
Network
Low
None
None
Changed
Low
Low
None
In Tornado before 6.5.5, cookie attribute injection could occur because the domain, path, and samesite arguments to Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 68 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5b1
Fixed in
6.5.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-31958
GHSA-qjxf-f2mg-c6mc
PYSEC-2026-140
Mar 12, 2026
Tornado is vulnerable to DoS due to too many multipart parts
High
Network
Low
None
None
In versions of Tornado prior to 6.5.5, the only limit on the number of parts in Tornado 6.5.5 introduces new limits on the size and complexity of multipart bodies, including a default limit of 100 parts per request. These limits are configurable if needed; see Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 68 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5b1
Fixed in
6.5.5
References
Updated Sep 10, 2026 · Source: OSV.dev | ||
6.5.3
patch
14 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2026-49853
PYSEC-2026-3387
GHSA-3x9g-8vmp-wqvf
Jul 13, 2026
Tornado: Authorization header forwarded across cross-origin redirects in SimpleAsyncHTTPClient
7.7
/ 10
High
Network
Low
Low
None
Changed
High
None
None
SummaryWhen SimpleAsyncHTTPClient follows a 3xx redirect, it shallow-copies the original HTTPRequest, rewrites the URL, decrements max_redirects, and removes only the Host header. It does not clear Authorization, auth_username, auth_password, or auth_mode when the redirect target changes origin. As a result, credentials intended for one origin can be forwarded to a different origin when follow_redirects=True, which is the default. Beginning in Tornado 6.5.6, Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 69 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5b1
Fixed in
6.5.6
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49855
PYSEC-2026-3389
GHSA-mgf9-4vpg-hj56
Jul 13, 2026
tornado AsyncHTTPClient accumulates decompressed chunks without size limit (gzip bomb)
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
Tornado's gzip decompression routines work in limited-size chunks, but have no overall limit for the total size of decompressed chunks that they will accumulate (There has always been a limit for the total compressed size). This allows a malicious server to consume effectively unlimited amounts of memory if it is accessed via SimpleAsyncHTTPClient in its default configuration. This bug is fixed in Tornado 6.5.6. Prior to upgrading, this issue can be mitigated by setting Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 69 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5b1
Fixed in
6.5.6
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-49854
PYSEC-2026-3388
GHSA-cx3h-4qpv-8hc9
Jul 13, 2026
Tornado has out-of-bounds memory access via C extension
3.7
/ 10
Low
Network
High
None
None
Unchanged
Low
None
None
SummaryTornado's optional native extension The behavior is reachable from Tornado's XSRF token decoder when MitigationsThis bug is fixed in Tornado 6.5.6. Prior to upgrading to this version, setting the environment variable TORNADO_EXTENSION=0 will disable the vulnerable code (at the expense of reducing websocket performance). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 69 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5b1
Fixed in
6.5.6
References
Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-91992
GHSA-pw6j-qg29-8w7f
Jun 15, 2026
Tornado: CurlAsyncHTTPClient leaks per-request credentials on handle reuse
5.9
/ 10
Medium
Network
High
None
None
Unchanged
High
None
None
CurlAsyncHTTPClient leaks per-request credentials on handle reuseSummary
DetailsIn Vector A — client TLS certificate (
A request that sets Vector B — proxy credentials (
A request that sets a new The same class also affects PoCBoth reproduce against the pinned release using public API only
( Vector A — client TLS certificateThe two servers listen on different ports, so request B opens a fresh TCP+TLS connection; the certificate can only reach server 2 via the persisted handle option, not connection or session reuse.
Output (
Vector B — proxy credentialsEach proxy is a separate listener capturing the raw request bytes.
Output (
Impact
Proposed CWE: CWE-200 / CWE-672. Proposed CVSS 3.1:
MitigationA single fix closes all instances of this class: call Alternatively, add explicit clearing branches mirroring the existing
Until a fix is available, use a separate Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 70 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5b1
Fixed in
6.5.7
References Updated Sep 16, 2026 · Source: OSV.dev
CVE-2026-35536
GHSA-fqwm-6jpj-5wxc
GHSA-78cv-mqj4-43f7
PYSEC-2026-2287
Apr 03, 2026
Tornado has cookie attribute injection via .RequestHandler.set_cookie
7.2
/ 10
High
Network
Low
None
None
Changed
Low
Low
None
In Tornado before 6.5.5, cookie attribute injection could occur because the domain, path, and samesite arguments to Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 68 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5b1
Fixed in
6.5.5
References Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-31958
GHSA-qjxf-f2mg-c6mc
PYSEC-2026-140
Mar 12, 2026
Tornado is vulnerable to DoS due to too many multipart parts
High
Network
Low
None
None
In versions of Tornado prior to 6.5.5, the only limit on the number of parts in Tornado 6.5.5 introduces new limits on the size and complexity of multipart bodies, including a default limit of 100 parts per request. These limits are configurable if needed; see Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 68 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5b1
Fixed in
6.5.5
References
Updated Sep 10, 2026 · Source: OSV.dev | ||
6.5.2
patch
17 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.5.1
patch
17 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.5
minor
17 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.5b1
pre
18 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.4.2
patch
18 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.4.1
patch
19 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.4
minor
21 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.4b1
pre
21 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.3.3
patch
21 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.3.2
patch
22 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.3.1
patch
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.3
minor
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.3b1
pre
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.2
minor
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.2b2
pre
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.2b1
pre
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.1
minor
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.1b2
pre
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.1b1
pre
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.0.4
patch
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.0.3
patch
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.0.2
patch
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.0.1
patch
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.0
major
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.0b1
pre
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
6.0a1
pre
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
5.1.1
patch
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
5.1
minor
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
5.1b1
pre
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
5.0.2
patch
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
5.0.1
patch
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
5.0
major
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
5.0b1
pre
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
4.5.3
patch
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
5.0a1
pre
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
4.5.2
patch
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
4.5.1
patch
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
| ||
4.5
minor
23 CVEs
CVE-2026-115927
GHSA-r4j5-9xpp-3985
Oct 28, 2026
Tornado: Event loop blocking and excess memory use from chunked bodies with many small chunks
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryWhen Tornado reads an HTTP/1.1 body that uses chunked transfer encoding, it processes all chunks that have already arrived without yielding to the event loop. A client can send a body made of millions of 1-byte chunks, which blocks the event loop (and therefore every other connection served by that process) for the entire time it takes to parse the body. A body near the default Bodies made of tiny chunks also consumed far more memory than their size: a handler that does not use ImpactAll Tornado HTTP servers are affected when they receive a request body for a handler that reads it, which includes any handler that does not reject the request before the body is read. No authentication is required. Lowering
PatchesFixed in Tornado 6.6. Tornado now yields to the event loop periodically while reading any body, combines small chunks before passing them to Applications using Workarounds
CreditReported by uttej-badwane. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116578
GHSA-pw9p-v7r6-gx4p
Oct 28, 2026
Tornado: Open redirect in RedirectHandler via protocol-relative URLs
Low
Network
Low
None
Summary
ImpactApplications are affected if they use
Applications are not affected if their PatchesFixed in Tornado 6.6. Workarounds
CreditReported by Longwei Wang (@gn00295120). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-116577
GHSA-pcg2-g6cj-q92c
Oct 28, 2026
Tornado: Quadratic CPU usage when parsing HTTP headers with line folding
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
SummaryTornado'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. ImpactAll 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
Only availability is affected. Confidentiality and integrity are not. PatchesFixed in Tornado 6.6 by removing support for obsolete line folding completely; header lines that begin with whitespace are now rejected. Workarounds
CreditReported by @manus-pi. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 77 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.10
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5.9
6.5b1
6.6a1
6.6b1
6.6rc1
Fixed in
6.6
References
Updated Oct 28, 2026 · Source: OSV.dev
CVE-2026-103261
GHSA-3hv7-mjh2-fv65
Sep 30, 2026
Tornado: Unbounded query-string argument count allows event-loop-stalling DoS
5.3
/ 10
Medium
Network
Low
None
None
Unchanged
None
None
Low
Summary
File: Root Cause
Compare with the POST-body path fixed one commit earlier in the same release:
Both call sites funnel through the same The request line + headers together are capped at Attack Scenario
Verification (dynamic, local reproduction against v6.5.8)Ran the unmodified v6.5.8 source directly (no external dependencies needed) with a minimal
ImpactAll Tornado servers/applications are affected — this triggers on every request with a query
string, independent of application/handler logic. An unauthenticated, unprivileged remote
attacker can measurably degrade response times for all other clients sharing the same
Recommended Fix
This reuses the existing Verified: with the fix applied, requests with ≤1000 query-string fields are unaffected;
requests with >1000 fields are rejected with Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103262
GHSA-chx6-46f5-w4vp
Sep 30, 2026
tornado: CurlAsyncHTTPClient enforces no response-size limit — decompression bomb drives unbounded memory accumulation to OOM
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
An unbounded memory accumulation (decompression bomb) in Details
libcurl decompresses the response before invoking Contrast —
Attack chain (attacker = malicious HTTP server; victim = any Tornado app doing
Variant without compression: PoCVerified end-to-end 2026-08-15 in a single container (cgroup Build & run the victim
Verified environment: debian:bookworm-slim, Python 3.11.2, python3-pycurl 7.45.2 (libcurl 7.88.1, zlib 1.2.13), tornado master snapshot Reproduction steps
PoC sourceFull PoC source (victim_curl.py, stdlib only, no dependencies): victim_curl.py (secret gist, unlisted). The gist carries Captured output (2026-08-15 run, verbatim excerpts)
Honest framing of the endpoint: the OOM kill at ~1008 MB was forced by the test's 1 GiB cgroup cap as the observation instrument; the "unbounded" claim rests on the linear no-plateau RSS curve, death at 67% wire delivery, and the absence of any size accounting in the code path — with more memory the transfer would have continued to the full 4 GiB payload. ImpactDenial of service (memory exhaustion) of any Tornado application that uses the curl HTTP client and fetches attacker-influenced URLs. A single ~4 MB response kills a 1 GiB process in ~3 s; wire cost scales as Suggested fixEnforce a byte budget in the write path of Affected versions
CreditReported by the diff/ambidiff security research effort (afldl). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-103263
GHSA-c2m8-h5v5-343r
Sep 30, 2026
Tornado: StaticFileHandler follows symlinks outside static root (path traversal)
High
Network
High
None
None
SummaryStaticFileHandler allows an unauthenticated attacker to read arbitrary files from the server's filesystem by requesting a path that resolves to a symbolic link placed inside the static root directory. Any application that serves user-uploadable content, or whose static directory is populated by a build/deploy pipeline that creates symlinks (e.g. npm link, webpack, Docker volume mounts, CDN sync tools), is affected. An attacker who can trigger the creation of a symlink pointing outside the static root—or exploit one that already exists—can retrieve sensitive files such as /etc/passwd, private keys, configuration files, or application secrets. DetailsThe vulnerability is in tornado.web.StaticFileHandler, specifically in the interaction between two methods in tornado/web.py:
Immediately after, PoCComplete instructions, including specific configuration details, to reproduce the vulnerability. Prerequisites: Python 3.x, Tornado installed.
ImpactAny application using StaticFileHandler is potentially affected if:
An unauthenticated remote attacker can read any file readable by the process user: application secrets, private TLS keys, database credentials, /etc/shadow, SSH keys, or source code (depending on the process's filesystem permissions). Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 72 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5.8
6.5b1
Fixed in
6.5.9
References
Updated Oct 02, 2026 · Source: OSV.dev
CVE-2026-82397
PYSEC-2026-3928
GHSA-mpf4-983q-p7j4
Sep 10, 2026
Tornado: Urlencoded body parsing omits max_num_fields, so one request can stall the event loop
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryTornado parses Where it is
The path to it is entirely server-side and pre-dispatch. The size that reaches it is bounded only by the body cap, which defaults to the stream's ImpactDenial of service against the whole process, not one request. Tornado is single-threaded and the parse is synchronous on the event loop, so every other connection waits. No authentication is needed if any route accepts a form post, which is the normal case. Suggested fixPass a bound:
with a conservative default and a way for applications to raise it. CPython raises Lowering the default body cap for urlencoded specifically would help too, since 100 MB of form fields is not a shape any real client sends. Why I do not think this is a duplicateThe published tornado advisories cover out-of-bounds access in the C extension, unbounded accumulation of decompressed chunks in Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 10, 2026 · Source: OSV.dev
CVE-2026-91990
GHSA-8423-8fgw-73vq
Sep 01, 2026
tornado: multipart split() creates huge temp list before max_parts check -> memory amplification DoS (httputil.py:34)
Medium
Network
Low
None
None
DescriptionSummary
Root cause
PoCgist: https://gist.github.com/afldl/649861f25d39b53b7edbe0298e171617
FixCount separators without materializing the list (e.g. CreditReported by afldl, 2026-07. Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 71 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5.3
6.5.4
6.5.5
6.5.6
6.5.7
6.5b1
Fixed in
6.5.8
References
Updated Sep 16, 2026 · Source: OSV.dev
CVE-2025-67726
GHSA-jhmp-mqwm-3gq8
PYSEC-2025-267
Jul 20, 2026
Tornado: Quadratic DoS via Crafted Multipart Parameters
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe As a result, if an attacker sends a request with a large number of maliciously crafted parameters in a Severity: High Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67725
GHSA-c98p-7wgm-6p64
PYSEC-2025-266
Jul 20, 2026
Tornado: Quadratic DoS via Repeated Header Coalescing
7.5
/ 10
High
Network
Low
None
None
Unchanged
None
None
High
SummaryThe Given Tornado's single event loop architecture, a single maliciously crafted HTTP request can block the server's event loop for an extended period, causing a Denial of Service (DoS). Severity: High if Affected versions
0.2
1.0
1.1
1.1.1
1.2
1.2.1
2.0
2.1
2.1.1
2.2
2.2.1
2.3
+ 66 more Show less
2.4
2.4.1
3.0
3.0.1
3.0.2
3.1
3.1.1
3.2
3.2.1
3.2.2
4.0
4.0.1
4.0.2
4.1
4.1b2
4.2
4.2.1
4.2b1
4.3
4.3b1
4.3b2
4.4
4.4.1
4.4.2
4.4.3
4.4b1
4.5
4.5.1
4.5.2
4.5.3
4.5b1
4.5b2
5.0
5.0.1
5.0.2
5.0a1
5.0b1
5.1
5.1.1
5.1b1
6.0
6.0.1
6.0.2
6.0.3
6.0.4
6.0a1
6.0b1
6.1
6.1b1
6.1b2
6.2
6.2b1
6.2b2
6.3
6.3.1
6.3.2
6.3.3
6.3b1
6.4
6.4.1
6.4.2
6.4b1
6.5
6.5.1
6.5.2
6.5b1
Fixed in
6.5.3
References
Updated Jul 20, 2026 · Source: OSV.dev
CVE-2025-67724
GHSA-pr2v-jx2c-wg9f
PYSEC-2025-265
Jul 20, 2026
Tornado vulnerable to Header Injection and XSS via reason argument
5.4
/ 10
Medium
Network
Low
None
Required
Unchanged
Low
Low
None
Header injection and XSS via
|