<?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>Plug (&gt;= 1.16.0, &lt; 1.16.4) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/plug--1.16.0--1.16.4/</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, 23 Sep 2026 19:59:30 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/plug--1.16.0--1.16.4/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>Plug Framework Quadratic Complexity Denial of Service via CVE-2026-54892</title><link>https://feed.craftedsignal.io/briefs/2026-09-plug-dos/</link><pubDate>Wed, 23 Sep 2026 19:59:30 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-09-plug-dos/</guid><description>An unauthenticated remote attacker can trigger a denial-of-service condition in Elixir applications using the Plug framework by submitting URL-encoded payloads with deeply nested brackets that consume excessive CPU cycles on the BEAM scheduler.</description><content:encoded><![CDATA[<p>The Elixir Plug library (specifically the <code>Plug.Conn.Query</code> module) contains a performance vulnerability stemming from quadratic-time complexity during the decoding of nested query or body parameters. When parsing URL-encoded keys with deep bracket nesting (e.g., <code>a[a][a]...=1</code>), the library performs repetitive map operations and prefix hashing that scale at O(N^2) relative to the nesting depth.</p>
<p>Because the <code>Plug.Parsers</code> component accepts <code>application/x-www-form-urlencoded</code> payloads up to the configured global body limit (defaulting to 20 MB), an attacker can inject hundreds of thousands of nesting levels in a single request. This behavior pins a BEAM scheduler for minutes. By sending a small number of concurrent requests, an attacker can exhaust all available schedulers, rendering the entire Elixir or Phoenix application unresponsive. The vulnerability affects multiple versions across the 1.15.x to 1.19.x branches. Defenders should prioritize updating to the patched versions provided in the security advisory.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker crafts an HTTP POST request targeting an endpoint handled by the Plug framework.</li>
<li>Attacker sets the <code>Content-Type</code> header to <code>application/x-www-form-urlencoded</code>.</li>
<li>Attacker populates the request body with a parameter string featuring extreme bracket nesting (e.g., millions of <code>[a]</code> segments).</li>
<li>The Plug <code>Plug.Parsers.URLENCODED</code> parser accepts the payload as a valid body within the default 20MB limit.</li>
<li><code>Plug.Conn.Query.decode/4</code> initiates recursive parsing of the nested query keys.</li>
<li>The <code>Plug.Conn.Query.split_keys/6</code> and <code>insert_keys/3</code> functions perform quadratic operations while hashing the growing key prefixes.</li>
<li>The BEAM scheduler becomes pinned by the CPU-intensive decoding process.</li>
<li>Concurrent requests exhaust the scheduler pool, resulting in application-wide denial of service.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation allows an unauthenticated remote attacker to cause a complete denial of service for any internet-facing web application built on the Plug framework (including Phoenix). No specialized knowledge of the target application structure or authentication is required. A single low-bandwidth sender can stall application processing, affecting availability for all legitimate users.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade the Plug library immediately to the patched versions: 1.15.5, 1.16.4, 1.17.2, 1.18.3, or 1.19.3.</li>
<li>Audit application configurations for <code>Plug.Parsers</code> to restrict <code>length</code> and <code>query_length</code> limits to the minimum necessary for expected traffic.</li>
<li>Deploy web application firewall (WAF) rules to detect and drop requests with excessive bracket nesting depth in query strings or POST bodies.</li>
<li>Monitor application performance metrics for sustained, high CPU utilization on BEAM schedulers initiated by short-duration, high-payload requests.</li>
</ul>
]]></content:encoded><category domain="severity">medium</category><category domain="type">advisory</category></item></channel></rss>