<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>Tornado (&lt;= 6.5.7) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/tornado--6.5.7/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Wed, 02 Sep 2026 18:04:24 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/tornado--6.5.7/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>Denial of Service in Tornado via Unbounded Form Field Parsing</title><link>https://feed.craftedsignal.io/briefs/2026-09-tornado-dos/</link><pubDate>Wed, 02 Sep 2026 18:04:24 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-09-tornado-dos/</guid><description>Tornado fails to restrict the number of fields parsed in application/x-www-form-urlencoded request bodies, allowing an unauthenticated attacker to cause a denial-of-service by stalling the event loop.</description><content:encoded><![CDATA[<p>Tornado versions 6.5.7 and earlier are vulnerable to a denial-of-service (DoS) condition due to how they process application/x-www-form-urlencoded request bodies. The web framework utilizes <code>urllib.parse.parse_qs</code> to decode incoming form data but fails to implement the <code>max_num_fields</code> parameter introduced in CPython. Because Tornado is single-threaded and executes this parsing synchronously on the event loop before reaching the application handler, an attacker can send a crafted request body containing tens of millions of field separators. This forces the server process to expend significant CPU cycles on parsing, effectively stalling the event loop and blocking all other concurrent connections. The issue is exacerbated by the default 100 MB request body limit, which provides ample space for an attacker to include roughly fifty million fields in a single HTTP POST request. This vulnerability is pre-dispatch and requires no authentication, making it a critical risk for internet-facing Tornado applications.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker identifies an internet-facing endpoint running a vulnerable Tornado version that accepts POST requests with application/x-www-form-urlencoded content.</li>
<li>Attacker crafts a malicious HTTP POST request body consisting of a large sequence (up to 100 MB) of delimiter characters (e.g., ampersands) to maximize the number of fields.</li>
<li>The request is transmitted to the target Tornado server.</li>
<li>The Tornado HTTP server reads the full request body up to the configured <code>max_buffer_size</code> (default 100 MB).</li>
<li>The server executes <code>tornado.web.RequestHandler._execute</code>, which triggers the synchronous <code>_parse_body</code> routine within the event loop.</li>
<li>The <code>parse_qs_bytes</code> function attempts to parse the unbounded number of fields using <code>urllib.parse.parse_qs</code> without a limit.</li>
<li>The process consumes high CPU while parsing the millions of fields, causing the event loop to hang and ceasing all processing of other legitimate client connections.</li>
<li>The server remains in an unresponsive state until the malicious parsing completes or the process is manually restarted.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation results in a complete denial-of-service for the affected Tornado server process. Since the event loop is blocked synchronously, all legitimate users of the service will experience timeouts or connection resets. This affects any application running on Tornado that accepts POST requests, which is standard for web services, and can be executed by any unauthenticated remote attacker.</p>
<h2 id="recommendation">Recommendation</h2>
<ol>
<li>Upgrade to a version of Tornado that includes a fix for CVE-2026-82397 (future release beyond 6.5.7).</li>
<li>Implement an application-level wrapper or middleware to validate the size and complexity of request bodies before they reach the framework's parser.</li>
<li>Review and reduce the <code>max_buffer_size</code> and request body limits for routes that do not require 100 MB of form data to mitigate the maximum possible input size for the parser.</li>
</ol>
]]></content:encoded><category domain="severity">low</category><category domain="type">advisory</category><category>denial-of-service</category><category>web-application</category><category>vulnerability</category></item></channel></rss>